Apache + ssl

Материал из rrv-wiki
Перейти к навигации Перейти к поиску

Взято здесь. И у меня заработало, с небольшими изменениями под себя, причем но только на Apache22, а на Apache20 не захотело.


Установка и первоначальная настройка.

Я как обычно ставить буду из портов. Советую перед установкой обновить их.

# cd /usr/ports/www/apache22/
# make install clean

Все конфигурационные файлы располагаются теперь в /usr/local/etc/apache22/. Давайте отредактируем httpd.conf, а именно добавим/исправим:

# Слушаем 80 порт
	Listen 80

# Имя сервера
	ServerName      fr33man.ru

# Каталог, где храняться html файлы
	DocumentRoot "/usr/local/www/html/"

# Папка для скриптов
	ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"

# Пользовательские странички хранятся в ~/www каталоге
	UserDir www

# Описываем каталоги пользователей
	< Directory "/home/*/www">
	    AllowOverride       None
	    Options             Indexes
	    Order       Deny,Allow
	    Allow       from    All
	< /Directory>

# Описываем папку со скриптами и с Html страничками
	< Directory "/usr/local/www/cgi-bin/">
	    AllowOverride None
	    Options ExecCGI
	    Order Allow,Deny
	    Allow from All
	< /Directory>

	< Directory "/usr/local/www/html/">
	    Options Indexes FollowSymLinks
	    AllowOverride None
	    Order allow,deny
	    Allow from all
	< /Directory>

Здесь мы указываем, что странички пользователей будут храниться в папке www, в их домашнем каталоге. Так же мы описываем каждую директорию. Для начала остановимся на этом, и перейдем к настроке SSL.

Настройка SSL.

Перед настройкой сервера создадим сертефикаты:

# cat gen.sh
 
	#!/bin/sh
	
	openssl genrsa -des3 -rand /dev/random -out server.key 1024
	openssl rsa -in server.key -out server.pem
	openssl req -new -key server.key -out server.csr
	openssl x509 -req -days 365 -in server.csr -signkey \
       server.key -out server.crt
# ./gen.sh
 
	2048 semi-random bytes loaded
	Generating RSA private key, 1024 bit long modulus
	...............++++++
	.....++++++
	e is 65537 (0x10001)
	Enter pass phrase for server.key:
	Verifying - Enter pass phrase for server.key:
	Enter pass phrase for server.key:
	writing RSA key
	Enter pass phrase for server.key:
	You are about to be asked to enter information that will be 
       incorporated
	into your certificate request.
	What you are about to enter is what is called a Distinguished 
       Name or a DN.
	There are quite a few fields but you can leave some blank
	For some fields there will be a default value,
	If you enter '.', the field will be left blank.
	-----
	Country Name (2 letter code) [AU]:RU
	State or Province Name (full name) [Some-State]:Russia
	Locality Name (eg, city) []:Moscow
	Organization Name (eg, company) [Internet Widgits Pty Ltd]:Fr33man inc
	Organizational Unit Name (eg, section) []:
	Common Name (eg, YOUR name) []:ssl.fr33man.ru
	Email Address []:fr33man@fr33man.ru

	Please enter the following 'extra' attributes
	to be sent with your certificate request
	A challenge password []:
	An optional company name []:
	Signature ok
	subject=/C=RU/ST=Russia/L=Moscow/O=Fr33man inc/CN=ssl.fr33man.ru/
	emailAddress=fr33man@fr33man.ru
	Getting Private key
	Enter pass phrase for server.key:

Внимание! Common Name (eg, YOUR name) []:ssl.fr33man.ru требуется указывать реальное имя сервера, которое прописано в DNS.

И еще, поставте на файлы gen.sh, server.crt, server.csr, server.key, server.pem права 0400

# ls
	gen.sh          server.crt      server.csr      server.key      server.pem

Все прошло без проблем, осталось перенести их в надежное место:

# cp server.* /usr/local/etc/apache22/

Последний шаг — редактирование /usr/local/etc/apache22/Includes/httpd-ssl.conf:

# Слушаем 443 порт
	Listen 443

# Добавляем типы, для сертефикатов
	AddType application/x-x509-ca-cert .crt
	AddType application/x-pkcs7-crl    .crl

# На запрос пароля выполняем скрипт
	SSLPassPhraseDialog |/usr/local/etc/apache22/echo

# Параметры SSL кэша
	SSLSessionCache        shmcb:/var/run/ssl_scache(512000)
	SSLSessionCacheTimeout  300
	SSLMutex  file:/var/run/ssl_mutex
	
