Как сделать HTTPS на сайте и защититься от SSL-атак

Обычной установки SSL сертификата может быть недостаточно, поскольку нужно также обеспечить защиту от атак, направленных на сам SSL. В данной заметке пошагово рассказывается как сделать HTTPS на сайте, работающем под Apache и защититься от известных SSL-атак. Для проверки будет использован популярный сервис тестирования HTTPS:

summary-a

 

Приобретение SSL-сертификата

Существуют бесплатные и самоподписные сертификаты, но они предназначены для специфичных нужд внутри компаний, поэтому их в расчёт брать не будем. А обычные сертификаты стоят денежку, поэтому первым шагом определимся со следующим:

  1. Тип сертификата;
  2. Центр сертификации;
  3. Регистратор.

Стоимость сертификатов в среднем варьируется от 999 до 15 000 рублей, в зависимости от типа и центра сертификации. Самые дорогие сертификаты от Symantec, у которого цены могут доходить до 100 000 рублей и доступны для регистрации только юридическим лицам. Подробнее о разновидностях SSL-сертификатов и как выбрать нужный, хорошо написано в статье на хабре: https://habrahabr.ru/company/tuthost/blog/150433/.

Получать сертификат непосредственно у центра сертификации невыгодно – у них розничные цены намного выше, чем у регистраторов, сотрудничающих с ними. При выборе регистратора, обратите внимание, чтобы его же сайт имел действительный расширенный (EV) сертификат. Определить, так ли это, можно, взглянув на адресную строку браузера — она должна быть зелёной с названием компании:

address_bar

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

После выдачи сертификата, регистратор пришлёт либо файлами, либо письмом следующие ключи: приватный ключ (private.key), сам SSL-сертификат (domain_name.crt), а также корневой и промежуточный сертификаты.

Далее предполагается, что у вас VPS или выделенный сервер и имеются навыки администрирования. Если это не так, то обратитесь к вашему хостинг-провайдеру за помощью с установкой сертификата.

Итак, сохраним сертификат в файл, например, /root/crt/domain_name/your_domain.crt. Приватный ключ в /root/crt/domain_name/private.key. А в файл /root/crt/domain_name/chain.crt вставим сперва промежуточный сертификат, и следом за ним корневой (с новой строки без пробелов и пустых строк).

Создадим в конфигурации хостов веб-сервера Apache новый хост с 443 портом:

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /root/crt/domain_name/domain_name.crt
    SSLCertificateKeyFile /root/crt/domain_name/private.key
    SSLCertificateChainFile /root/crt/domain_name/chain.crt
    ServerAdmin email@localhost
    ServerName domain_name
    ServerAlias www.domain_name
    DocumentRoot /var/www/domain_name/
    <Directory /var/www/domain_name/>
        Options Indexes FollowSymLinks
        php_admin_value open_basedir /tmp:/var/www/domain_name/
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog /var/www/logs/domain_name-error.log
    LogLevel warn
    CustomLog /var/www/logs/domain_name-access.log combined
</VirtualHost>

Активируем модуль SSL для Apache (команды могут отличаться в зависимости от ОС):

a2enmod ssl

Защита от SSL-атак

Откроем конфигурацию SSL модуля:

mcedit /etc/apache2/mods-enabled/ssl.conf

Где установим следующие опции для защиты от атак на SSL:

SSLProtocol all -SSLv3 -SSLv2
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5
SSLCompression Off

Обратите внимание: SSLCipherSuite … !MD5 — в одну строку.

Перезапускаем Apache:

service apache2 restart

И, наконец, переходим по https://domain_name, убеждаемся в работоспособности и тестируем на https://www.ssllabs.com/ssltest/index.html

Комментарии

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *