понедельник, 2 декабря 2013 г.

Конвертация PFX certificate в ключи для использования в APache

С OpenSSL можно сконвертировать pfx сертификат для использования в Apache :
openssl pkcs12 -in domain.pfx -clcerts -nokeys -out domain.cer
openssl pkcs12 -in domain.pfx -nocerts -nodes  -out domain.key   
Первая команда извлекает public key to domain.cer.
Вторая команда извлекает private key to domain.key.
Исправляем конфиг Apache :
<VirtualHost 192.168.0.1:443>
 ...
 SSLEngine on
 SSLCertificateFile /path/to/domain.cer
 SSLCertificateKeyFile /path/to/domain.key
 ...
</VirtualHost>

Настройка безопасного соединения HTTPS (SSL)

1. Установка необходимого программного обеспечения.
Для настройки WEB-сервера с SSL шифрованием вам нужно, чтобы на сервере были установлены OpenSSL и mod_ssl. В CentOS установка данного ПО может быть выполнена следующей командой:
# yum install mod_ssl openssl 
2. Создание самоподписанного сертификата
Используя OpenSSL Мы можем сгенерировать самоподписанный сертификат.
Для создания ключа используемого в сертификате, нам будет необходимы права пользователя root:
Создаем приватный ключ
# openssl genrsa -out ca.key 1024
Создаем CSR  (Certificate signing request)
# openssl req -new -key ca.key -out ca.csr
Создаем самоподписанный ключ
# openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt 
Копируем в корректную директорию
# cp ca.crt /etc/pki/tls/certs 
# cp ca.key /etc/pki/tls/private/ca.key 
# cp ca.csr /etc/pki/tls/private/ca.csr 
После этого нужно в файле /etc/httpd/conf.d/ssl.conf найти строку с указанием SSLCertificateFile. Если вы используете редактор vi, то сделать это можно так:
# vi +/SSLCertificateFile /etc/httpd/conf.d/ssl.conf
Раскомментируйте строку если нужно и отредактируйте как указано ниже (если вы используете пути из данной инструкции):
SSLCertificateFile /etc/pki/tls/certs/ca.crt
После этого установите корректный путь к файлу ключа (Certificate Key File) несколькими строками ниже:
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
Сохраняем файл, выходим из редактора и перезапускаем Apache:
# /etc/init.d/httpd restart
Теперь если вы укажете в пути к сайту протокол https:
https://ServerName_or_IP/
вам будет выдано сообщение с просьбой подтвердить, что вы принимаете сертификат.
3. Настройка виртуальных хостов (virtual hosts)
Так же как вы настраивали виртуальные хосты apache для http на порту 80 вы их настраиваете для https на порту 443. Пример:
<VirtualHost *:80>
        <Directory /var/www/vhosts/yoursite.com/httpdocs>
        AllowOverride All
        </Directory>
        DocumentRoot /var/www/vhosts/yoursite.com/httpdocs
        ServerName yoursite.com
</VirtualHost>
Чтобы добавить такой же сайт на порту 443 вам нужно указать :
MyHost *:443
Где вместо MyHost вам нужно указать ваш реальный виртуальный хост.
Запись для VirtualHost с httpd будет выглядеть примерно так:
<VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/ca.crt
        SSLCertificateKeyFile /etc/pki/tls/private/ca.key 
<Directory /var/www/vhosts/yoursite.com/httpsdocs>
        AllowOverride All
</Directory>
        DocumentRoot /var/www/vhosts/yoursite.com/httpsdocs
        ServerName yoursite.com
</VirtualHost>
Перезапускаем Apache:
# /etc/init.d/httpd restart 
4. Настройка фаервола.
Так же вам возможно понадобится на фаерволе добавить разрешающее правило для порта 443:
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# /sbin/service iptables save
# iptables -L -v