Как настроить SSL-сертификат на Nginx
В статье мы рассмотрим, как установить SSL-сертификат на веб-сервер Nginx.
Как установить SSL-сертификат на Nginx
Рассмотрим, как выполняется установка и настройка Nginx SSL:
Объедините три сертификата (сам SSL-сертификат, корневой и промежуточный сертификаты) в один файл. Для этого создайте на ПК новый текстовый документ с именем your_domain.crt (your_domain — доменное имя сайта, который вы хотите защитить). Создать его можно при помощи блокнота или другого текстового редактора. Поочередно скопируйте и вставьте в созданный документ каждый сертификат. После вставки всех сертификатов файл должен иметь вид:
-----BEGIN CERTIFICATE-----
#Ваш сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Промежуточный сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Корневой сертификат#
-----END CERTIFICATE-----
Обратите внимание: один сертификат идёт следом за другим, без пустых строк.
Создайте файл your_domain.key и скопируйте в него содержание приватного ключа сертификата.
Загрузите созданные файлы your_domain.crt и your_domain.key на сервер в директорию /etc/ssl/. Директория может быть иной, например /etc/nginx/ssl/your_domain.com.
Откройте конфигурационный файл Nginx и отредактируйте виртуальный хост вашего сайта, который вы хотите защитить сертификатом. Выполните минимальную для работы настройку, добавив в файл следующие строки:
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /etc/ssl/your_domain.crt;
ssl_certificate_key /etc/ssl/your_domain.key;
}
Где:
your_domain.com — домен сайта,
/etc/ssl/your_domain.crt — путь до созданного файла с тремя сертификатами,
/etc/ssl/your_domain.key — путь до файла с приватным ключом.
Минимальная установка и настройка выполнена. Далее вы можете добавить расширенные настройки конфигурационного файла либо сразу перейти к шагу 12.
Если вы хотите, чтобы сайт работал не только по защищённому соединению (https://), но и по незащищенному (http://), то нужно создать единый HTTP/HTTPS сервер. Для этого в конфигурационном файле Nginx необходимо иметь две секции server{} для каждого типа соединения.
Добавьте в секцию server{}, которую вы создали на шаге 4, следующую строку:
listen 80;
Также вы можете дополнительно оптимизировать работу Nginx HTTPS-сервера. SSL-операции задействуют дополнительные ресурсы сервера. Чтобы снизить количество операций, можно повторно использовать параметры SSL-сессий. Они хранятся в кеше SSL-сессий. Можно задать тип кеша (в примере это shared-кеш, разделяемый между всеми рабочими процессами) и его размер в байтах (в 1 Мб кеша помещается около 4000 сессий) с помощью директивы ssl_session_cache. Также можно увеличить таймаут кеша (время, в течение которого клиент повторно использует параметры сессии) директивой ssl_session_timeout: по умолчанию он равен 5 минутам. Можно настроить время работы одного keepalive-соединения с помощью директивы keepalive_timeout.
Добавьте в конфигурационном файле в секции server{} строки:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 70;
Вы можете указать протоколы SSL, которые поддерживает сервер:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Чтобы при использовании протоколов SSLv3 и TLS серверные шифры были более приоритетны, чем клиентские, добавьте следующую строку:
ssl_prefer_server_ciphers on;
Чтобы уменьшить время загрузки страниц у пользователей сайта, нужно разрешить серверу прикреплять OCSP-ответы для валидации сертификата. При этом необходимо указать путь к файлу корневого сертификата и DNS-сервер. Создайте файл ca.crt и скопируйте в него содержимое корневого сертификата. Загрузите этот файл на сервер в директорию, где хранятся ранее созданные файлы. В нашем примере это /etc/ssl/.
Затем добавьте в конфигурационном файле в секции server{} строки:
ssl_stapling on;
ssl_trusted_certificate /etc/ssl/ca.crt;
resolver 8.8.8.8;
Где:
/etc/ssl/ca.crt — путь до файла с корневым сертификатом,
8.8.8.8 — DNS-сервер.
Сохраните и закройте конфигурационный файл Nginx.
Если вы не остановились на шаге 4, то секция server{} в конфигурационном файле с расширенными настройками будет выглядеть так:
server {
listen 443 ssl;
listen 80;
server_name your_domain.com;
ssl_certificate /etc/ssl/your_domain.crt;
ssl_certificate_key /etc/ssl/your_domain.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 70;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_trusted_certificate /etc/ssl/ca.crt;
resolver 8.8.8.8;
}
Чтобы изменения вступили в силу, перезагрузите сервер Nginx:
sudo /etc/init.d/nginx restart
Готово, вы установили SSL-сертификат на Nginx.