Skip to content
← Все статьи

Слабые cipher suites: как найти и отключить небезопасные шифры TLS

Слабые cipher suites: как найти и отключить небезопасные шифры TLS

Cipher suite — набор криптографических алгоритмов, который клиент и сервер согласуют во время TLS-handshake: обмен ключами, аутентификация, симметричное шифрование, MAC. Устаревшие наборы (RC4, 3DES, EXPORT, NULL, MD5) снижают оценку SSL Labs до B или F, делают сайт уязвимым к атакам POODLE, BEAST, SWEET32, и являются провалом PCI DSS. Разберём, как найти слабые шифры и заменить их на современный safe-профиль.

Что такое «слабый» cipher suite

Cipher suite в TLS 1.2 имеет вид: ECDHE-RSA-AES128-GCM-SHA256, что означает:

  • ECDHE — обмен ключами (forward secrecy).
  • RSA — аутентификация сервера.
  • AES128-GCM — симметричный шифр.
  • SHA256 — хеш для MAC.

«Слабым» считается набор, у которого хоть один компонент устарел:

  • Обмен ключами без forward secrecy: RSA key exchange (нет ECDHE/DHE).
  • Старые шифры: RC4, 3DES, DES, EXPORT-grade, NULL (без шифрования).
  • Слабые хеши: MD5, SHA1 в MAC.
  • Блочные шифры с CBC подвержены padding oracle атакам (BEAST, Lucky13).
  • Размер ключа: ключи меньше 128 бит считаются недостаточными.

Известные атаки на слабые шифры

  • POODLE (2014): атака на SSLv3 с CBC. Решение — отключить SSLv3.
  • SWEET32 (2016): коллизии в 64-bit блочных шифрах (3DES, Blowfish). Решение — отключить 3DES.
  • RC4 biases (2013-2015): восстановление открытого текста из повторяющихся RC4-шифрованных сообщений. Решение — отключить RC4.
  • BEAST (2011): атака на CBC в TLS 1.0. Решение — TLS 1.2+ с AEAD.
  • FREAK (2015), Logjam (2015): downgrade-атаки на EXPORT-grade. Решение — отключить EXPORT.
  • ROBOT (2017): восстановление RSA-ключа через padding oracle. Решение — отключить RSA key exchange.

TLS 1.3 (см. TLS 1.3 vs 1.2) изначально исключает все уязвимые наборы. Проблема только в TLS 1.2 и ниже.

Как проверить свои cipher suites

nmap:

nmap --script ssl-enum-ciphers -p 443 example.com

Вывод покажет все поддерживаемые TLS cipher suites 2026 по версиям TLS с пометками «weak» рядом с проблемными.

testssl.sh:

docker run --rm -ti drwetter/testssl.sh example.com

Онлайн: SSL Checker enterno.io, SSL Labs, Mozilla Observatory.

Mozilla профили: Modern, Intermediate, Old

Mozilla поддерживает три рекомендованных профиля:

  • Modern: TLS 1.3 only, совместимо с 90% клиентов. Для API документацию и современных сервисов.
  • Intermediate (рекомендуется): TLS 1.2 + 1.3, совместимо с 99% клиентов, без слабых шифров.
  • Old: TLS 1.0+, для legacy (Windows XP, старые Android). Избегать.

Генератор конфигов: ssl-config.mozilla.org — выбираете сервер, профиль, версии OpenSSL, получаете готовый кусок конфига.

Безопасная конфигурация nginx (Intermediate)

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:\
ECDHE-RSA-AES128-GCM-SHA256:\
ECDHE-ECDSA-AES256-GCM-SHA384:\
ECDHE-RSA-AES256-GCM-SHA384:\
ECDHE-ECDSA-CHACHA20-POLY1305:\
ECDHE-RSA-CHACHA20-POLY1305:\
DHE-RSA-AES128-GCM-SHA256:\
DHE-RSA-AES256-GCM-SHA384';

ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

# TLS 1.3 cipher suites (OpenSSL 1.1.1+)
ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;

# Forward secrecy parameters
ssl_ecdh_curve X25519:prime256v1:secp384r1;

