TLS
TLS (Transport Layer Security) — протокол, который шифрует трафик между клиентом и сервером и подтверждает подлинность сервера; основа HTTPS.
Что такое TLS
TLS расшифровывается как Transport Layer Security — «безопасность транспортного уровня». Это криптографический протокол, который надстраивается над TCP и даёт соединению три вещи: шифрование (никто по пути не прочитает), аутентификацию сервера (вы говорите с тем, с кем думаете) и целостность (данные не подменены незаметно). HTTPS — это ровно HTTP поверх TLS, ничего больше.
TLS и SSL — в чём разница
Разницы на практике нет: TLS это переименованный SSL. Протокол создали в Netscape под именем SSL, в 1999 году передали в IETF, и при стандартизации сменили название. TLS 1.0 — это, по сути, SSL 3.1.
| Версия | Год | Статус |
|---|---|---|
| SSL 2.0 / 3.0 | 1995 / 1996 | Запрещены (POODLE и др.) |
| TLS 1.0 / 1.1 | 1999 / 2006 | Устарели, отключены (RFC 8996) |
| TLS 1.2 | 2008 | Рабочий минимум |
| TLS 1.3 | 2018 | Актуальный, предпочтительный |
Поэтому «SSL-сертификат», «SSL/TLS» и «тлс» в разговоре означают одно и то же. Формально верно: протокол — TLS, а сертификат — X.509, и он вообще не зависит от версии протокола.
Как работает handshake
Перед передачей данных стороны договариваются о ключах:
Клиент Сервер
|-- ClientHello ------------------------->| версии, шифры, key share, SNI
|<------------------- ServerHello --------| выбранный шифр, key share
|<------------ Certificate, Finished -----| сертификат + подпись
|-- Finished ---------------------------->|
|======= зашифрованные данные ===========|
Ключевая идея: асимметричная криптография используется только чтобы договориться о симметричном ключе, а дальше весь трафик шифруется быстрым симметричным шифром (AES-GCM, ChaCha20-Poly1305). Асимметрика на порядки медленнее, гонять через неё гигабайты никто не станет.
Что дал TLS 1.3
- Один round-trip вместо двух. Handshake TLS 1.2 требовал 2-RTT, 1.3 укладывается в 1-RTT — это заметное снижение latency, особенно на мобильных сетях.
- Обязательный forward secrecy. Статический обмен ключами на RSA удалён из протокола, остался только эфемерный (EC)DHE — см. PFS.
- Вычищены слабые примитивы. Ушли RC4, DES, MD5, SHA-1, CBC-режимы, сжатие. Список шифров сократился с сотен до пяти.
- 0-RTT для возобновления сессий — быстро, но уязвимо к replay, включать только для идемпотентных запросов.
- Шифрование части handshake — сертификат сервера больше не летит открытым текстом.
Настройка на практике
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # тикеты ломают PFS без ротации ключей
ssl_stapling on; # OCSP stapling
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Проверить, что получилось:
openssl s_client -connect example.com:443 -tls1_3 </dev/null 2>/dev/null | grep -E 'Protocol|Cipher'
nmap --script ssl-enum-ciphers -p 443 example.com
Отключать TLS 1.2 в пользу «только 1.3» стоит осознанно: старые клиенты и часть библиотек его не поддержат.
TLS в инфраструктуре
TLS нужен не только снаружи. Трафик между сервисами внутри VPC, реплики PostgreSQL, подключения к брокеру сообщений — всё это тоже шифруют, потому что периметр давно перестал быть границей доверия. Взаимная аутентификация (mTLS), когда сертификат предъявляет и клиент, — стандартный способ аутентификации между микросервисами в Kubernetes.
В России для государственных систем применяется TLS на отечественных алгоритмах — ГОСТ TLS с СКЗИ вроде КриптоПро; обычный OpenSSL такие соединения не установит.
Связанные термины
- SSL-сертификат — чем сервер доказывает свою подлинность
- PFS — свойство, обязательное в TLS 1.3
- Криптография и СКЗИ — алгоритмы под капотом
- SNI — как в одном IP уживаются сотни доменов
- HTTP — протокол, который TLS оборачивает
Готовы запустить GPU-задачу?
Запустить GPU-сервер