Открыть сервис

TLS

TLS (сокр. от англ. Transport Layer Securityбезопасность транспортного уровня) — это криптографический протокол, обеспечивающий защищённую передачу данных между узлами в компьютерной сети. TLS работает на транспортном уровне модели OSI (между транспортным и прикладным уровнями) и предназначен для обеспечения конфиденциальности, целостности и аутентификации передаваемой информации. Является преемником протокола SSL (Secure Sockets Layer), который был разработан компанией Netscape Communications в середине 1990-х годов. TLS используется в подавляющем большинстве современных интернет-сервисов, включая веб-браузинг (HTTPS), электронную почту (SMTPS, IMAPS), передачу файлов (FTPS) и голосовую связь (VoIP).

История развития

Предшественник — SSL

Первая версия протокола SSL (SSL 1.0) была разработана компанией Netscape в 1994 году, но никогда не публиковалась из-за серьёзных уязвимостей. В 1995 году вышла версия SSL 2.0, которая содержала множество недостатков, включая слабые алгоритмы шифрования и отсутствие защиты от атак типа «человек посередине» (man-in-the-middle). В 1996 году был выпущен SSL 3.0, который значительно улучшил безопасность и стал основой для последующей стандартизации.

Появление TLS

В 1999 году Internet Engineering Task Force (IETF) опубликовала спецификацию TLS 1.0 (RFC 2246), основанную на SSL 3.0, но с рядом изменений и улучшений. Протокол был переименован, чтобы подчеркнуть его независимость от Netscape. Версии TLS 1.1 (RFC 4346, 2006 год) и TLS 1.2 (RFC 5246, 2008 год) последовательно добавляли новые криптографические алгоритмы и устраняли уязвимости. TLS 1.2 стал наиболее широко используемой версией на протяжении многих лет.

Современные версии

TLS 1.3 (RFC 8446) был опубликован в августе 2018 года. Эта версия значительно сократила количество этапов рукопожатия (handshake), повысила скорость установления соединения и удалила устаревшие и небезопасные криптографические алгоритмы, такие как RC4, 3DES и статические ключи Диффи — Хеллмана. По состоянию на 2025 год TLS 1.3 является рекомендованной версией для всех новых систем, а TLS 1.0 и TLS 1.1 официально признаны устаревшими и отключены в большинстве современных браузеров и серверов.

Архитектура и принцип работы

Место в стеке протоколов

TLS располагается между транспортным протоколом (обычно TCP) и прикладным протоколом (например, HTTP, FTP, SMTP). Это означает, что TLS получает данные от прикладного уровня, шифрует их и передаёт транспортному уровню для отправки. На стороне получателя TLS расшифровывает данные и передаёт их прикладному протоколу.

Основные компоненты

Протокол TLS состоит из двух основных подслоёв:

  1. Протокол записи (Record Protocol): отвечает за фрагментацию, сжатие (опционально), шифрование и аутентификацию данных. Он использует симметричное шифрование для обеспечения конфиденциальности и коды аутентичности сообщений (MAC) для обеспечения целостности.
  2. Протокол рукопожатия (Handshake Protocol): отвечает за установление защищённого соединения. В ходе рукопожатия стороны согласовывают версию протокола, алгоритмы шифрования, обмениваются ключами и аутентифицируют друг друга (обычно сервер аутентифицируется с помощью цифрового сертификата, а клиент — опционально).

Процесс рукопожатия (TLS 1.2)

Классическое рукопожатие TLS 1.2 включает следующие этапы:

  1. ClientHello: клиент отправляет серверу список поддерживаемых версий TLS, наборов шифров (cipher suites) и методов сжатия, а также случайное число.
  2. ServerHello: сервер выбирает из предложенных клиентом вариантов версию протокола, набор шифров и метод сжатия, отправляет своё случайное число и свой цифровой сертификат (содержащий открытый ключ).
  3. ServerKeyExchange (опционально): сервер отправляет дополнительные данные для обмена ключами (например, параметры Диффи — Хеллмана).
  4. CertificateRequest (опционально): если сервер требует аутентификации клиента, он запрашивает сертификат клиента.
  5. ServerHelloDone: сервер сообщает, что завершил начальный этап.
  6. ClientKeyExchange: клиент генерирует предварительный главный секрет (pre-master secret), шифрует его открытым ключом сервера (из сертификата) и отправляет серверу.
  7. ChangeCipherSpec: клиент сообщает, что переходит на согласованные параметры шифрования.
  8. Finished: клиент отправляет зашифрованное сообщение, подтверждающее успешное завершение рукопожатия.
  9. ChangeCipherSpec и Finished со стороны сервера: сервер аналогичным образом подтверждает переход на новое шифрование.

После этого начинается защищённая передача данных прикладного уровня.

Рукопожатие TLS 1.3

TLS 1.3 сократил количество этапов рукопожатия до одного круга (1-RTT, one round-trip time) в большинстве случаев. Клиент сразу отправляет свои предположения о ключах (в сообщении ClientHello), а сервер может сразу ответить зашифрованными данными. Это значительно ускоряет установление соединения, особенно на медленных каналах связи.

Криптографические алгоритмы

Наборы шифров (Cipher Suites)

