Прикручиваем бесплатный SSL сертификат на 3 года от WoSign к NGINX (A на ssllabs)

Для начала рассмотрим, что Вам может дать поддержка HTTPS на сайте.

  • шифрование передаваемых данных между пользователями и сайтом;
  • повышенное доверие поисковиков (Google уже использует HTTPS в качестве фактора положения сайта в своей поисковой выдаче);
  • зелёный замочек в адресной строке, радующий глаз, и на подсознательном уровне вызывающий доверие у посетителей;
  • к 2017 году разработчики Google Chrome и Mozilla Firefox обещают отказаться от работы с сайтами, работающими не по HTTPS.

Всё ещё думаете, нужно ли переходить на HTTPS? Вот и я уже не думаю. Итак, приступим.

Шаг 1 — Регистрация в WoSign

Переходим по адресу https://login.wosign.com/reg.html и заполняем форму регистрации, тут мне пришлось воспользоваться переводчиком страниц, встроенным в Google Chrome, так как сайт на китайском языке. После чего необходимо подтвердить аккаунт по электронной почте.

Шаг 2 — Подтверждение прав на домен

После активации аккаунта переходим сюда — https://buy.wosign.com/free/?lan=en и задаём настройки: указываем доменное имя, тут же нам говорят о том, что сертификат будет содержать данные также для поддомена www, если мы не поставим галочку напротив пункта об отказе для этого пункта. Здесь же выбираем срок действия — 3 года, и указываем в качестве языка цепочки сертификата английский. В качестве алгоритма шифрования указываем SHA2. Вводим капчу, после чего нас перекидывает на страницу https://buy.wosign.com/free/?lan=en#myorder. Здесь жмём по ссылке Domain Control verification и попадаем на страницу подтверждения домена. На выбор предлагается отправить либо письмо на один из служебных почтовых ящиков, расположенных на вашем домене, либо путём заливки html-файла в корень директории сайта. После подтверждения прав на владение доменом будет предложено 2 варианта: система самостоятельно сгенерирует закрытый ключ и сертификат, либо предложит ввести свой CSR-запрос и получить сертификат, закрытый ключ при этом будет известен только нам, второй вариант более предпочтительный, им мы и воспользуемся.

Шаг 3 — Создание закрытого ключа и CSR-запроса

Генерируем закрытый 4096 битный RSA-ключ и CSR-запрос и сохраняем их в папке /etc/ssl/

openssl req -new -newkey rsa:4096 -nodes -keyout /etc/ssl/3_domain.com.key -out /etc/ssl/domain.com.csr

Шаг 4 — Получение SSL-сертификата

Содержимое файла /etc/ssl/domain.com.csr копируем в окно ввода CSR-запроса и нажимаем кнопку Submit. Через некоторое время (до двух часов) на почтовый ящик придёт уведомление о готовности сертификата. Перейдя по ссылке вы сможете скачать .zip архив с наборами сертификатов для различных типов веб-серверов. В нашем случае на интересуют файлы, расположенные во вложенном архиве for Apache.zip. Здесь должны лежать 2 файла: 1_root_bundle.crt и 2_domain.com.crt. Первый представляет собой файл корневого сертификата удостоверяющего центра, второй — файл вашего сертификата. Перемещаем их в папку /etc/ssl/

Шаг 5 — Настройка NGINX

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

Для этого выполним команду:

cat /etc/ssl/2_domain.com.crt /etc/ssl/1_root_bundle.crt > /etc/ssl/combined.crt

Для усиления криптостойкости необходимо использовать файл параметров DH-шифров с длиной не менее 2048 бит. Создадим такой файл:

openssl dhparam -out /etc/ssl/dh2048.pem 2048

В секцию http (как правило в файле /etc/nginx/nginx.conf) добавляем следующие строки:

http{
...
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:TLS:2m;
    ssl_session_timeout 2m;
...
}

А в секции server для виртуального хоста указываем следующие директивы:

server {
    listen      443 ssl;
    server_name domain.com www.domain.com;
    ssl_certificate      /etc/ssl/combined.crt;
    ssl_certificate_key  /etc/ssl/3_domain.com.key;
    ssl_dhparam /etc/ssl/dh2048.pem;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';
}

Теперь подробнее об используемых директивах.

ssl_prefer_server_ciphers on; — указывает, чтобы при использовании протоколов TLS серверные шифры были более приоритетны, чем клиентские.

ssl_session_cache shared:TLS:2m; — тип и объём кэша для хранения параметров сессий. Параметр shared задает общий для всех рабочих процессов nginx кэш, 2m — объем кэша.

ssl_session_timeout 5m; — таймаут сессии в кэше (5 минут).

ssl_certificate /etc/ssl/combined.crt; — файл, содержащий сертификат сайта и корневой сертификат УЦ.

ssl_certificate_key /etc/ssl/3_domain.com.key; — закрытый ключ.

ssl_dhparam /etc/ssl/dh2048.pem; — файл параметров Диффи — Хеллмана.

ssl_protocols TLSv1.2 TLSv1.1 TLSv1; — поддерживаемые протоколы. Обратите внимание, здесь отсутствует SSLv3, IE6 не будет поддерживаться.

ssl_ciphers EECDH+ECDSA+AESGCM…; — наборы шифров, данный набор включает forward secrecy.

add_header Strict-Transport-Security ‘max-age=31536000; includeSubDomains’; — передача Strict-Transport-Secutiry заголовка, указывающего браузеру что сайт доступен только по https. В нашем случае срок данного правила устанавливается на год, и распространяется на все поддомены.

После сохранения изменений перезапускаем nginx командой:

service nginx restart

Проверяем свой сайт на сайте ssllabs.com. Если всё правильно настроено будет получена оценка A.

Leave a Reply