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

SSL/TLS

SSL/TLS (Secure Sockets Layer / Transport Layer Security) — это криптографические протоколы, обеспечивающие защищённую передачу данных между узлами в компьютерной сети, преимущественно между веб-сервером и браузером. Основное назначение SSL/TLS — шифрование передаваемой информации, аутентификация сторон соединения и обеспечение целостности данных, что предотвращает перехват, подделку и чтение трафика злоумышленниками. Протокол TLS является преемником SSL и в настоящее время (на 2024 год) используется в подавляющем большинстве защищённых интернет-соединений, обозначаемых в адресной строке браузера как HTTPS.

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

Разработка SSL компанией Netscape

Протокол SSL (Secure Sockets Layer) был разработан компанией Netscape Communications в середине 1990-х годов для обеспечения безопасности электронной коммерции и других онлайн-транзакций. Первая версия SSL 1.0, созданная в 1994 году, никогда не публиковалась из-за серьёзных уязвимостей. В 1995 году вышла SSL 2.0, которая также содержала недостатки, в том числе отсутствие защиты от атак типа «человек посередине» (MITM). В 1996 году была представлена SSL 3.0, значительно улучшившая безопасность и ставшая основой для последующих стандартов.

Стандартизация TLS

В 1999 году Инженерный совет Интернета (IETF) опубликовал RFC 2246, описывающий протокол TLS 1.0, который базировался на SSL 3.0, но с рядом изменений и улучшений. Фактически, TLS 1.0 можно рассматривать как SSL 3.1, однако название было изменено из-за юридических соображений (Netscape не передала права на торговую марку SSL). Последующие версии протокола развивались следующим образом:

  • TLS 1.1 (RFC 4346, 2006 год) — добавлена защита от атак с использованием векторов инициализации (CBC), улучшена обработка ошибок.
  • TLS 1.2 (RFC 5246, 2008 год) — введена поддержка современных алгоритмов шифрования (AES-GCM, SHA-256), удалены устаревшие криптографические примитивы. Долгое время являлся основной версией протокола.
  • TLS 1.3 (RFC 8446, 2018 год) — значительное упрощение и ускорение рукопожатия (handshake), удаление небезопасных алгоритмов (RC4, 3DES, статические ключи RSA), обязательное использование Perfect Forward Secrecy (PFS). TLS 1.3 считается наиболее безопасной и производительной версией на сегодняшний день.

Устаревание SSL

Начиная с 2015 года, все версии SSL (2.0, 3.0) были официально признаны устаревшими и небезопасными. Основные браузеры и серверы прекратили поддержку SSL 3.0 в 2014–2015 годах после обнаружения уязвимости POODLE. В настоящее время (2024 год) рекомендуется использовать TLS 1.2 или TLS 1.3.

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

Протокол SSL/TLS работает на транспортном уровне модели OSI (между транспортным и прикладным уровнями), обеспечивая защиту для протоколов более высокого уровня, таких как HTTP, FTP, SMTP. Он состоит из двух основных подуровней: протокола записи (Record Protocol) и протоколов рукопожатия (Handshake Protocol).

Протокол рукопожатия (Handshake)

Рукопожатие — это последовательность обмена сообщениями между клиентом и сервером, в ходе которой они договариваются о параметрах защищённого соединения. В TLS 1.3 процесс рукопожатия значительно упрощён и занимает всего один сетевой обход (round-trip), а при возобновлении сессии — 0-RTT (Zero Round Trip Time). Основные этапы рукопожатия в TLS 1.2:

  1. ClientHello — клиент отправляет серверу список поддерживаемых версий TLS, набор шифров (cipher suites), методы сжатия и случайное число.
  2. ServerHelloсервер выбирает версию TLS, шифр и метод сжатия из предложенных клиентом, отправляет свой сертификат X.509 (содержащий открытый ключ) и случайное число.
  3. Аутентификация сервера — клиент проверяет сертификат сервера на подлинность, используя цепочку доверенных центров сертификации (CA).
  4. Обмен ключами — клиент генерирует предварительный ключ (pre-master secret), шифрует его открытым ключом сервера и отправляет обратно. Сервер расшифровывает его своим закрытым ключом.
  5. Вычисление сессионных ключей — обе стороны на основе предварительного ключа и случайных чисел генерируют симметричные ключи (сессионные ключи) для шифрования данных.
  6. Завершение — стороны обмениваются сообщениями ChangeCipherSpec (указывает, что дальнейшие данные будут шифроваться) и Finished (проверка целостности рукопожатия).

Протокол записи (Record)

После установления защищённого соединения все данные передаются с помощью протокола записи. Он выполняет следующие функции:

  • Фрагментация данных на блоки фиксированного размера (до 16 КБ).
  • Сжатие (опционально, в TLS 1.3 сжатие отключено).
  • Шифрование с использованием согласованного алгоритма (AES, ChaCha20 и др.).
  • Добавление кода аутентичности сообщения (MAC) для проверки целостности.

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

