Для начала рассмотрим, что Вам может дать поддержка 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.