Определение простыми словами
TLS — это набор криптографических правил, по которым клиент и сервер договариваются о безопасном канале связи. Перед обменом данными они выполняют рукопожатие: проверяют сертификат сервера, согласуют версию протокола, выбирают алгоритмы шифрования и обмениваются ключами. После рукопожатия весь трафик шифруется и подписывается так, что злоумышленник посередине не может ни прочитать, ни подменить данные.
Протокол развивался поверх Secure Sockets Layer (SSL) — разработки Netscape середины 1990-х. С 1999 года стандартом занимается IETF, сменив название на TLS. SSL 2.0 и 3.0, а также TLS 1.0 и 1.1 признаны устаревшими и отключены в браузерах с 2020 года. Современный интернет работает на TLS 1.2 и TLS 1.3.
TLS — фундамент HTTPS, без которого браузеры показывают предупреждение «Не защищено». Поверх TLS работают защищённая почта (SMTPS, IMAPS), MQTT, gRPC, WebSocket Secure, многие VPN-протоколы. Подробнее о смежных понятиях — в материалах о SSL и HTTPS.
Сравнение
| Параметр | TLS 1.2 | TLS 1.3 | SSL 3.0 |
|---|---|---|---|
| Год публикации | 2008 | 2018 | 1996 |
| Поддержка в браузерах | да | да | отключено |
| Раундов в рукопожатии | 2 | 1 (0-RTT при возобновлении) | 2 |
| Уязвимые шифры | RC4, 3DES (исключены) | удалены полностью | POODLE |
| Forward secrecy | опционально | обязательно | нет |
| Размер ChangeCipherSpec | есть | удалён | есть |
Кейсы использования
- HTTPS на сайтах: TLS защищает пароли, платёжные данные и контент от перехвата.
- API-интеграции: REST и gRPC передают токены и тела запросов поверх TLS.
- Защищённая почта: SMTP STARTTLS, IMAPS и POP3S шифруют переписку и логин.
- VPN-протоколы OpenVPN и WireGuard используют TLS-handshake для обмена ключами.
- Балансировщики и WAF выполняют TLS-терминацию, разгружая backend от шифрования.
Когда TLS избыточен:
- Локальный обмен между сервисами в одном Docker-network — есть встроенная изоляция.
- Внутренние UDP-логи внутри VPN — двойное шифрование тратит CPU.
- Embedded-устройства с ограниченным CPU — иногда выбирают облегчённый DTLS.
Технические детали
Проверка TLS-конфигурации сервера через openssl:
# Полная информация о сертификате и цепочке
openssl s_client -connect example.com:443 -servername example.com
# Только версия протокола и шифр
openssl s_client -connect example.com:443 -tls1_3 < /dev/null 2>/dev/null
| grep -E "Protocol|Cipher"
# Срок действия сертификата
openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>/dev/null
| openssl x509 -noout -dates
# Минимальный конфиг Nginx с TLS 1.2 и 1.3
# server {
# listen 443 ssl http2;
# ssl_certificate /etc/letsencrypt/live/site.ru/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/site.ru/privkey.pem;
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_ciphers HIGH:!aNULL:!MD5:!3DES:!RC4;
# ssl_prefer_server_ciphers off;
# }
# Тест рейтинга через ssllabs CLI
nmap --script ssl-enum-ciphers -p 443 example.com
Бесплатные сертификаты для TLS можно получить через Let’s Encrypt; на виртуальном хостинге их обычно выпускает панель управления автоматически.
🔥 Где это применяется
Частые вопросы
В чём разница между TLS и SSL?
TLS — преемник SSL, разработанный после стандартизации в IETF. Технически это разные протоколы, но термины часто используют как синонимы. SSL 3.0 и ниже отключены из-за уязвимостей.
Зачем переходить на TLS 1.3?
Рукопожатие в один раунд вместо двух ускоряет загрузку сайта на 50-100 мс, удалены устаревшие шифры, обязателен forward secrecy. Браузеры предпочитают 1.3, серверу выгодно поддерживать обе версии.
Что такое SNI?
Server Name Indication — расширение TLS, позволяющее серверу обслуживать несколько доменов с разными сертификатами на одном IP-адресе. Без SNI пришлось бы выделять отдельный IP под каждый сайт.
Почему openssl показывает 'verify error'?
Цепочка сертификата неполная: сервер не отдаёт промежуточный сертификат CA. Решение — указать в ssl_certificate полный fullchain.pem, а не только сертификат сайта.