Каждый год приходится обновлять сертификат для сайтов, работающих через https. Решил описать весь процесс настройки. В качестве домена для демонстрации используется www.example.com.
Подробнее о настройке ssl можно узнать в официальной документации nginx.
На сайте StartSSL создаём сертификат «Web Server SSL/TLS Certificate».
Первым получаем секретный ключ *.key. Сохраняем его в файл www.example.com.key. Данный ключ защищён паролем. Можно поступить двумя способами:
- создать файл с паролями от секретных ключей (каждый пароль указан на отдельной строке) и указать путь к нему в директиве ssl_password_file;
- расшифровывать ключ командой openssl rsa -in www.example.com.key -out www.example.com.nopass.key.
Первый необходимый нам файл получен. Его нужно скормить директиве ssl_certificate_key в конфигурации nginx.
Далее получаем сертификат в формате PEM. Сохраняем его в файл www.example.com.crt. Обязательно проверяем, что в файле есть пустая строка в конце. Далее склеиваем с промежуточным сертификатом sub.class1.server.ca.pem ссылку на который вы можете найти на странице получения сертификата или через меню сайта StartSSL.:
cat www.example.com.crt sub.class1.server.ca.pem > www.example.com.pem
Файл www.example.com.pem скармливаем директиве ssl_certificate. Сертификат действителен на указанный вами домен третьего уровня, так и второго example.com. Добавить в сертификат дополнительные поддомены на бесплатном аккаунте startssl.com нельзя. Если на одном IP адресе требуется создать несколько SSL-сайтов можно воспользоваться SNI (Server Name Indication) — технология установки нескольких SSL сертификатов на один IP Поддержка SNI есть во всех современных браузерах. Проверить включена ли данная технология в вашем nginx можно командой nginx -V:
# nginx -V nginx version: nginx/1.10.0 built with OpenSSL 1.0.2h 3 May 2016 TLS SNI support enabled ...
В выводе должно быть отображено сообщение «TLS SNI support enabled».
Настроим параметры SSL.
ssl_session_timeout 10m; # Увеличим время жизни сессий, по умолчанию 5 минут ssl_session_cache shared:SSL:10m; # Размер разделяемого процесссами кэша # ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Версия 1.9.1 и более поздних это значение по умолчанию, можно не указывать # ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384: # EECDH+aRSA+SHA256:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4"; # ssl_prefer_server_ciphers on; # Установить более высокий приоритет серверным шифрам, чем клиентским ssl_password_file ssl/ssl.passwd; # Файл с паролями от ключей (по одному на строку)
При таком значении ssl_protocols отключены некоторые небезопасные протоколы (начиная с nginx 1.9.1 это значение по умолчанию), однако могут возникнуть проблемы с доступом для пользователей Internet Explorer под Windows XP.
Параметр ssl_ciphers здесь разбит на 2 строки для удобочитаемости. Описывает разрешённые шифры. Шифры задаются в формате, поддерживаемом библиотекой OpenSSL. В данном случае значение параметра я просто скопировал с сайта http://айри.рф/. За подробностями можете перейти по ссылке.
Если мы хотим распространить параметры настройки для всех сайтов, то данный код необходимо поместить в секцию http файла конфигурации.
Создаём виртуальный HTTPS-сервер и включаем SSL. Полученные на первом этапе файлы www.example.com.pem и www.example.com.key размещаем в папке ssl в папке настроек nginx (или любом другом месте по вкусу).
server { listen 443 ssl http2; ssl_certificate ssl/www.example.com.pem; # Сертификат данного виртуального сервера и промежуточный сертификат StartSSL ssl_certificate_key ssl/www.example.com.key; # Секретный ключ # Другие настройки вашего сайта }
Указывать ssl on не обязательно, и.к. это развнозначно использованию ssl в параметре listen.
Начиная с версии nginx 1.9 имеется поддержка протокола HTTP/2. В данной конфигурации мы активируем этот протокол. Для старых версий nginx можно использовать spdy.
При необходимости можно перенести некоторые настройки ssl из секции http в секцию server.
Для безопасности для папки ssl/ желательно установить права 700 и отдать её root. Все содержащиеся в них ключи, сертификаты и файл с паролями также отдать root и установить права доступа 600.
На этом настройку можно считать законченной. Можете убедиться, что ваш сайт https://www.example.com/ доступен и браузер принимает сертификат.
Комментариев нет:
Отправка комментария