Apache + ssl
Взято здесь. И у меня заработало, с небольшими изменениями под себя, причем но только на 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 Следует
- На запрос пароля выполняем скрипт
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 работает нормально
плизз хелп.