SSL/TLS использует комбинацию асимметричной и симметричной криптографии, а также хеш-функций.

Асимметричная криптография

Используется на этапе рукопожатия для аутентификации и безопасного обмена ключами. Основные алгоритмы:

  • RSA — классический алгоритм, основанный на факторизации больших чисел. В TLS 1.3 его использование для обмена ключами запрещено, но он может применяться для подписи сертификатов.
  • Diffie-Hellman (DH) — протокол обмена ключами, позволяющий двум сторонам получить общий секретный ключ по незащищённому каналу. В TLS 1.3 обязателен к применению.
  • Elliptic Curve Diffie-Hellman (ECDH) — вариант DH на основе эллиптических кривых, обеспечивающий аналогичную безопасность при меньшей длине ключа.
  • DSA/ECDSA — алгоритмы цифровой подписи, используемые для аутентификации сертификатов.

Симметричная криптография

Применяется для шифрования передаваемых данных после установления соединения. Основные алгоритмы:

  • AES (Advanced Encryption Standard) — наиболее распространённый блочный шифр, используемый в режимах GCM (Galois/Counter Mode) или CCM (Counter with CBC-MAC). Обеспечивает высокую производительность и безопасность.
  • ChaCha20 — потоковый шифр, разработанный Даниэлем Бернштейном. Часто используется в паре с алгоритмом аутентификации Poly1305. Показывает хорошую производительность на мобильных устройствах без аппаратной поддержки AES.
  • RC4 — устаревший потоковый шифр, признанный небезопасным и исключённый из TLS 1.3.

Хеш-функции

Используются для создания кодов аутентичности сообщений (MAC) и в процессе рукопожатия. Основные алгоритмы:

  • SHA-256, SHA-384 — семейство хеш-функций, рекомендованных для использования в TLS 1.2 и 1.3.
  • MD5, SHA-1 — устаревшие, небезопасные алгоритмы, исключённые из современных версий.

Сертификаты и центры сертификации

Для аутентификации сервера (и, опционально, клиента) в SSL/TLS используются цифровые сертификаты, соответствующие стандарту X.509. Сертификат содержит:

  • Информацию о владельце (доменное имя, организация).
  • Открытый ключ владельца.
  • Срок действия.
  • Цифровую подпись удостоверяющего центра (CA).

Центры сертификации (CA) — это доверенные организации, которые выпускают и подписывают сертификаты. Браузеры и операционные системы имеют встроенные списки доверенных корневых CA. Если сертификат сервера подписан неизвестным или самоподписанным CA, браузер выдаёт предупреждение о небезопасном соединении.

Применение

SSL/TLS является основой для защиты множества интернет-протоколов и сервисов:

  • HTTPS — защищённая версия HTTP, обеспечивающая шифрование веб-трафика. Используется на подавляющем большинстве сайтов (банки, интернет-магазины, социальные сети, государственные порталы).
  • FTPS — защищённая версия FTP, использующая TLS для шифрования команд и данных.
  • SMTP, IMAP, POP3 с TLS — защита электронной почты при передаче между почтовыми серверами и клиентами.
  • VPN — некоторые реализации VPN (например, OpenVPN) могут использовать TLS для аутентификации и установления защищённого канала.
  • WebSockets — защищённые WebSocket-соединения (wss://) также базируются на TLS.

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

За время существования протокола было обнаружено несколько серьёзных уязвимостей, которые привели к обновлению стандартов:

  • POODLE (2014 год) — атака на SSL 3.0, позволяющая дешифровать данные, используя уязвимость в режиме CBC.
  • Heartbleed (2014 год) — уязвимость в реализации OpenSSL (версии 1.0.1), позволяющая читать память сервера, включая закрытые ключи.
  • BEAST (2011 год) — атака на TLS 1.0, использующая уязвимость в режиме CBC.
  • CRIME/BREACH (2012–2013 годы) — атаки, использующие сжатие данных для восстановления содержимого запросов (например, cookie).
  • Logjam (2015 год) — атака на протоколы обмена ключами Diffie-Hellman, позволяющая понизить стойкость шифрования до 512 бит.

Большинство этих атак были устранены в последующих версиях TLS (1.2, 1.3) и путём обновления криптографических библиотек.

Источники

  • RFC 5246 — The Transport Layer Security (TLS) Protocol Version 1.2
  • RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3
  • RFC 2246 — The TLS Protocol Version 1.0
  • «SSL and TLS: Theory and Practice» — Rolf Oppliger
  • «Bulletproof SSL and TLS» — Ivan Ristić
  • Документация OpenSSL

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

На главную BFOmetr →