Установка ssl сертификата на сервер Apache

Следуя трендам рекомендаций Google, а именно рекомендация по переходу на https протокол, я решил себе также поставить https протокол на свой сайт. HTTPS получается за счет криптографического протокола SSL. SSL может быть как самописный, так и покупной. Сегодня мы рассмотрим покупной вариант. За SSL протокол я отдал чуть более 10$, заказывал здесь. Выбрал Comodo PositiveSSL.

7065603_m[1]

На что следует обращать внимание при покупке SSL сертификатов

Сертификаты бывают нескольких типов: с проверкой домена (Например, мой блог), с проверкой организации (Например, на сайте сбербанк онлайн), WildCard с проверкой домена и его поддоменов.

Вариант SSL сертификата с проверкой домена и его поддоменов, а также с проверкой организации являются самыми дорогими.

Установка SSL сертификата на Freebsd

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

—–BEGIN RSA PRIVATE KEY—–

MIIEogIBAAKCAQEA8LeHO55cbcUL277Ij3j5gczcUiUa1GXU0wIhB1bcYWCqQv/S

….

H5bmegLWI5Cf1diHOYCjwCxg59q9IfpUDJ4QOcBLYCwm1ZuaGJc=

—–END RSA PRIVATE KEY—–

Сохраняем его как www_domain.key, где domain – ваш домен.

Далее придут еще ряд файлов:

Для Comodo Essential SSL будут отправлены следующие файлы:

  • AddTrustExternalCARoot.crt
    ComodoUTNSGCCA.crt
    EssentialSSLCA_2.crt
    domainname.crt
    UTNAddTrustSGCCA.crt

Для Comodo PositiveSSL центром сертификации будут отправлены следующие файлы:

  • AddTrustExternalCARoot.crt
    COMODORSAAddTrustCA.crt
    COMODORSADomainValidationSecureServerCA.crt
    domainname.crt

 

где domainname.crt сертификат вашего домена.

Оставшиеся файлы нужны для составления цепочки сертификата. В первом случае необходимо объединить EssentialSSLCA_2.crt ComodoUTNSGCCA.crt UTNAddTrustSGCCA.crt AddTrustExternalCARoot.crt > yourDomain.ca-bundle

В FreeBSD/Unix команда:

#cat EssentialSSLCA_2.crt ComodoUTNSGCCA.crt UTNAddTrustSGCCA.crt AddTrustExternalCARoot.crt > yourDomain.ca-bundle

И во втором случае объединить COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >  yourDomain.ca-bundle
Где yourDomain.ca-bundle – сертификат-цепочка из других доменов.
Далее необходимо проверить проброшены ли у вашего сервера 443 порт.
В FreeBSD это можно сделать командой:
# sockstat |grep 443
Результат:
root      httpd      8329 19 tcp4   192.168.225.20:443    *:*
в Linux:
# netstat -napt | grep 443
tcp        0      0 188.120.233.16:443      0.0.0.0:*               LISTEN      731/apache2

Warning: если у вас локальный сервер также проверьте проброс 443 порта по роутеру. При установке SSL протокола на свой блог данный момент у меня вылетел из головы и стоил мне 2х бессонных ночей.
Теперь открываем файл-конфигурации Apache httpd.conf. Там нас интересует следующее
Снимаем комментирование со строк (Убираем решетку перед строкой):
LoadModule ssl_module libexec/apache24/mod_ssl.so
Include etc/apache24/extra/httpd-ssl.conf

Далее открываем httpd-ssl.conf
Прикладываю весь листинг конфигурации с необходимыми комментариями:
#Слушать порт 443
Listen 443
#Использовать все протоколы, кроме SSLv2 и SSLv3 (у них была проблема с криптозащитой, и их могут взломать)
SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
#Виртуальный хост
<VirtualHost *:443>
#Корень сайта
DocumentRoot /usr/local/www/site
#Домен
ServerName site.ru
#e-mail администратора
ServerAdmin simpple@yandex.ru
#Куда записывать логи
ErrorLog /usr/local/www/site/error.log
CustomLog /usr/local/www/site/access.log common
#Использовать SSL
SSLEngine on
#Пути до ключа и сертификатов в указанные пути необходимо разместить ваш ключ и сертификаты, путь до ключа и сертификата может быть отличный. Главное, что бы ключ и сертификаты были в области видимости сервера Apache, рекомендуется размещать их вне доступных для Web директориях, например, в разделе Apache.
SSLCertificateKeyFile "/usr/local/etc/apache24/ssl/site/www_site_ru.key"
SSLCertificateFile "/usr/local/etc/apache24/ssl/site/www_site_ru.crt"
SSLCertificateChainFile "/usr/local/etc/apache24/ssl/site/www_site_ru.ca-bundle"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/www/apache24/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
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>  

При изменении всех параметров не забудьте перезагрузить apache
#service httpd restart

TLS и другие протоколы шифрования

Многие из вас, возможно, уже знают о различных протоколах шифрования, чуть выше данной статьи мы уже отказались от двух таких: SSLv2 и SSLv3. Существуют также современные протоколы шифрования такие, как TLS. TLS1.0 иногда еще называют SSL3.1, но не суть важно. При реализации https на своем сайте вы можете посмотреть, каким протоколом шифрования у вас шифруются все данные. Если вы заметите, что протокол шифрования у вас TLS1.0, то браузер добавит приписку, что данный протокол шифрования устарел и рекомендуется его обновить.

Как же обновить TLS? На самом деле все проще некуда. За возможные протоколы шифрования отвечают криптографические библиотеки операционной системе: в Unix системах это openssl.

Если у вас Freebsd вы всегда можете посмотреть, какую криптографическую библиотеку использует ваша ОС. Делается это командой:

# openssl version

У меня версия openssl 1.0.1p от июля 2015 года, данная криптографическая библиотека поддерживает протокол шифрования вплоть до TLS1.2, что является показателем защищенности данных. Задача в обновлении openssl немного не корректна, т.к. необходимо обновлять целую операционную систему. Скажу лишь следующее, FreeBSD9.2 со своей криптографической библиотекой максимум поддерживала TLS1.0, то же самое и с FreeBSD10.0. Лишь в версии FreeBSDD10.2 я наконец увидел, что используется TLS1.2. Сделать жесткую привязку по использованию того или иного протокола вы можете в конфиге Apache в директории SSLProtocol.

Через неделю у меня встала задача проверить самопальные SSL сертификаты на корректную работу на сервере. В результате манипуляций выяснилось, что в рамках Apache на одном статическом IP можно держать не более 1 домена, при условии, что у вас не WildCard SSL сертификат. Для эксплуатации множества доменов по SSL протоколу в качестве фронтэнда необходимо использовать сервер Nginx, настройку которого я планирую сделать в октябре-ноябре, но это будет уже совсем другая история.

В этой статье я также не разбираю, как использовать криптографические библиотеки для создания SSL сертификатов. Если кому будет интересна и данная тема – пишите в комментариях, обязательно что-нибудь придумаем.

Понравилась статья? - поделись с друзьями!

Категория: Apache