Security

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-сервер