Версии TLS, наборы шифров и совершенная прямая секретность
Настройте TLS 1.2/1.3, выберите надёжные наборы шифров и включите совершенную прямую секретность, чтобы перехваченный трафик нельзя было расшифровать задним числом.
«Версии TLS, наборы шифров и совершенная прямая секретность» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Обзор протокола TLS
TLS (Transport Layer Security) — это криптографический протокол, защищающий большую часть интернет-коммуникаций: HTTPS, SMTPS, IMAPS, LDAPS и VPN используют TLS. TLS обеспечивает три свойства безопасности: конфиденциальность (шифрование предотвращает перехват), целостность (MAC предотвращает изменение данных) и аутентификацию (сертификаты подтверждают личность сервера). TLS развился из SSL (Secure Sockets Layer), который теперь считается устаревшим. Текущие версии — TLS 1.2 (широко распространённая) и TLS 1.3 (более быстрая и безопасная, рекомендованная для всех новых развёртываний).
История версий TLS и отказ от устаревших версий
TLS прошёл через несколько версий, и в старых были обнаружены критические уязвимости. SSL 2.0/3.0: устарели и уязвимы для атак POODLE и DROWN. TLS 1.0: признана устаревшей NIST и PCI-DSS в 2020 году (уязвима для BEAST и POODLE при использовании блочных шифров). TLS 1.1: признана устаревшей одновременно с TLS 1.0. TLS 1.2: текущий минимальный стандарт; безопасна при правильной настройке с сильными наборами шифров. TLS 1.3: выпущена в 2018 году; удаляет все слабые алгоритмы, требует прямой секретности, значительно ускоряет рукопожатие (1-RTT вместо 2-RTT) и предотвращает атаки на понижение версии. PCI-DSS 4.0 требует минимум TLS 1.2 и рекомендует TLS 1.3.
# TLS version timeline
SSL 2.0 1995 DEPRECATED (DROWN)
SSL 3.0 1996 DEPRECATED (POODLE)
TLS 1.0 1999 DEPRECATED 2020 (BEAST, POODLE)
TLS 1.1 2006 DEPRECATED 2020 (no improvements over 1.0)
TLS 1.2 2008 MINIMUM STANDARD (strong ciphers required)
TLS 1.3 2018 RECOMMENDED (mandatory PFS, faster, secure)
# Check which TLS versions a server supports
nmap --script ssl-enum-ciphers -p 443 example.com
# Or:
openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1_3Наборы шифров
Набор шифров — это совокупность криптографических алгоритмов, используемых вместе в сеансе TLS. Каждый набор шифров определяет: алгоритм обмена ключами (как устанавливаются ключи сеанса), алгоритм аутентификации (как проверяется сервер), алгоритм блочного шифрования (что шифрует данные) и алгоритм кода аутентификации сообщения (MAC) (как проверяется целостность). Клиент и сервер договариваются о наборе шифров во время рукопожатия TLS — сервер выбирает самый сильный набор, который поддерживают обе стороны.
# TLS cipher suite naming format (TLS 1.2)
# TLS_[KeyExchange]_WITH_[Cipher]_[MAC]
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
ECDHE = Elliptic Curve Diffie-Hellman Ephemeral
RSA = Server certificate authentication
AES_256_GCM = 256-bit AES in Galois/Counter Mode
SHA384 = HMAC with SHA-384 for integrity
# TLS 1.3 simplified format (fewer components)
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256Алгоритмы обмена ключами
На этапе обмена ключами устанавливается ключ сеанса, не передаваемый по сети. Обмен ключами RSA (TLS 1.2): клиент шифрует предварительный секрет открытым ключом сервера; если закрытый ключ позднее будет скомпрометирован, все прошлые сеансы можно расшифровать. DHE (Diffie-Hellman Ephemeral): создаёт новую пару ключей для каждого сеанса; обеспечивает прямую секретность, но работает медленно. ECDHE (Elliptic Curve DHE): обеспечивает такую же прямую секретность, как DHE, но использует ключи меньшего размера и работает эффективнее — это предпочтительный способ обмена ключами и в TLS 1.2, и в TLS 1.3. TLS 1.3 требует использования ECDHE или DHE и полностью исключает обмен ключами RSA.
Идеальная прямая секретность (PFS)
Идеальная прямая секретность (PFS) гарантирует, что даже после компрометации долгосрочного закрытого ключа сервера прошлые записанные сеансы нельзя будет расшифровать. PFS достигается с помощью эфемерного обмена ключами (ECDHE или DHE), при котором для каждого сеанса создаётся новая временная пара ключей, а после использования удаляется. Без PFS (при обмене ключами RSA) атакующий может записать все зашифрованные сеансы TLS сегодня, а затем расшифровать их задним числом, когда получит закрытый ключ. Стратегия наблюдения NSA «собрать сейчас, расшифровать позже» исходит из того, что цели в конечном счёте перейдут на более сильные ключи или квантовые компьютеры взломают используемые сегодня ключи.
# Cipher suites WITH perfect forward secrecy
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 # Good
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 # Good
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 # OK (slower)
# Cipher suites WITHOUT perfect forward secrecy
TLS_RSA_WITH_AES_256_CBC_SHA256 # NO PFS - avoid
TLS_RSA_WITH_3DES_EDE_CBC_SHA # NO PFS + weak
# Key: look for ECDHE or DHE prefix
# RSA alone as key exchange = no forward secrecyСлабые алгоритмы шифрования, которых следует избегать
Несколько устаревших компонентов шифров криптографически взломаны и должны быть отключены. Шифры NULL: шифрование полностью отсутствует. Экспортные шифры (атака FREAK): намеренно ослаблены для соблюдения экспортных правил US 1990-х годов. RC4: потоковый шифр со статистическими смещениями, использованными в атаках. DES и 3DES: блочные шифры со слишком маленькими размерами блока (атака SWEET32) или недостаточной длиной ключа. MD5 и SHA-1 для MAC: уязвимы к коллизиям. Анонимные шифры (aNULL): аутентификация сервера отсутствует. Современные конфигурации TLS должны разрешать в качестве блочных шифров только AES-GCM, ChaCha20-Poly1305, AES-CCM.
# nginx: disable weak ciphers, enforce strong only
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:
ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-CHACHA20-POLY1305:
ECDHE-RSA-CHACHA20-POLY1305:
ECDHE-ECDSA-AES128-GCM-SHA256:
ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
# Explicitly disable weak ciphers in Apache
SSLCipherSuite 'HIGH:!aNULL:!MD5:!3DES:!RC4:!EXPORT'Улучшения TLS 1.3
TLS 1.3 содержит несколько существенных улучшений безопасности по сравнению с версией 1.2. Обязательная PFS: обмен ключами RSA удалён — все сеансы используют ECDHE или DHE. Меньше наборов шифров: разрешены только 5 наборов шифров AEAD; согласование слабого шифра невозможно. Более быстрое рукопожатие: 1 обмен данными (1-RTT) вместо 2-RTT в TLS 1.2 и 0-RTT для возобновления сеанса (хотя 0-RTT связан с риском атак повторного воспроизведения). Зашифрованное рукопожатие: сертификат сервера шифруется во время рукопожатия, поэтому пассивные наблюдатели не могут определить, к какому сертификату, а значит и к какому веб-сайту, подключается клиент.
# TLS 1.3 handshake (simplified)
Client -> Server: ClientHello (supported ciphers, key shares)
Server -> Client: ServerHello (chosen cipher, key share)
{EncryptedExtensions}
{Certificate}
{CertificateVerify}
{Finished}
Client -> Server: {Finished}
# Both sides now have session keys
# Total: 1 round-trip before application data
# (TLS 1.2 required 2 round trips)
# Note: {} = encrypted (cert is hidden from observers)Атаки на понижение версии и POODLE
Атаки на понижение версии заставляют сервер TLS и клиента использовать более старую и слабую версию TLS или набор шифров, хотя обе стороны поддерживают более новые варианты. POODLE (Padding Oracle On Downgraded Legacy Encryption) использовала тот факт, что реализации TLS при ошибках соединения переходили на SSL 3.0. Способ защиты заключался в отключении SSL 3.0. FREAK и Logjam использовали экспортные шифры. TLS_FALLBACK_SCSV — псевдонабор шифров, который клиенты включают, чтобы сообщить: «это не моя предпочтительная версия». Если сервер видит этот сигнал и поддерживает более новую версию, он прерывает попытку понижения.
Проверка и закрепление сертификата
Аутентификация сервера TLS основана на проверке клиентом цепочки сертификатов до доверенного корневого CA. Критически важные проверки: срок действия (сертификат должен находиться в пределах периода действия), отзыв (проверка CRL или OCSP подтверждает, что сертификат не отозван), имя узла (SAN или CN должны соответствовать домену, к которому выполняется подключение) и цепочка подписей (подписи промежуточного CA и корневого CA действительны). Прозрачность сертификатов (CT) требует регистрировать все общедоверенные сертификаты в журналах CT, доступных только для добавления, что позволяет обнаруживать неправильно выданные сертификаты в течение нескольких минут после выдачи.
# Check TLS certificate details
openssl s_client -connect example.com:443 \
-showcerts 2>/dev/null | openssl x509 -noout \
-text | grep -E 'Subject:|Issuer:|Not After:|SAN'
# Verify certificate chain
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt \
server.crt
# Check OCSP status
openssl ocsp -issuer intermediate.crt \
-cert server.crt \
-url http://ocsp.ca.example.com \
-text -noverifySSL Labs и проверка конфигурации
Qualys SSL Labs (ssllabs.com/ssltest) — эталонный инструмент для оценки конфигурации TLS веб-сервера. Он оценивает серверы по шкале от A+ (отлично) до F (критические проблемы) на основе поддерживаемых версий TLS, силы наборов шифров, действительности сертификата, конфигурации HSTS, поддержки прямой секретности и устойчивости к известным атакам. Для оценки A+ требуются: только TLS 1.2 и выше, все шифры ECDHE, действительный сертификат и HSTS с предварительной загрузкой. Организациям следует запускать проверки SSL Labs после первоначальной настройки и после любых изменений в стеке TLS. Многие стандарты соответствия (PCI-DSS) требуют периодической оценки конфигурации TLS.
Рекомендации по управлению сертификатами TLS
Истёкшие сертификаты TLS вызывают перебои в работе и предупреждения для пользователей о недоверии, которыми пользуются атакующие. Управление жизненным циклом сертификатов включает: ведение всех сертификатов в реестре сертификатов, настройку уведомлений об окончании срока действия не менее чем за 30 дней до истечения, автоматическое продление с помощью протокола ACME (Let's Encrypt, Certbot), использование коротких сроков действия сертификатов (90 дней для общедоступных сертификатов) для уменьшения периода риска при компрометации и осторожное использование сертификатов с подстановочными именами (*.example.com), поскольку скомпрометированный сертификат с подстановочным именем затрагивает все поддомены. Платформы управления сертификатами (Venafi, DigiCert CertCentral) автоматизируют обнаружение и управление жизненным циклом больших реестров сертификатов.
# Auto-renew Let's Encrypt cert with Certbot
# Install Certbot
apt install certbot python3-certbot-nginx
# Issue certificate
certbot --nginx -d example.com -d www.example.com
# Certbot auto-renewal (runs twice daily via systemd timer)
systemctl status certbot.timer
# Test renewal without actually renewing
certbot renew --dry-run
# Verify cert expiry date
openssl x509 -enddate -noout -in /etc/ssl/certs/example.crt
# Output: notAfter=Feb 20 12:00:00 2025 GMTБыстрая проверка
Проверьте своё понимание концепций CompTIA Security+ (SY0-701) из этого урока.
Итоги урока
В этом уроке Вы узнали, что TLS 1.0/1.1 признаны устаревшими, TLS 1.2 является минимальным стандартом, а TLS 1.3 предпочтительна благодаря обязательной PFS и зашифрованным рукопожатиям; наборы шифров определяют обмен ключами (предпочтительно ECDHE), блочное шифрование (AES-GCM, ChaCha20) и алгоритмы MAC; а идеальная прямая секретность требует эфемерного обмена ключами (DHE/ECDHE), чтобы прошлые сеансы нельзя было расшифровать даже после компрометации ключа. Далее мы рассмотрим безопасный DNS: DNSSEC и DNS через HTTPS.
Часто задаваемые вопросы
Урок «Версии TLS, наборы шифров и совершенная прямая секретность» бесплатный?
Да — полный текст урока «Версии TLS, наборы шифров и совершенная прямая секретность» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «Версии TLS, наборы шифров и совершенная прямая секретность»?
Настройте TLS 1.2/1.3, выберите надёжные наборы шифров и включите совершенную прямую секретность, чтобы перехваченный трафик нельзя было расшифровать задним числом. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Версии TLS, наборы шифров и совершенная прямая секретность»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Замена небезопасных протоколов: Telnet и SSH, FTP и SFTP
- Версии TLS, наборы шифров и совершенная прямая секретность
- Безопасный DNS: DNSSEC и DNS через HTTPS (DoH)
- IPsec, протоколы VPN и безопасность удалённого доступа