Набор шифров — это комбинация алгоритмов, используемых для разных целей. Он включает:

  • Алгоритм обмена ключами: например, RSA, Diffie-Hellman (DH), Ephemeral Diffie-Hellman (DHE) или Elliptic Curve Diffie-Hellman (ECDHE). ECDHE является предпочтительным, так как обеспечивает совершенную прямую секретность (PFS).
  • Алгоритм аутентификации: обычно RSA, DSA или ECDSA.
  • Алгоритм симметричного шифрования: например, AES (128 или 256 бит), ChaCha20. В TLS 1.3 используются только AEAD-шифры (Authenticated Encryption with Associated Data), такие как AES-GCM и ChaCha20-Poly1305.
  • Алгоритм хеширования (MAC): например, HMAC-SHA256.

Сертификаты и инфраструктура открытых ключей (PKI)

Для аутентификации сервера (и опционально клиента) используются цифровые сертификаты X.509. Сертификат содержит открытый ключ владельца, информацию о нём (например, доменное имя) и подпись удостоверяющего центра (CA). Цепочка доверия (chain of trust) позволяет клиенту проверить подлинность сертификата, начиная с корневого сертификата CA, встроенного в операционную систему или браузер.

Применение

HTTPS

Наиболее массовое применение TLS — протокол HTTPS (HTTP over TLS). Он обеспечивает защиту веб-трафика, шифруя данные между браузером пользователя и веб-сервером. HTTPS используется для защиты онлайн-банкинга, интернет-магазинов, социальных сетей, почтовых сервисов и любых других сайтов, где требуется конфиденциальность данных. По состоянию на 2025 год доля HTTPS-трафика в мировом веб-трафике превышает 95%.

Электронная почта

TLS используется для защиты передачи электронной почты между почтовыми серверами (SMTP over TLS, порт 587) и между клиентом и сервером (IMAP over TLS, порт 993; POP3 over TLS, порт 995). Протокол STARTTLS позволяет установить защищённое соединение поверх обычного незащищённого порта.

Другие протоколы

  • FTPS: FTP over TLS для защищённой передачи файлов.
  • VPN: некоторые реализации VPN (например, OpenVPN) могут использовать TLS для установления защищённого канала.
  • VoIP: протоколы SIP и RTP могут использовать TLS для шифрования сигнализации и медиатрафика.
  • WebSockets: защищённые WebSocket-соединения (wss://) используют TLS.

Уязвимости и атаки

Известные атаки на старые версии

  • POODLE (2014): атака на SSL 3.0, позволяющая расшифровать данные.
  • Heartbleed (2014): уязвимость в реализации OpenSSL, позволяющая читать память сервера.
  • BEAST (2011): атака на TLS 1.0, использующая уязвимость в режиме CBC.
  • CRIME (2012): атака, использующая сжатие TLS для восстановления содержимого запросов.
  • Logjam (2015): атака на обмен ключами Диффи — Хеллмана с использованием слабых параметров.

Современные угрозы

Хотя TLS 1.3 считается устойчивым к большинству известных атак, безопасность соединения зависит от правильной настройки сервера и клиента. Основные угрозы включают:

  • Атаки на PKI: компрометация удостоверяющих центров, выдача поддельных сертификатов.
  • Атаки на реализацию: ошибки в коде библиотек TLS (например, OpenSSL, BoringSSL, LibreSSL).
  • Атаки на протокол прикладного уровня: TLS защищает только транспортный уровень, но не защищает от уязвимостей в самом приложении (например, SQL-инъекции, XSS).

Стандартизация и реализация

Организации

Основным разработчиком и хранителем спецификаций TLS является IETF (Internet Engineering Task Force). Рабочая группа TLS (TLS Working Group) публикует RFC (Request for Comments), которые являются стандартами протокола.

Популярные реализации

  • OpenSSL: самая распространённая библиотека с открытым исходным кодом, используемая в Linux, Apache, Nginx и многих других проектах.
  • BoringSSL: форк OpenSSL от Google, используемый в Chrome и Android.
  • LibreSSL: форк OpenSSL от проекта OpenBSD, ориентированный на безопасность и чистоту кода.
  • SChannel: реализация TLS от Microsoft, встроенная в Windows.
  • Secure Transport: реализация TLS от Apple, встроенная в macOS и iOS.
  • Java Secure Socket Extension (JSSE): реализация TLS для Java.

Интересные факты

  • Протокол TLS 1.3 был разработан с нуля с учётом опыта предыдущих версий и включает только четыре набора шифров, все из которых обеспечивают совершенную прямую секретность.
  • Название «TLS» часто используется как синоним «SSL», хотя технически SSL является устаревшим предшественником. Термин «SSL-сертификат» в быту по-прежнему обозначает сертификат X.509, используемый в TLS.
  • Алгоритм обмена ключами Диффи — Хеллмана, используемый в TLS, был изобретён Уитфилдом Диффи и Мартином Хеллманом в 1976 году и является одним из основополагающих криптографических протоколов.

Источники

  1. RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3.
  2. RFC 5246 — The Transport Layer Security (TLS) Protocol Version 1.2.
  3. RFC 2246 — The TLS Protocol Version 1.0.
  4. «SSL and TLS: Designing and Building Secure Systems» by Eric Rescorla.
  5. «Bulletproof SSL and TLS» by Ivan Ristić.
  6. Документация OpenSSL (openssl.org).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →