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, что означает:

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

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

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

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

nmap:

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

Вывод покажет все поддерживаемые cipher suites по версиям 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 поддерживает три рекомендованных профиля:

Генератор конфигов: 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 года):

Несоответствие — риск потери 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-сертификат: как исправить ошибку NET::ERR_CERT_DATE_INVALID
15.04.2026 · 9 просм.
SSL
Wildcard vs SAN-сертификат: когда какой выбрать в 2026
15.04.2026 · 8 просм.
SSL
SSL Handshake Failed: причины ошибки и пошаговая диагностика
15.04.2026 · 12 просм.
SSL
Mixed Content: как найти и исправить HTTP-ресурсы на HTTPS-сайте
15.04.2026 · 8 просм.