Все эти шифры — AEAD (Authenticated Encryption with Associated Data), они не уязвимы к padding oracle атакам. Блочных CBC-шифров нет.

Apache (Intermediate профиль)

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

Что именно отключить

Явный черный список OpenSSL:

!aNULL   — без аутентификации
!eNULL   — без шифрования
!EXPORT  — export-grade (40/56 бит)
!DES     — DES
!3DES    — 3DES (уязвим к SWEET32)
!RC4     — RC4 (известные атаки)
!MD5     — MD5 (коллизии)
!PSK     — pre-shared keys (если не используете)
!SRP     — редкий, уязвим
!CAMELLIA — опционально, предпочитайте AES

В современных дистрибутивах эти шифры уже отключены в OpenSSL на этапе компиляции. Но всё равно полезно указать явно.

PCI DSS и регуляторные требования

PCI DSS 4.0 (с 2024 года):

  • TLS 1.0 и 1.1 запрещены.
  • SSLv2 / SSLv3 запрещены.
  • Слабые шифры (RC4, 3DES, MD5) запрещены.
  • Регулярный vulnerability scan — обязательное требование (SAQ A, SAQ D).

Несоответствие — риск потери possibility принимать платёжные карты.

Проверка после изменений

  1. nginx -t && systemctl reload nginx.
  2. SSL Checker enterno.io — оценка A или A+.
  3. SSL Labs — отсутствие «weak ciphers», forward secrecy «Yes», HSTS, grade A+.
  4. Протестируйте совместимость со старыми клиентами (iOS 12, Android 7, Windows 10).
  5. Мониторьте через Enterno.io Monitors — alert если оценка упадёт после деплоя.

Часто задаваемые вопросы

Нужно ли перечислять TLS 1.3 cipher suites в ssl_ciphers?

Нет. TLS 1.3 использует отдельную директиву (ssl_conf_command Ciphersuites в nginx с OpenSSL 1.1.1+). Настройки ssl_ciphers применяются только к TLS 1.2 и ниже.

Что делать, если старый клиент не поддерживает современные шифры?

Если это редкий edge case — игнорируйте. Если много легаси-клиентов — используйте Mozilla Old профиль временно, мигрируйте клиентов, потом ужесточайте.

ChaCha20 лучше, чем AES-GCM?

На CPU с аппаратным AES (AES-NI) AES-GCM быстрее. На мобильных без AES-NI (старые ARM) ChaCha20 быстрее. Порядок ECDHE-RSA-CHACHA20-POLY1305 перед AES в ssl_ciphers даёт мобильным преимущество.

Зачем отключать SSL session tickets в TLS 1.2?

Session tickets шифруются ключом сервера, который редко ротируется — это ослабляет forward secrecy. В TLS 1.3 механизм переработан и безопасен. В 1.2 — либо ротируйте ключ часто, либо отключите (ssl_session_tickets off;).

Заключение

Слабые cipher suites — наследие старых серверных шаблонов, которые «работают, не трогай». Обновить конфиг до Mozilla Intermediate — 10 минут работы и годы защиты от новых атак. Проверьте текущую конфигурацию через SSL Checker enterno.io и защитите от регрессии через Monitors. Связанные темы: миграция на TLS 1.3, HSTS.

Mozilla SSL Config — ssl-config.mozilla.org. TLS 1.2 cipher suites — RFC 5246. NIST рекомендации — SP 800-52 Rev 2.

Проверьте ваш сайт прямо сейчас

Проверить →
Другие статьи: SSL
SSL
Бесплатный SSL через Let's Encrypt: установка certbot за 10 минут
15.04.2026 · 156 просм.
SSL
Просроченный SSL-сертификат: как исправить ошибку NET::ERR_CERT_DATE_INVALID
15.04.2026 · 139 просм.
SSL
Как проверить SSL-сертификат и не пропустить истечение
12.04.2026 · 133 просм.
SSL
Неполная цепочка SSL-сертификата: как найти и исправить incomplete chain
15.04.2026 · 104 просм.