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
Настройка закончена.



