TLS в Nginx


При установке 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:

tls nginx


Читайте материал про установку SSL сертификата на Nginx.

Установка сертификата является практической задачей при решении которой используются рассмотренные параметры.

Сказать спасибо