Apache : Apache 2.2 + SSL

Установка и первоначальная настройка.
Я как обычно ставить буду из портов. Советую перед установкой обновить их.
# 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]:UA
State or Province Name (full name) [Some-State]:Ukraine
Locality Name (eg, city) []:Krivbass
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ST[]RM
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:storm.in.ua
Email Address []:root@storm.in.ua

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Signature ok
subject=/C=UA/ST=Ukraine/L=Krivbass/O=ST[]RM /CN=storm.in.ua/
emailAddress=root@storm.in.ua
Getting Private key
Enter pass phrase for server.key:


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



Все прошло без проблем, осталось перенести их в надежное место:
# cp server.* /usr/local/etc/apache22/


После этого добавляем в httpd.conf строку:
Include etc/apache22/extra/httpd-ssl.conf


Последний шаг - редактирование httpd-ssl.conf:

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

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

# На запрос пароля выполняем скрипт
SSLPassPhraseDialog exec:/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


Вы только посетили наш сайт, КОММЕНТИРОВАНИЕ будет доступно через несколько минут.
возможно у Вас отключен javascript, если включен - просто обновите страницу