Конфигурация ssl в Nginx

Конфигурация ssl в Nginx

    Общие сведения

    В случае покупки сертификата, нам отправляют все ключи в отдельных файлах. Цепочка сертификатов, как правило, идет в файле chain. Мы должны скопировать последовательность в данном файле и добавить ее к содержимому в файле с сертификатом домена — получиться файл, содержащий как последовательность для домена, так и всех центров. Назвать его можно fullchain.pem.
    В случае получение бесплатного сертификата от Let's Encrypt, мы получаем 4 файла, один из которых называется fullchain.pem — именно он и содержит все необходимые последовательности.


    В контексте server для 443 порта указывается путь к сертификату, путь к приватному ключу сертификата, класс сертификата

    server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_verify_client on; ssl_trusted_certificate /etc/ssl/cachain.pem; #... }

    ssl_trusted_certificate - это путь к директории с доверенными сертификатами, которые используются для проверки клиентских сертификатов и ответов OCSP


    Операции https сервера требуют ресурсов процессора, особенно во время рукопожатий.
    Можно минимизировать потери двумя способами:
    1. Включение keepalive connections для отправки нескольких запросов через одно соединение.
    2. Повторное использование параметров сеанса ssl

    Сеансы хранятся в кэше сеансов SSL, совместно используемом рабочими процессами и настроенном директивой ssl_session_cache.
    Тайм-аут кэша по умолчанию составляет 5 минут.
    Это время ожидания может быть увеличено с помощью директивы ssl_session_timeout.

    http { ssl_session_cache shared:SSL:10m; #Задаёт тип и размеры кэшей для хранения параметров сессий ssl_session_timeout 10m; server { listen 443 ssl; server_name www.example.com; keepalive_timeout 70; #... } }

    keepalive_timeout назначает таймаут для keep-alive соединения, соединения будут закрыты по истечению этого времени.

    Цепочки сертификатов

    Некоторые браузеры могут жаловаться на сертификат, другие браузеры воспринимать сертификаты нормально. Скорее всего сервер использовал центр сертификации для подписи своего сертификат, который неизвестен конкретному браузеру.
    В этом случае центр управления предоставляет набор связанных сертификатов, которые должны быть объединены с подписанным сертификатом сервера. Сертификат сервера должен отображаться перед связанными сертификатами в объединенном файле(chained.crt):

    $ cat www.example.com.crt bundle.crt > www.example.com.chained.crt

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


    Чтобы убедиться, что сервер отправляет полную цепочку сертификатов, можно использовать утилиту командной строки openssl:

    openssl s_client -connect www.godaddy.com:443
    Примечание

    Версия 1.9.1 и более поздние версии: протоколами SSL по умолчанию являются TLSv1, TLSv1.1 и TLSv1.2 (если поддерживается библиотекой OpenSSL).
    Начиная с версий 0.7.65 и 0.8.19 и более поздних версий, протоколами SSL по умолчанию являются SSLv3, TLSv1, TLSv1.1 и TLSv1.2 (если поддерживается библиотекой OpenSSL).
    В версиях 0.7.64 и 0.8.18 и более ранних протоколами SSL по умолчанию являются SSLv2, SSLv3 и TLSv1.
    В версии 1.0.5 и более поздних версиях шифры SSL по умолчанию имеют значение HIGH:!aNULL:!MD5.
    В версиях 0.7.65 и 0.8.20 и более поздних версиях шифры SSL по умолчанию имеют ВЫСОКИЙ уровень:!ADH:!MD5.
    Начиная с версии 0.8.19, по умолчанию используются ВСЕ SSL-шифры:!ADH:RC4+RSA:+HIGH:+MEDIUM.
    Начиная с версий 0.7.64, 0.8.18 и более ранних, ВСЕ шифры SSL по умолчанию:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP.


    SSL Termination

    SSL Termination - Прекращает трафик, зашифрованный SSL/TLS, от клиентов, освобождая ваши вышестоящие TCP-серверы от вычислительной нагрузки.
    NGINX Plus действует как конечная точка SSL на стороне сервера для соединений с клиентами: он выполняет расшифровку запросов и шифрование ответов, которые в противном случае пришлось бы выполнять внутренним серверам. Операция называется завершением, поскольку NGINX Plus закрывает клиентское соединение и пересылает клиентские данные по вновь созданному незашифрованному соединению на серверы вышестоящей группы.


    Чтобы включить SSL, укажите параметр ssl директивы listen для TCP-сервера, который передает соединения вышестоящей группе серверов:

    server { listen 12345 ssl; proxy_pass backend; #... }
    ssl_protocols и ssl_ciphers

    Директивы ssl_protocols и ssl_ciphers можно использовать для ограничения подключений и включения только надежных версий и шифров SSL/TLS

    server { #... ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; }
    Таймаут SSL

    Тайм-аут по умолчанию для рукопожатия SSL составляет 60 секунд, и его можно переопределить с помощью директивы ssl_handshake_timeout. Не рекомендуется устанавливать это значение слишком низким или слишком высоким

    server { #... ssl_handshake_timeout 10s; }
    SSL Session Cache

    Создание кэша параметров сеанса, которые применяются к каждому соединению SSL/TLS, уменьшает количество рукопожатий и, таким образом, может значительно повысить производительность:

    ssl_session_cache;

    Установите для директивы ssl_session_cache значение shared, чтобы совместно использовать кэш для всех рабочих процессов, что ускоряет последующие подключения, поскольку информация о настройке подключения уже известна:

    ssl_session_cache shared:SSL:1m;

    Общий кэш объемом 1 МБ может содержать около 4000 сеансов
    По умолчанию NGINX Plus сохраняет кэшированные параметры сеанса в течение пяти минут. Увеличение значения ssl_session_timeout до нескольких часов может повысить производительность, поскольку повторное использование кэшированных параметров сеанса уменьшает количество длительных рукопожатий:
    Когда вы увеличиваете время ожидания, кэш должен быть больше, чтобы вместить большее количество кэшированных параметров, что приводит к результату. Для 4-часового тайм-аута в следующем примере подходит кэш объемом 20 МБ:

    server { #... ssl_session_cache shared:SSL:20m; ssl_session_timeout 4h; }
    Комплексный пример настройки
    stream { upstream stream_backend { server backend1.example.com:12345; server backend2.example.com:12345; server backend3.example.com:12345; } server { listen 12345 ssl; proxy_pass stream_backend; ssl_certificate /etc/ssl/certs/server.crt; ssl_certificate_key /etc/ssl/certs/server.key; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_session_cache shared:SSL:20m; ssl_session_timeout 4h; ssl_handshake_timeout 30s; #... } }

    В этом примере директивы в серверном блоке предписывают NGINX Plus завершать и расшифровывать защищенный TCP-трафик от клиентов и передавать его в незашифрованном виде вышестоящей группе stream_backend, которая состоит из трех серверов.
    Параметр ssl директивы listen указывает NGINX Plus принимать SSL-соединения.
    Когда clent запрашивает безопасное TCP-соединение, NGINX Plus запускает процесс рукопожатия, который использует сертификат формата PEM, указанный директивой ssl_certificate, закрытый ключ сертификата, указанный директивой ssl_certificate_key, а также протоколы и шифры, перечисленные директивами ssl_protocols и ssl_ciphers.
    Как только устанавливается безопасное TCP-соединение, NGINX Plus кэширует параметры сеанса в соответствии с директивой ssl_session_cache.
    In the example, the session cache is shared between all worker processes (the shared parameter), is 20 MB in size (the 20m parameter), and retains each SSL session for reuse for 4 hours (the ssl_session_timeout directive).



    Источники
    Последнее изменение: 07.10.2024 12:16


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