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:
- ClientHello — клиент отправляет серверу список поддерживаемых версий TLS, набор шифров (cipher suites), методы сжатия и случайное число.
- ServerHello — сервер выбирает версию TLS, шифр и метод сжатия из предложенных клиентом, отправляет свой сертификат X.509 (содержащий открытый ключ) и случайное число.
- Аутентификация сервера — клиент проверяет сертификат сервера на подлинность, используя цепочку доверенных центров сертификации (CA).
- Обмен ключами — клиент генерирует предварительный ключ (pre-master secret), шифрует его открытым ключом сервера и отправляет обратно. Сервер расшифровывает его своим закрытым ключом.
- Вычисление сессионных ключей — обе стороны на основе предварительного ключа и случайных чисел генерируют симметричные ключи (сессионные ключи) для шифрования данных.
- Завершение — стороны обмениваются сообщениями 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 →