Ноя 22 2008

Apache 1.3 + mod_ssl

FreeBSD позволяет собрать Apache с поддержкой ssl протокола из портов. Мне понадобилось это для того, что бы почта, и авторизация на веб интерфейсе почты не проходили в открытом виде по сети . Для установки apache с модулем ssl перейдем в каталог порта apache13-modssl и начнем сборку:

cd /usr/ports/www/apache13-modssl
make install


После того как apache соберется, можно приступить к генерации сертификата.
Сгенерировать сертификат можно прямо из директории порта выполнив команду:

make certificate

На экране появится диалог:

STEP 0: Decide the signature algorithm used for certificate
The generated X.509 CA certificate can contain either
RSA or DSA based ingredients. Select the one you want to use.
Signature Algorithm ((R)SA or (D)SA) [R]:

Шаг 0: необходимо выбрать тип сертификата RSA или DSA. Алгоритма RSA представляют из себя алгоритм шифрации с открытым и закрытым ключем. При этом, что бы зашифровать сообщение необходимо иметь открытый ключ, а вот что бы расшифровать — нужно иметь оба ключа. DSA — обозначен как алгоритм цифровой подписи. В своей практике я его не использовал.

STEP 1: Generating RSA private key (1024 bit) [server.key]

Шаг 1: Человеческого участия не требуется, генерируется ключ длиной 1024 bit. На сегодняшний день — такая длина ключа является минимальной для надежной шифрации.

STEP 2: Generating X.509 certificate signing request [server.csr]
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.
1. Country Name             (2 letter code) [XY]:UA
2. State or Province Name   (full name)     [Snake Desert]:Kiev
3. Locality Name            (eg, city)      [Snake Town]:Kiev
4. Organization Name        (eg, company)   [Snake Oil, Ltd]:Hilik
5. Organizational Unit Name (eg, section)   [Webserver Team]:MailServer
6. Common Name              (eg, FQDN)      [www.snakeoil.dom]:mail.hilik.org.ua
7. Email Address            (eg, name@FQDN) [www@snakeoil.dom]:hilik@hilik.org.ua
8. Certificate Validity     (days)          [365]:

Шаг 2: На этом этапе следует заполнить контактную информацию по сертификату. Советую особое внимание уделить имени домена, для которого вы генерируете сертификат. От этого напрямую зависит количество ошибок , которые будет показывать клиентский браузер при подключении к вашему серверу.
Еще один важный пункт — количиство дней, которое будет действовать сертификат. По умолчанию 365 дней.

STEP 3: Generating X.509 certificate signed by Snake Oil CA [server.crt]
Certificate Version (1 or 3) [3]:
Signature ok
subject=/C=XY/ST=Snake Desert/L=Snake Town/O=Snake Oil, Ltd/OU=Webserver Team/CN=www.snakeoil.dom/emailAddress=www@snakeoil.dom
Getting CA Private Key
Verify: matching certificate & key modulus
Verify: matching certificate signature
../conf/ssl.crt/server.crt: /C=XY/ST=Snake Desert/L=Snake Town/O=Snake Oil, Ltd/OU=Certificate Authority/CN=Snake Oil CA/emailAddress=ca@snakeoil.dom
error 10 at 1 depth lookup:certificate has expired
OK

ШАГ 3: На этом этапе генерируется X.509 сертификат. Человеческого участия не требуется. Немного расстраивает фраза о том что корнево сертификат Snake Oil CA заэкспайрился, но страшного в этом ничего нет.

STEP 4: Enrypting RSA private key with a pass phrase for security [server.key]
The contents of the server.key file (the generated private key) has to be
kept secret. So we strongly recommend you to encrypt the server.key file
with a Triple-DES cipher and a Pass Phrase.
Encrypt the private key now? [Y/n]: y
writing RSA key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Fine, you're using an encrypted RSA private key.

Шаг 4: На этом этапе предлагается зашифровать сертификат. Тут можно задать секретную фразу, что бы кто то чужой не воспользовался вашими ключами. Минусом шифрованного сертификата является то, что при старте сервера, он не запустится, пока вы не введете фразу. Если вы все таки решились зашифровать ключ, необходимо внести ключевую фразу состоящую как минимум из 4-х символов.

Если вы все сделали правильно, то появится такое сообщение:

RESULT: Server Certification Files
 
o  conf/ssl.key/server.key
   The PEM-encoded RSA private key file which you configure
   with the 'SSLCertificateKeyFile' directive (automatically done
   when you install via APACI). KEEP THIS FILE PRIVATE!
 
o  conf/ssl.crt/server.crt
   The PEM-encoded X.509 certificate file which you configure
   with the 'SSLCertificateFile' directive (automatically done
   when you install via APACI).
 
o  conf/ssl.csr/server.csr
   The PEM-encoded X.509 certificate signing request file which
   you can send to an official Certificate Authority (CA) in order
   to request a real server certificate (signed by this CA instead
   of our demonstration-only Snake Oil CA) which later can replace
   the conf/ssl.crt/server.crt file.
 
WARNING: Do not use this for real-life/production systems

В нем вам сообщают что ключи размещены, но подписаны не авторитетным центром сертификации, поэтому не рекомендуется использовать в важных производственных системах.

Теперь можно приступать к настройке:

Необходимо сконфигурировать два виртуальных сервера, один обычный http, который будет переадресовывать на второй, который и будет работать по протоколу https.

Первый виртуал хост будет такой:

NameVirtualHost 89.255.34.107:80
 
<VirtualHost 89.255.34.107:80>
    ServerAdmin hilik@hilik.org.ua
    DocumentRoot /usr/local/www/mail.hilik.org.ua/
    ServerName mail.hilik.org.ua
    <Directory /usr/local/www/mail.hilik.org.ua/>
        Redirect permanent / https://mail.hilik.org.ua/
    </Directory>
</VirtualHost>

Настройка вирутал хоста https, займет чуть больше усилий. Для начала, создадим папку для хранения сертификатов, специально выделенную для нашего виртуал хоста:

mkdir /usr/local/etc/apache/mail.hilik.org.ua

и скопируем туда сертификаты:

cp /usr/local/etc/apache/ssl.crt/server.crt /usr/local/etc/apache/mail.hilik.org.ua/
cp /usr/local/etc/apache/ssl.key/server.key /usr/local/etc/apache/mail.hilik.org.ua/

И приступим непосредственно к конфигурированию виртуал хоста:

<VirtualHost 89.255.34.107:443>
 
DocumentRoot "/usr/local/www/mail.hilik.org.ua"
ServerName mail.hilik.org.ua
ServerAdmin hilik@hilik.org.ua
ErrorLog /var/log/httpd-error.log
TransferLog /var/log/httpd-access.log
 
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/etc/apache/mail.hilik.org.ua/server.crt
SSLCertificateKeyFile /usr/local/etc/apache/mail.hilik.org.ua/server.key
 
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/usr/local/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
 
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
 
CustomLog /var/log/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 
</VirtualHost>

Разместить этот виртуал хост необходимо, после определения опций отвечающих за ssl, примерно тут:

<IfDefine SSL>
 
##
## SSL Virtual Host Context
##

По умолчанию в этом блоке находится определение стандартного виртуал хоста с SSL.

После того как, мы закончили править конфигурационный файл, проверим конфигурацию:

apachectl configtest

и если мы получили

Syntax OK

приступим к финальной конфигурации /etc/rc.conf

echo "apache_enable=YES" >> /etc/rc.conf

Можно запускать:

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

Настройка закончена.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Украинская Баннерная Сеть