Skip to content
← Все статьи

TLS 1.3 vs TLS 1.2: что изменилось и как правильно мигрировать

TLS 1.3 vs TLS 1.2: что изменилось и как правильно мигрировать

TLS 1.3 вышел в 2018 году (RFC 8446) и в 2026-м используется на 90%+ SSL/TLS проверку-трафика в интернете. Он существенно быстрее, безопаснее и проще TLS 1.2. Если ваш сайт всё ещё работает только на TLS 1.2 — это несколько сотен миллисекунд потерь на каждого пользователя и отставание от best practices. Разберём отличия, покажем миграцию и рассмотрим подводные камни обратной совместимости.

Ключевые отличия TLS 1.3 от TLS 1.2

1. Handshake в одном RTT вместо двух

В TLS 1.2 handshake занимает 2 round-trip time: ClientHello → ServerHello+Certificate → ClientKeyExchange+Finished → Finished. TLS 1.3 объединяет шаги: ClientHello уже содержит key share, сервер отвечает ServerHello+Certificate+Finished за один RTT. При повторных соединениях — 0-RTT, данные уходят вместе с первым пакетом.

2. Удалены устаревшие и слабые cipher suites

В TLS 1.3 остались только 5 AEAD-шифров: TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_CCM_SHA256, TLS_AES_128_CCM_8_SHA256. Убраны:

3. Forward Secrecy по умолчанию

В TLS 1.2 forward secrecy зависит от выбранного cipher — можно было случайно использовать RSA key exchange. В TLS 1.3 это невозможно: все ключи временные и уничтожаются после сессии. Компрометация приватного ключа сервера не даёт расшифровать прошлый трафик.

4. Шифрование метаданных handshake

В TLS 1.2 сертификат сервера передаётся в открытом виде — любой наблюдатель видит, куда вы подключаетесь. В TLS 1.3 после ServerHello шифруется вся дальнейшая часть handshake, включая certificate.

5. Упрощённая конфигурация

Нет больше «правильно ли я подобрал 20 cipher suites» — в 1.3 выбор по умолчанию безопасен.

Скорость: реальный прирост

На новом соединении TLS 1.3 экономит примерно один RTT — 50-150 мс в зависимости от задержки сети. На мобильном LTE разница ощутимая: 200 мс вместо 400 мс до первого байта страницы. При коротких HTTPS-запросах к API документацию (платежи, аналитика) это 20-30% latency.

0-RTT (early data) ещё быстрее, но имеет ограничения: повторное воспроизведение возможно, поэтому нельзя использовать для non-idempotent запросов. nginx поддерживает с версии 1.15.4:

ssl_early_data on;

Миграция nginx с TLS 1.2 на TLS 1.3

Если у вас nginx 1.13+ (с OpenSSL 1.1.1+) — включить TLS 1.3 просто:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;   # в 1.3 клиент выбирает cipher
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:\
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:\
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';

# TLS 1.3 cipher suites настраиваются отдельной директивой (OpenSSL 1.1.1+)
ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;   # TLS 1.3 использует свой механизм resumption

Проверка:

nginx -t && systemctl reload nginx
openssl s_client -connect example.com:443 -tls1_3 < /dev/null 2>&1 | grep "Protocol:"
# должно быть: Protocol: TLSv1.3

Проведите полный аудит через SSL Checker enterno.io — он покажет поддерживаемые версии и оценку конфигурации.

Apache и другие серверы

Apache 2.4.37+:

SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder off

HAProxy 2.0+:

ssl-default-bind-options ssl-min-ver TLSv1.2
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

В Node.js, Python, Go TLS 1.3 поддерживается по умолчанию в современных версиях — обычно ничего настраивать не нужно.

Обратная совместимость

TLS 1.3 не поддерживают:

Решение — держать одновременно TLS 1.2 и 1.3. TLS 1.2 останется с нами ещё минимум 5-10 лет как fallback. Отключать TLS 1.2 стоит только в API, где вы контролируете всех клиентов.

Что отключить обязательно

TLS 1.0 и 1.1 — устаревшие, PCI DSS с 2018 года требует их отключения. Чёрный список:

# НЕ использовать
ssl_protocols TLSv1 TLSv1.1;
ssl_ciphers DES-CBC-SHA;       # DES
ssl_ciphers RC4-SHA;           # RC4
ssl_ciphers NULL-SHA;          # Без шифрования
ssl_ciphers EXPORT-RSA-RC4;    # Export-grade

Подробнее — «Слабые cipher suites».

0-RTT: польза и риски

0-RTT позволяет клиенту прислать данные в первом же пакете, не дожидаясь handshake. Прирост — ещё один RTT. Но 0-RTT не имеет forward secrecy для early data, и атакующий может воспроизвести пакет (replay). Поэтому:

Часто задаваемые вопросы

Можно ли полностью отключить TLS 1.2?

Для публичного сайта — нет, потеряете до 5% пользователей со старыми устройствами. Для внутренних API — можно, если контролируете клиенты.

TLS 1.3 и HTTP/3?

HTTP/3 (QUIC) встроен с TLS 1.3 на уровне протокола. Это ещё один RTT выигрыш и улучшенное поведение на плохих сетях.

Где проверить, какие версии использует мой сервер?

SSL Checker enterno.io, SSL Labs, или nmap --script ssl-enum-ciphers -p 443 example.com.

TLS 1.3 работает с моим старым wildcard-сертификатом?

Да. TLS 1.3 — это протокол, а сертификат — отдельная вещь. Любой X.509-сертификат (включая wildcard и SAN) работает одинаково. См. wildcard vs SAN.

Заключение

Миграция на TLS 1.3 — одна из самых дешёвых оптимизаций: пять строк в nginx.conf дают прирост скорости и безопасности. Отключать TLS 1.2 пока рано, но 1.0 и 1.1 уберите сегодня же. SSL Checker enterno.io покажет, какие версии сейчас поддерживает ваш сервер, и оценит конфигурацию. Monitors зафиксирует, если после деплоя TLS 1.3 случайно выключился.

TLS 1.3 — RFC 8446. TLS 1.2 — RFC 5246. Mozilla TLS Config — ssl-config.mozilla.org.

Проверьте ваш сайт прямо сейчас

Проверить →
Другие статьи: SSL
SSL
Как проверить SSL-сертификат и не пропустить истечение
12.04.2026 · 29 просм.
SSL
Wildcard vs SAN-сертификат: когда какой выбрать в 2026
15.04.2026 · 7 просм.
SSL
SSL Handshake Failed: причины ошибки и пошаговая диагностика
15.04.2026 · 12 просм.
SSL
HSTS и HSTS Preload: полное руководство по принудительному HTTPS
15.04.2026 · 7 просм.