TLS шифрует трафик между браузером и веб-сервером, предотвращая перехват и подмену данных. В браузерной строке значок замка означает, что соединение защищено TLS. Несмотря на это, многие по привычке называют его «SSL».
Версии и их отличия
| Версия | Год | Статус |
|---|---|---|
| SSL 2.0 | 1995 | Устарел (RFC 6176) |
| SSL 3.0 | 1996 | Устарел (RFC 7568, POODLE) |
| TLS 1.0 | 1999 | Устарел (PCI DSS 2018) |
| TLS 1.1 | 2006 | Устарел (RFC 8996, 2021) |
| TLS 1.2 | 2008 | Поддерживается |
| TLS 1.3 | 2018 | Актуален (RFC 8446) |
Как работает рукопожатие TLS 1.3
TLS 1.3 сократил рукопожатие с 2 RTT (TLS 1.2) до 1 RTT:
- Клиент отправляет
ClientHelloс поддерживаемыми шифрами и параметрами Diffie-Hellman. - Сервер отвечает
ServerHello, сертификатом и уже готов к приёму данных. - Клиент верифицирует сертификат и отправляет первые данные.
0-RTT (early data) в TLS 1.3 позволяет отправить данные с первым пакетом при повторном подключении, но имеет риск replay-атак.
История
Netscape разработал SSL в 1994–1995 годах для защиты e-commerce. IETF взял его под контроль и переименовал в TLS 1.0 (RFC 2246, 1999). TLS 1.3 (RFC 8446, август 2018) кардинально упростил протокол, убрав все устаревшие алгоритмы. К 2023 году TLS 1.3 используется в 70% HTTPS-соединений.
TLS в хостинге
В Nginx минимальная конфигурация: ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:.... PCI DSS с июня 2018 требует TLS 1.2 или выше для обработки платёжных данных. Let's Encrypt выдаёт сертификаты бесплатно и автоматически.
TLS handshake в деталях
TLS 1.3 handshake (RFC 8446, 2018) значительно быстрее TLS 1.2: всего 1 RTT вместо 2 RTT. Процесс TLS 1.3: клиент отправляет ClientHello с поддерживаемыми cipher suites и ключевым материалом (Diffie-Hellman). Сервер отвечает ServerHello, выбирает cipher suite, отправляет сертификат и Finished. Клиент верифицирует сертификат и отправляет Finished. Данные могут идти сразу. TLS 1.3 с 0-RTT позволяет клиенту отправлять данные в первом пакете при повторном подключении (риск replay-атак).
TLS поддерживает SNI (Server Name Indication) — расширение, позволяющее серверу хостить несколько доменов с разными сертификатами на одном IP. Клиент отправляет имя хоста в ClientHello в открытом виде (не зашифровано). ESNI/ECH (Encrypted Client Hello) — развивающееся расширение, скрывающее SNI.
Cipher suites в TLS
TLS 1.3 поддерживает только 5 cipher suites (против 37 в TLS 1.2): TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_GCM_SHA256, TLS_AES_128_CCM_8_SHA256, TLS_AES_128_CCM_SHA256. Все используют AEAD-шифрование (Authenticated Encryption with Associated Data) — гарантируют целостность данных. TLS 1.2 с устаревшими cipher suites (RC4, DES, 3DES) — уязвим, отключается через конфигурацию Nginx: ssl_protocols TLSv1.2 TLSv1.3;.
SSL vs TLS: что правильно говорить
SSL (Secure Sockets Layer) — устаревший протокол: SSL 2.0 (1995), SSL 3.0 (1996). TLS заменил SSL: TLS 1.0 (1999), TLS 1.1 (2006), TLS 1.2 (2008), TLS 1.3 (2018). SSL 2.0 и 3.0 запрещены к использованию (RFC 6176, 7568). TLS 1.0 и 1.1 официально устарели с RFC 8996 (2021). В разговорной речи «SSL-сертификат» говорят о TLS-сертификате — исторический термин. Технически правильно: TLS-сертификат, TLS-соединение.