Раздел помощи SpaceWeb

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

13 дек, 2023

В этой статье мы расскажем о том, как установить SSL-сертификат на Nginx. Но сначала дадим понятие SSL-сертификата и объясним, как он устроен.

Что такое SSL-сертификат

SSL-сертификат — это цифровой документ, который хранит в себе информацию о домене и его владельце. Если вы переходите на ресурс и видите значок замка и https:// в адресной строке браузера, значит, на сайте используется SSL-сертификат.

Главное назначение сертификата безопасности — защитить данные от перехвата третьими лицами. Это возможно благодаря криптографическому протоколу TLS — «современнику» SSL-протокола (protocol SSL), в честь которого SSL-сертификат получил название. Он шифрует данные перед их передачей.

Помимо этого SSL-сертификаты используются, чтобы:

  • сохранить целостность данных при передаче — при использовании SSL-сертификата они не потеряются и не изменятся,
  • подтвердить подлинность ресурса — так как центр сертификации проводит проверку домена и его администратора на существование, SSL-сертификат выдается только проверенным сайтам.

После установки SSL-сертификата сайт начинает работу по протоколу HTTPS, который поддерживает шифрование информации и работает поверх криптографического TLS. В чем отличие TLS от HTTPS? TLS кодирует передаваемые данные, а HTTPS — канал, по которому они передаются.

SSL-сертификат необходим для сайта, на котором пользователи оставляют личные данные (например, номер телефона или email) или указывают данные банковских карт для оплаты.

Как установить SSL-сертификат на сервер Nginx

Перед установкой нужно получить все части SSL-сертификата:

  • сертификат,
  • приватный ключ,
  • промежуточный сертификат,
  • корневой сертификат.

Далее нужно выполнить несколько подготовительных действий на компьютере:

  1. Создайте файл с названием domain_name.crt (вместо domain_name укажите домен, для которого заказан сертификат). Добавьте в него сертификат, промежуточный и корневой сертификаты. Итоговая версия файла должна иметь следующий вид:
-----BEGIN CERTIFICATE-----
сертификат
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
промежуточный_сертификат
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
корневой_сертификат
-----END CERTIFICATE-----
  1. Создайте второй файл с названием domain_name.key (вместо domain_name укажите домен, для которого заказан сертификат). Добавьте в него содержимое приватного ключа.
  2. Создайте файл с названием ca.crt и добавьте в него содержимое корневого сертификата.

Готово.

Следующие шаги — это установка и настройка SSL-сертификата на Nginx. 

Чтобы установить сертификат:

  1. Подключитесь к серверу по SSH.
  2. Загрузите созданные файлы на сервер. Это нужно сделать в следующую директорию:
/etc/ssl/

Также возможен вариант:

/etc/nginx/ssl/domain.ru

Вместо domain.ru укажите директорию вашего домена.

  1. Откройте конфигурационный файл Nginx. Для этого выполните одну из команд в зависимости от расположения файла на сервере:
sudo nano /usr/local/nginx/conf
sudo nano /etc/nginx
sudo nano /usr/local/etc/nginx
  1. В файле конфигурации Nginx добавьте блок для работы сайта по HTTPS:
server {
 listen 443 ssl;
    server_name domain.ru;
    ssl_certificate /etc/ssl/domain_name.crt;
    ssl_certificate_key /etc/ssl/domain_name.key;

Где:

  • domain.ru — доменное имя сайта,
  • domain_name.crt — путь к файлу с публичным ключом,
  • domain_name.key — путь к файлу с приватным ключом.
  1. Если вам нужно, чтобы был доступен протокол HTTP, добавьте дополнительную директиву listen:
listen 80;
  1. Далее необходимо оптимизировать работу HTTPS-сервера Nginx: для этого в секции server добавьте строки: 
ssl_session_cache   shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 70;

Где:

  • shared:SSL:10m — тип кэша и его размер,
  • ssl_session_timeout 10m — таймаут кэша,
  • keepalive_timeout 70 — время одного соединения.
  1. Укажите протоколы TLS (SSL), версии которых должен поддерживать сервер:
ssl_protocols TLSv1 TLSv1.2 TLSv1.3;
  1. Для выбора серверных шифров в качестве приоритетных добавьте строку:
ssl_prefer_server_ciphers on;
  1. Чтобы страницы сайта загружались быстрее, нужно:
  • позволить серверу прикреплять OCSP-ответы для проверки статуса SSL-сертификата,
  • указать путь к корневому сертификату,
  • добавить адрес корневого DNS-сервера.

Для настройки этих параметров добавьте строки:

ssl_stapling on;
ssl_trusted_certificate /etc/ssl/domain.ru/ca.crt;
resolver 1.1.1.1;

Где:

  • /etc/ssl/domain.ru/ca.crt — путь к файлу корневого сертификата, 
  • 1.1.1.1 — адрес корневого DNS-сервера.
  1. Проверьте содержимое конфигурационного файла. Оно будет иметь следующий вид:
server {
listen 443 ssl;
listen 80;
server_name domain.ru;
ssl_certificate /etc/ssl/domain.ru/domain_name.crt;
ssl_certificate_key /etc/ssl/domain.ru/domain_name.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/domain.ru/ca.crt;
resolver 1.1.1.1;
}

После проверки сохраните изменения с помощью комбинации клавиш Ctrl + O. Затем закройте файл, используя Ctrl + X.

  1. Чтобы изменения вступили в силу, нужно перезагрузить веб-сервер Nginx. Для этого выполните команду:
sudo /etc/init.d/nginx restart

Готово, вы установили SSL-сертификат на Nginx.

Как проверить работу SSL-сертификата

Важно, чтобы все настройки SSL были корректны — только так обмен данными будет безопасным. Проверить работу сертификата можно с помощью онлайн-сервисов. В качестве примера рассмотрим домен sweb.ru и сервис проверки SSLShopper.

Чтобы убедиться в том, что SSL-сертификат работает корректно:

  1. Перейдите на сайт sslshopper.com.
  2. Введите доменное имя и кликните Check SSL:

  1. Убедитесь в том, что все пункты списка отмечены зеленой галочкой:

  1. Также проверьте валидность всех компонентов SSL-сертификата:

Если на одном из этапов проверки возникает ошибка, проверьте:

  • активен ли сам сертификат — возможно, он требует продления,
  • корректно ли прошла установка.

Если вы не наблюдаете видимых проблем или возникли сложности при настройке сертификата, обратитесь в службу поддержки.