# TLS

> Криптографический протокол, обеспечивающий шифрование, целостность и аутентификацию соединений поверх TCP; основа HTTPS.

Источник: https://llmdocs.ru/wiki/tls/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Полное название**: Transport Layer Security
- **Предшественник**: SSL (Netscape, 1995–1996)
- **Текущая версия**: TLS 1.3 (RFC 8446, август 2018)
- **Поддерживаемые версии**: TLS 1.2, TLS 1.3
- **Работает поверх**: TCP (вариант для UDP — DTLS, встроен в QUIC)
- **Порт HTTPS**: 443
- **Стандартизация**: IETF
- **Реализации**: OpenSSL, BoringSSL, LibreSSL, GnuTLS, rustls, Go crypto/tls
**TLS** (англ. *Transport Layer Security* — протокол защиты транспортного уровня) — криптографический протокол, который защищает передачу данных между двумя программами: шифрует трафик, проверяет его целостность и подтверждает подлинность сервера (а при необходимости и клиента) с помощью сертификатов. TLS — то, что превращает [HTTP](https://llmdocs.ru/wiki/http.md) в HTTPS; он же защищает почту (SMTP, IMAP), [DNS](https://llmdocs.ru/wiki/dns.md) (DoT, DoH), базы данных и множество других протоколов. Часто его по старой памяти называют SSL.

## История

Протокол SSL (*Secure Sockets Layer*) разработала компания Netscape для своего браузера: SSL 2.0 вышел в 1995 году, SSL 3.0 — в 1996-м. Затем стандарт перешёл в IETF и был переименован:

| Версия | Год | Документ | Статус |
|---|---|---|---|
| SSL 3.0 | 1996 | RFC 6101 (исторический) | запрещён с 2015 (RFC 7568)[4] |
| TLS 1.0 | 1999 | RFC 2246 | устарел, RFC 8996 (2021)[3] |
| TLS 1.1 | 2006 | RFC 4346 | устарел, RFC 8996 |
| TLS 1.2 | 2008 | RFC 5246[2] | поддерживается |
| TLS 1.3 | 2018 | RFC 8446[1] | актуальный |

Отказ от старых версий ускорили атаки на протокол и его реализации: BEAST (2011), CRIME (2012), POODLE (2014, против SSL 3.0). Широко известная уязвимость Heartbleed (2014) была ошибкой в библиотеке OpenSSL, а не в самом протоколе.

## Как работает

Соединение состоит из двух фаз: **рукопожатия** (handshake), где стороны договариваются о параметрах и вырабатывают ключи, и **передачи записей** (record protocol), где данные шифруются согласованным симметричным алгоритмом.

Упрощённое рукопожатие TLS 1.3 занимает один круг «туда-обратно» (1-RTT):

1. **ClientHello** — клиент отправляет поддерживаемые версии и шифронаборы, свою часть обмена ключами (key share) и расширения, в том числе имя сервера ([SNI](https://llmdocs.ru/wiki/sni.md)) и список прикладных протоколов (ALPN).[5][6]
2. **ServerHello** — сервер выбирает параметры и отвечает своей частью обмена ключами. С этого момента обе стороны вычисляют общий секрет, и всё дальнейшее шифруется.
3. Сервер присылает **сертификат**, подпись рукопожатия (CertificateVerify) и **Finished**.
4. Клиент проверяет цепочку сертификатов до доверенного центра сертификации (см. [Сертификат X.509 и центры сертификации](https://llmdocs.ru/wiki/x509-certificates.md)), отправляет свой Finished — и начинается обмен данными.

Обмен ключами выполняется по алгоритму Диффи — Хеллмана на эллиптических кривых (ECDHE), поэтому даже кража закрытого ключа сервера в будущем не позволит расшифровать записанный ранее трафик — это свойство называется **прямой секретностью** (forward secrecy).

## Что изменилось в TLS 1.3

- Рукопожатие сокращено до 1-RTT; при повторном подключении возможен режим 0-RTT (с оговорками о повторном воспроизведении).
- Удалены статический обмен ключами RSA, режим CBC, RC4, SHA-1, сжатие и пересогласование — источники многих атак.
- Осталось пять шифронаборов, все с аутентифицированным шифрованием (AEAD), например `TLS_AES_128_GCM_SHA256` и `TLS_CHACHA20_POLY1305_SHA256` (см. [Симметричное шифрование (AES, ChaCha20)](https://llmdocs.ru/wiki/symmetric-encryption.md)).
- Сертификат сервера передаётся уже в зашифрованном виде.

Открытым остаётся имя сервера в ClientHello; расширение Encrypted Client Hello (ECH) шифрует его с помощью ключа, опубликованного в DNS.

Браузеры и крупные сервисы внедряют гибридный постквантовый обмен ключами (X25519 в сочетании с ML-KEM), защищающий от расшифровки записанного трафика будущими квантовыми компьютерами.

## Сертификаты

Подлинность сервера подтверждает сертификат X.509, подписанный центром сертификации, которому доверяет клиент. Бесплатные сертификаты с автоматическим продлением выдаёт [Let's Encrypt](https://llmdocs.ru/wiki/lets-encrypt-acme.md) по протоколу ACME. При **взаимной аутентификации** (mTLS) сертификат предъявляет и клиент — так часто защищают связь между внутренними сервисами.

## Практика

```bash
# посмотреть рукопожатие и сертификат сервера
openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null

# дата окончания сертификата
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate
```

Рекомендации по настройке серверов (наборы шифров, версии) публикует, например, Mozilla в виде профилей «Modern» и «Intermediate».[7] Веб-серверы с автоматическим TLS, такие как [Caddy](https://llmdocs.ru/wiki/caddy.md), включают безопасные значения по умолчанию.

## См. также

- [Криптография с открытым ключом](https://llmdocs.ru/wiki/public-key-cryptography.md)
- [SNI](https://llmdocs.ru/wiki/sni.md)
- [HTTP/2 и HTTP/3](https://llmdocs.ru/wiki/http2-http3.md)
- [SSH](https://llmdocs.ru/wiki/ssh.md)

## Источники

1. [RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3](https://www.rfc-editor.org/rfc/rfc8446)
2. [RFC 5246 — The TLS Protocol Version 1.2](https://www.rfc-editor.org/rfc/rfc5246)
3. [RFC 8996 — Deprecating TLS 1.0 and TLS 1.1](https://www.rfc-editor.org/rfc/rfc8996)
4. [RFC 7568 — Deprecating Secure Sockets Layer Version 3.0](https://www.rfc-editor.org/rfc/rfc7568)
5. [RFC 6066 — TLS Extensions (Server Name Indication)](https://www.rfc-editor.org/rfc/rfc6066)
6. [RFC 7301 — TLS Application-Layer Protocol Negotiation Extension](https://www.rfc-editor.org/rfc/rfc7301)
7. [Mozilla — Server Side TLS recommendations](https://wiki.mozilla.org/Security/Server_Side_TLS)
