Как включить TLS 1.3 в Nginx
Кратко
TLS 1.3 улучшает приватность и скорость соединений по сравнению с TLS 1.2. Чтобы включить его в Nginx, достаточно собрать Nginx против OpenSSL 1.1.1+ и добавить TLSv1.3 в директиву ssl_protocols — но есть нюансы с версиями пакетов и совместимостью клиентов. В статье — минимальная конфигурация, проверка, чеклисты и советы по отладке.

Введение
Transport Layer Security (TLS) 1.3 — актуальная версия протокола TLS, стандартизированная в IETF (RFC 8446, август 2018 г.). TLS 1.3 сокращает количество раундов рукопожатия, удаляет уязвимые алгоритмы и улучшает конфиденциальность соединения.
Коротко о терминах:
- TLS 1.3 — современный протокол защищённого канала.
- OpenSSL 1.1.1+ — библиотека, которая реализует TLS 1.3 на множестве ОС.
- Nginx 1.13.0+ — версия Nginx с добавленной поддержкой TLS 1.3 при сборке против OpenSSL 1.1.1+.
Важно: многие дистрибутивы поставляют старые пакеты; чаще всего требуется сборка Nginx вручную против OpenSSL 1.1.1 или выше.
Требования
- Nginx версии 1.13.0 или выше, собранный против OpenSSL 1.1.1 или выше.
- Действующий TLS-сертификат (в том числе самоподписанный) — можно получить бесплатно через Let’s Encrypt.
Примечание: нативная поддержка TLS 1.3 присутствовала в некоторых дистрибутивах (например, Ubuntu 18.10, Fedora 29 и Debian 10 в момент ранних релизов), но реальная доступность зависит от репозиториев и сборки пакетов.
Быстрая настройка
Чтобы включить TLS 1.3 в конфигурации Nginx, добавьте параметр TLSv1.3 в директиве ssl_protocols и перезагрузите сервис:
ssl_protocols TLSv1.2 TLSv1.3;Перезагрузка Nginx:
sudo systemctl reload nginx.serviceЭто минимальное изменение; если Nginx собран правильно и OpenSSL поддерживает TLS 1.3, протокол начнёт использоваться.
Минимальная виртуальная конфигурация
Ниже — пример минимального server-блока для HTTPS с поддержкой TLS 1.3:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
root /var/www/example.com/public;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
}Совет: оставляйте TLSv1.2 в списке для обратной совместимости, если у вас ещё есть старые клиенты.
Проверка работоспособности
Проверить поддержку TLS 1.3 можно несколькими способами:
- Инструменты разработчика браузера (раздел Security/Connection).
- Онлайн-сервис SSLLabs Server Test.
- Командная строка: openssl s_client с подходящими опциями (если ваша OpenSSL поддерживает TLS 1.3).


Отладка и частые проблемы
- Nginx сообщает, что TLSv1.3 неизвестен: скорее всего, Nginx был собран против старой версии OpenSSL. Проверьте сборку и переменные конфигурации сборки (./configure –with-openssl=…).
- Клиент не использует TLS 1.3: убедитесь, что сам клиент (браузер, библиотека) поддерживает TLS 1.3 и что между ними не вмешиваются прокси/веб-ускорители.
- Устаревшие шифры: TLS 1.3 использует собственный набор шифров — не указывайте старые TLS1.2-only наборы при конфигурации ssl_ciphers.
Важно: не отключайте HTTP/2 без необходимости — он совместим с TLS 1.3 и даёт преимущество по производительности.
Когда включение TLS 1.3 не сработает (контрпримеры)
- Nginx собран против OpenSSL < 1.1.1.
- На пути до клиента стоит SSL-терминирующий балансировщик без поддержки TLS 1.3.
- Клиенты устаревшие и не поддерживают TLS 1.3.
Альтернативные подходы
- Использовать поставляемые системой пакеты (если они обновлены) вместо ручной сборки.
- Заменить OpenSSL на BoringSSL или LibreSSL при необходимости (учтите совместимость и поддержку дистрибутива).
- Делегировать TLS-терминацию облачному провайдеру/балансировщику, который поддерживает TLS 1.3.
Матрица совместимости (ориентир)
| Компонент | Требование для TLS 1.3 |
|---|---|
| OpenSSL | 1.1.1 или выше |
| Nginx | 1.13.0 или выше (при сборке против OpenSSL 1.1.1+) |
| Дистрибутивы | Часто требуется сборка вручную; некоторые ранние релизы имели нативную поддержку |
| Клиенты | Современные браузеры и актуальные TLS-библиотеки |
Чеклист для ролей
Администратор/DevOps:
- Проверить версию OpenSSL на сервере (openssl version).
- Проверить, с какой OpenSSL собран Nginx (nginx -V).
- При необходимости пересобрать Nginx против OpenSSL 1.1.1+.
- Добавить TLSv1.3 в ssl_protocols и перезагрузить Nginx.
- Проверить доступность через браузер и SSLLabs.
Разработчик приложения:
- Убедиться, что клиентские библиотеки и зависимости поддерживают TLS 1.3.
- Тестировать соединения в окружении QA.
Критерии приёмки
- Nginx отвечает с использованием TLS 1.3 для современных клиентов.
- SSLLabs показывает поддержку TLS 1.3 и корректный набор шифров.
- Нету регрессий в производительности и совместимости для ключевых клиентов.
Тест-кейсы
- Подключение с современным браузером — ожидается TLS 1.3.
- Подключение с устаревшей библиотекой — ожидается TLS 1.2 (при сохранённой совместимости).
- Проверка через SSLLabs — пройти хотя бы на уровень A (рекомендуется).
Небольшая методология внедрения
- Подготовка тестовой среды и проверка версии OpenSSL.
- Сборка/обновление Nginx в тестовом окружении.
- Включение TLSv1.3 и тестирование с ключевыми клиентами.
- Постепенный релиз в прод, мониторинг ошибок и метрик.
flowchart TD
A[Проверить OpenSSL] --> B{OpenSSL >= 1.1.1?}
B -- Да --> C[Включить TLSv1.3 в Nginx]
B -- Нет --> D[Обновить или пересобрать OpenSSL]
D --> C
C --> E[Тестирование и мониторинг]Фактбокс
- RFC: RFC 8446 (август 2018).
- Основное требование для сервера: OpenSSL 1.1.1+ и Nginx 1.13.0+ при соответствующей сборке.
Итог
Включение TLS 1.3 в Nginx обычно сводится к сборке Nginx против OpenSSL 1.1.1+ и добавлению TLSv1.3 в ssl_protocols. Проверьте совместимость клиентов и балансировщиков, выполните тесты и используйте чеклисты из этой статьи для безопасного и предсказуемого релиза.
Важно: всегда проверяйте конфигурацию и влияние на клиентов в тестовой среде перед включением в продакшен.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента