SSL/TLS
Протокол защищенного соединения: шифрует данные между браузером и сервером и подтверждает, что вы общаетесь с настоящим сайтом.
TLS (Transport Layer Security) — протокол, который защищает соединение между двумя программами: браузером и сайтом, приложением и API, двумя серверами. Он решает три задачи: шифрует данные, чтобы их никто не прочитал; защищает от подмены по дороге; подтверждает, что сервер — действительно тот, за кого себя выдает. Именно TLS превращает HTTP в HTTPS и дает замочек в адресной строке.
SSL — предшественник TLS. Все версии SSL давно признаны небезопасными и отключены, но название закрепилось: «SSL-сертификат» на деле означает сертификат для TLS. Актуальные версии — TLS 1.2 (2008) и TLS 1.3 (2018).
Как устанавливается соединение
- Клиент сообщает, какие версии и алгоритмы поддерживает.
- Сервер выбирает параметры и присылает свой сертификат.
- Клиент проверяет сертификат: выдан ли он доверенным центром, не истек ли, совпадает ли имя сайта.
- Стороны вырабатывают общий секретный ключ так, что подслушивающий его не узнает, и дальше все данные шифруются симметрично.
В TLS 1.3 рукопожатие занимает один обмен сообщениями вместо двух, а устаревшие алгоритмы убраны. Целостность данных обеспечивают алгоритмы аутентификации сообщений — родственники HMAC.
Сертификаты и цепочка доверия
Сертификат связывает имя сайта с его открытым ключом и подписан удостоверяющим центром. Браузер доверяет небольшому списку корневых центров, а те — промежуточным, которые выдают сертификаты сайтам. Бесплатные сертификаты на 90 дней выдает Let’s Encrypt, их выпуск и обновление автоматизируют. С 2022 года сертификаты российским сайтам выдает и Национальный удостоверяющий центр Минцифры. Для государственных систем применяется TLS с российскими криптоалгоритмами по ГОСТ.
Проверить сертификат
# Командная строка Linux
openssl s_client -connect example.ru:443 -servername example.ru </dev/null | openssl x509 -noout -dates -subject
Команда покажет, кому выдан сертификат и до какой даты он действует.
Типичные проблемы
- Истекший сертификат — сайт или API внезапно перестает открываться. Сроки нужно отслеживать мониторингом, а продление — автоматизировать.
- Неполная цепочка — сервер не прислал промежуточный сертификат, и часть клиентов, особенно мобильных, не доверяет сайту.
- Устаревшие версии и шифры включены ради старых клиентов и ослабляют защиту всех.
Обычно TLS-соединения принимает веб-сервер или обратный прокси, например Nginx, а между внутренними сервисами используют взаимную проверку сертификатов (mTLS).