# Описываем виртуальный хост
	< VirtualHost 213.251.193.69:443>
	
	DocumentRoot "/usr/local/www/html/"
	ServerName ssl.fr33man.ru:443
	ServerAdmin postmaster@fr33man.ru
	ErrorLog /var/log/httpd-error.log
	TransferLog /var/log/httpd-access.log
	
	    Alias /admin/ "/usr/local/www/secretarea/"
	
	    < Directory "/usr/local/www/secretarea">
	        Options All
	        AllowOverride All
	       Order Deny,Allow
	        Allow from all
	    < /Directory>
	
	    < Directory "/usr/local/www/html/">
	        Options Indexes FollowSymLinks
	        AllowOverride None
	        Order allow,deny
	        Allow from all
	    < /Directory>
	
# Включаем режим SSL и указываем пути к сертефикатам
	SSLEngine on
	SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
	SSLCertificateFile /usr/local/etc/apache22/server.crt
	SSLCertificateKeyFile /usr/local/etc/apache22/server.key
	
	< FilesMatch "\.(cgi|shtml|phtml|php)$">
	    SSLOptions +StdEnvVars
	< /FilesMatch>
	< Directory "/usr/local/www/apache22/cgi-bin">
	    SSLOptions +StdEnvVars
	< /Directory>
	
	BrowserMatch ".*MSIE.*" \
	         nokeepalive ssl-unclean-shutdown \
	         downgrade-1.0 force-response-1.0

	CustomLog /var/log/httpd-ssl_request.log \
	          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 
	< /VirtualHost>

Так как директория admin не описана в httpd.conf, то по протоколу http она доступна не будет, но будет доступна через https. В httpd-ssl.conf промелькнул файл /usr/local/etc/apache22/echo. Это простой sh-скрипт, который выводит на экран пароль от секретного ключа:

# cat /usr/local/etc/apache22/echo
	#!/bin/sh
	/bin/echo passphrase
# ls -la /usr/local/etc/apache22/echo
	-rwx------  1 root  wheel  27 Feb 12 09:54 /usr/local/etc/apache22/echo

А нужен он для того, чтобы при перезагрузке apache не спрашивал парольную фразу. Осталось запустить apache и проверить это все в работе:

/usr/local/etc/rc.d/apache22.sh start

Не забудте добавить apache22_enable="YES" в /etc/rc.conf Теперь, если Вы зайдете по адресу https://ssl.fr33man.ru, то Вас спросят: принять или не принять данный сертификат. Прошу заметить, что при обращении http://fr33man.ru/admin/ выдается страничка Not Found, а при обращении по https://ssl.fr33man.ru/admin/ просят ввести пароль, из-за того, что я поставил там htaccess - файл.

Заключение.

Про ssl я читал здесь: mod_ssl и в гугле.


размещено: 2006-11-08, последнее обновление: 2006-11-08, автор: fr33man

Комментарии пользователей [6 шт.]

ALex_hha, 2006-11-11 в 16:43:11

Только не забываем, что сделать несколько сертификатов на разные виртуальные хосты не получится.

>Все прошло без проблем, осталось перенести их в надежное место: а права на файлы с ключами кто будет устанавливать?

>А нужен он для того, чтобы при перезагрузке apache не спрашивал парольную фразу. ее вообще можно убрать

fr33man, 2006-11-11 в 19:57:45

> а права на файлы с ключами кто будет устанавливать?

У меня права по умолчанию 0400.

>ее вообще можно убрать Можно, но зачем?

pushkin, 2006-11-22 в 12:20:43

Привет,

Может кто подскажет можна ли для второго апача написать модуль который будет каждые 5 минут перечитывать данные с файла и кешировать в server_rec.

johndau, 2007-01-25 в 11:32:01

Вместо > # На запрос пароля выполняем скрипт > SSLPassPhraseDialog |/usr/local/etc/apache22/echo Следует

  1. На запрос пароля выполняем скрипт
SSLPassPhraseDialog exec:/usr/local/etc/apache22/echo

maslivets, 2007-05-05 в 7:34:26

После установик возникла проблемка.. При запуски выдавало: "[warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter" Гуугля спасла ситуацию... )) Необходимо добавить строку в /boot/loader.conf 'accf_http_load="YES"'

Сергей, 2007-07-05 в 12:47:47

cd /usr/ports/www/apache22/ make WITH_STATIC_MODULE="ssl"

сделал все как было написано

./apache22 start

умирает... в логах пусто в httpd.conf убираю Include etc/apache22/extra/httpd-ssl.conf работает нормально


плизз хелп.