При установке SSL сертификата на сервер в конфигурационном файле прописываются параметры, отвечающие за шифрование. На самом деле для него применяется не SSL, а более современный протокол TLS. Протокол TLS Nginx в полной мере поддерживается, современные сертификаты работают по протоколу TLS1.2+, TLS1.3+
TLS — протокол безопасности, пришедший на смену SSL, хотя SSL употребляется намного чаще фактически почти всегда речь при этом идет про TLS
TLS в Nginx и настройка безопасной работы с сервером
Любое шифрование применяется для того чтобы не допустить доступа к информации кого-либо, кто доступа к ней иметь не должен. TLS обеспечивается такое шифрование.
Просмотрев часть конфигурационного файла конфигурационного хоста, относящуюся к SSL/TLS можно увидеть, что подключаются файлы сертификаты безопасности, директивой ssl_protocols указываются поддерживаемые версии TLS, а также задаются шифры и некоторые дополнительные опции.
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl on;
ssl_dhparam /etc/ssl/certs/dhparam.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;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
Шифры указываются в одну строку после обозначения директивы ssl_ciphers и перечисляются в формате, в котором распознаются библиотекой OpenSSL.
*в приведенной выше конфигурации для лучшей читаемости добавлены переносы, если их сохранить в конфигурационном файле Nginx при перезапуске будет выдавать ошибки.
SSL-операции потребляют дополнительные ресурсы процессора, часто довольно значительные
Но существуют способы оптимизации.
Прежде всего это использование нескольких воркеров.
Кроме этого есть возможность оптимизации для каждого клиента, в Nginx доступны 2 способа:
1) keepalive соединения, позволяющих в рамках одного соединения обрабатывать сразу несколько запросов, прописывается в секции server конфигурационного файла в виде:
server {
listen 443 ssl;
server_name example.com;
keepalive_timeout 70;
..
}
2) повторное использование параметров сессии SSL- это позволяет не повторять SSL handshake каждый раз.
Задается директивой ssl_session_cache как в примере (сюда же относится ssl_session_timeout, определяющий таймаут для сессий в кэше). В 1 мегабайт кэша помещается около 4000 сессий.
ssl_stapling on разрешает прикрепление OCSP-ответов сервером. OSCP — протокол, который может быть использован со стороны клиента для проверки серверных сертификатов.
Протокол позволяет проверить актуальность сертификата и срок его действия.
Для проверки посылается запрос на OSCP-сервер, хранящий данные, современная реализация (CRL) позволяет сохранять результаты вместе с сессиями (более того сервер при использовании CRL будет самостоятельно опрашивать OSCP источник и выяснить не истек ли сертификат).
Это исключает задержки на получение ответа от OSCP-сервера при каждом обращении.
Использование протокола Диффи-Хеллмана
Также для шифрования протокол при установке сертификата на Nginx часто применяют ключ, сгенерированный по алгоритму Диффи-Хеллмана.
Он генерируется в консоли и подключается в конфигурационном файле сайта вместе с сертификатом и приватным ключом для домена.
openssl dhparam -out /etc/ssl/example.com.pem 2048
Пример генерации dhparam:
Читайте материал про установку SSL сертификата на Nginx.
Установка сертификата является практической задачей при решении которой используются рассмотренные параметры.