TLS 1.3 — это текущая версия протокола Transport Layer Security, опубликованная как RFC 8446 в августе 2018 года. Это фундаментальная переработка, а не постепенное обновление, которая делает HTTPS быстрее, проще и безопаснее, чем любая предыдущая версия.
По состоянию на 2026 год 62% сайтов поддерживают TLS 1.3, и все основные браузеры поддерживают его с 2018 года.
Что изменилось по сравнению с TLS 1.2
| TLS 1.2 | TLS 1.3 | |
|---|---|---|
| Рукопожатие | 2 обмена данными | 1 обмен (1-RTT) |
| Возобновленные соединения | 1 обмен | 0-RTT (данные с первым сообщением) |
| Наборы шифров | 37 (многие слабые) | 5 (все безопасные) |
| Прямая секретность | Опциональна | Обязательна |
| Обмен ключами RSA | Поддерживается | Удален |
| Статический DH | Поддерживается | Удален |
| Шифры CBC | Поддерживаются | Удалены |
| RC4, DES, 3DES | В некоторых конфигурациях | Удалены |
| MD5, SHA-1 в рукопожатии | Допускались | Удалены |
| Сертификат в рукопожатии | Открытым текстом (видимый) | Зашифрован |
| Сжатие | Опционально | Удалено (предотвращение CRIME) |
| Повторное согласование | Поддерживается | Удалено |
Философия проектирования: удалить все, что можно неправильно настроить. TLS 1.2 имеет 37 наборов шифров — некоторые безопасные, некоторые взломанные. TLS 1.3 имеет 5, и все безопасные.
5 наборов шифров TLS 1.3
TLS_AES_256_GCM_SHA384 ← Самый стойкий, наиболее распространенный
TLS_AES_128_GCM_SHA256 ← Широко используется, немного быстрее
TLS_CHACHA20_POLY1305_SHA256 ← Лучший для ARM/мобильных (без AES-NI)
TLS_AES_128_CCM_SHA256 ← IoT/встраиваемые системы
TLS_AES_128_CCM_8_SHA256 ← IoT/встраиваемые системы (короткий тег)
Неправильно настроить их невозможно — все они являются шифрами AEAD с сильными ключами. Нет риска «случайно включить слабый шифр», как в TLS 1.2.
Рукопожатие 1-RTT: почему это быстрее
Рукопожатие TLS 1.2 (2 обмена):
Client → Server: ClientHello (supported ciphers)
Server → Client: ServerHello, Certificate, KeyExchange
Client → Server: KeyExchange, ChangeCipherSpec, Finished
Server → Client: ChangeCipherSpec, Finished
[4 сообщения до начала передачи зашифрованных данных]
Рукопожатие TLS 1.3 (1 обмен):
Client → Server: ClientHello + KeyShare
Server → Client: ServerHello + KeyShare + Certificate + Finished
Client → Server: Finished
[зашифрованные данные могут передаваться после 1 обмена]
Клиент отправляет параметры обмена ключами в первом сообщении — не нужно ждать, пока сервер укажет алгоритмы. Это сокращает рукопожатие с 2 обменов до 1.
Возобновление 0-RTT
Для возвращающихся посетителей (которые уже подключались ранее) TLS 1.3 поддерживает 0-RTT — зашифрованные данные приложения отправляются с самым первым сообщением:
Client → Server: ClientHello + KeyShare + EarlyData (encrypted request)
Server → Client: ServerHello + response
Запрос отправляется до завершения рукопожатия. Компромисс: данные 0-RTT уязвимы для атак повторного воспроизведения, поэтому их следует использовать только для идемпотентных запросов (GET, а не POST).
Обязательная прямая секретность
В TLS 1.2 можно было использовать обмен ключами RSA — долгосрочный ключ RSA сервера напрямую расшифровывал предварительный секрет. Если кто-то записывал трафик и впоследствии похищал закрытый ключ сервера, он мог расшифровать все прошлые переговоры.
TLS 1.3 полностью удаляет обмен ключами RSA. Весь обмен ключами использует эфемерный Diffie-Hellman (ECDHE) — уникальная пара ключей генерируется для каждого соединения. Похищение закрытого ключа сервера не помогает расшифровать прошлые сессии. Подробнее о прямой секретности →
Зашифрованный сертификат
В TLS 1.2 сертификат сервера (включая доменное имя) передавался открытым текстом во время рукопожатия. Пассивный наблюдатель мог видеть, к какому сайту вы подключаетесь.
В TLS 1.3 сертификат отправляется после получения ключей рукопожатия — он зашифрован. SNI (Server Name Indication) все еще виден в TLS 1.3, но Encrypted Client Hello (ECH) в будущем зашифрует и его.
Как включить TLS 1.3
Проверьте, включен ли он уже
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -tls1_3 2>/dev/null | grep "Protocol"
# Ожидается: TLSv1.3
Nginx (1.13+ с OpenSSL 1.1.1+)
ssl_protocols TLSv1.2 TLSv1.3;
TLS 1.3 включен по умолчанию в современном Nginx — вам просто не нужно его отключать.
Apache (2.4.37+ с OpenSSL 1.1.1+)
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Это включает TLS 1.2 и 1.3.
Проверьте версию OpenSSL
openssl version
# Необходимо: OpenSSL 1.1.1+ для поддержки TLS 1.3
Если ваша версия OpenSSL старше, обновите ее или обновите операционную систему.
Стоит ли принудительно использовать только TLS 1.3?
Пока нет. Около 38% сайтов не поддерживают TLS 1.3, и некоторые клиенты (корпоративные прокси, Java 8, старые встраиваемые системы) поддерживают только TLS 1.2. Отказ от TLS 1.2 сегодня заблокирует некоторых пользователей.
Рекомендуемая конфигурация: Поддерживайте TLS 1.2 и 1.3 одновременно. Это обеспечивает скорость TLS 1.3 для современных клиентов при сохранении совместимости. Именно так делают Google, Cloudflare и большинство крупных сайтов.
Часто задаваемые вопросы
Нужен ли мне новый сертификат для TLS 1.3?
Нет. Один и тот же сертификат работает с TLS 1.2 и 1.3. Сертификаты не зависят от протокола — они содержат открытый ключ и подпись CA, независимо от того, какая версия TLS их использует.
Влияет ли TLS 1.3 на производительность?
Да, положительно. Рукопожатие 1-RTT экономит 50-100 мс при первом подключении. Возобновление 0-RTT полностью устраняет задержку рукопожатия для возвращающихся посетителей. В сочетании с HTTP/2 (для которого требуется HTTPS) сайты на TLS 1.3 заметно быстрее.
TLS 1.2 все еще безопасен?
Да, с наборами шифров AEAD (AES-GCM, ChaCha20-Poly1305) и обменом ключами ECDHE. Избегайте шифров CBC в TLS 1.2 — они были уязвимы для атак (BEAST, Lucky13). TLS 1.3 лучше, но TLS 1.2 с современными шифрами остается безопасным.
А что насчет TLS 1.4?
TLS 1.4 не планируется. IETF считает TLS 1.3 целевым стандартом на обозримое будущее. Следующее крупное изменение — внедрение постквантового обмена ключами (ML-KEM) в гибридном режиме с существующим ECDHE — это произойдет в рамках TLS 1.3, а не как новая версия.