testssl.sh: аудит TLS-шифров и известных уязвимостей своего сервера

Мониторинг срока действия сертификата и ручная проверка через openssl и curl закрывают базовый минимум. testssl.sh — отдельный специализированный инструмент: он проверяет сотни комбинаций протоколов и шифров и сверяет конфигурацию с списком именованных уязвимостей (LUCKY13, DROWN, LOGJAM и другие), экономя часы ручной работы с openssl. Проверка выполняется только на своих серверах или по письменному разрешению владельца — сканирование чужих систем без согласия нарушает закон.
Статья опирается на логику направления «Тесты на проникновение» из методики зрелости Группы Сбер (источник); это методика для крупных компаний, мы используем её как ориентир и пересказываем своими словами. Проверка выполнена с testssl.sh (ветка dev) на тестовом сервере nginx с самоподписанным сертификатом в контейнере, после неё всё удалено.
Что должно получиться
| Уровень | Что это значит на практике |
|---|---|
| 2. Гигиенический | Конфигурация TLS проверяется специализированным инструментом по актуальному списку уязвимостей, а не только вручную по памяти |
Критерии сформулированы нами по мотивам методики, это ориентир, а не оценка соответствия.
Запуск
git clone --depth 1 https://github.com/testssl/testssl.sh.git
cd testssl.sh
./testssl.sh --quiet --color 0 -e -S ваш-домен.ru:443
Ключ -e показывает каждый поддерживаемый шифр отдельно, -S — сведения о сертификате (срок действия, цепочка доверия, OCSP). Для точечных проверок есть более узкие режимы:
./testssl.sh -p ваш-домен.ru:443 # только версии протокола (TLS 1.0, 1.1, 1.2, 1.3)
./testssl.sh -U ваш-домен.ru:443 # только известные именованные уязвимости
Результат проверки
На тестовом сервере с nginx и минимальной конфигурацией (только TLS 1.2 и 1.3, самоподписанный сертификат) полная проверка (-e -S) заняла около 20 секунд и показала:
| Проверка | Результат |
|---|---|
| Сертификат: subjectAltName | Отсутствует — браузеры будут жаловаться на несовпадение имени, даже если CN указан верно |
| Сертификат: цепочка доверия | Не ок (самоподписанный) — ожидаемо для тестового сервера без реального CA |
| Отзыв сертификата | Ни CRL, ни OCSP не указаны — для продуктивного сертификата это стоило бы поправить у вашего CA |
Протоколы (-p) |
TLS 1.0 и 1.1 не предлагаются (ок), TLS 1.2 и 1.3 предлагаются (ок) |
Известные уязвимости (-U) |
DROWN, LOGJAM, BEAST, Winshock, RC4 — не уязвим; LUCKY13 — потенциально уязвим, так как сервер предлагает шифры с режимом CBC |
Находка по LUCKY13 — не ложная тревога и не повод для паники одновременно: современные версии OpenSSL и большинства серверов уже содержат исправления на уровне реализации, которые закрывают практическую эксплуатацию, но сам факт, что CBC-шифры в списке есть, testssl.sh справедливо отмечает как потенциальный риск. Решение — убрать CBC-шифры из списка разрешённых, если приоритет шифров позволяет полностью перейти на AEAD-режимы (GCM, ChaCha20-Poly1305).
Порядок внедрения
- Запускайте после любого изменения конфигурации TLS (nginx, Traefik, балансировщика) — до того, как изменение попадёт на весь трафик.
- Сверяйте список шифров с актуальной рекомендацией (Mozilla SSL Configuration Generator в режиме «Modern» или «Intermediate» в зависимости от требований к совместимости).
- Включите в регулярную проверку наряду с мониторингом срока действия сертификата — конфигурация шифров тоже устаревает по мере появления новых уязвимостей.
- Не запускайте против чужих серверов без письменного разрешения, даже «чтобы посмотреть, как у конкурентов» — это несанкционированное сканирование.
Диагностика
| Симптом | Причина и что делать |
|---|---|
Fatal error: You need to install hexdump |
Не хватает системных утилит. Установите bsdextrautils (или bsdmainutils в более старых дистрибутивах) и dnsutils |
| Проверка зависает на DNS-запросах | Сервер без выхода в интернет не может проверить CAA и некоторые записи DNS. Используйте изолированный стенд только для функциональных проверок, не для полной картины |
| Много находок уровня INFO | Это справочная информация, не проблема. Фильтруйте вывод по WARN и выше при автоматическом разборе |
| Отчёт не совпадает с данными внешних сервисов (например, Qualys SSL Labs) | Разные инструменты обновляют базы уязвимостей не одновременно. Сверяйте оба при спорном результате |
Где это в модели зрелости
Материал относится к направлению «Тесты на проникновение» (материалы направления, карта зрелости). Уровень 2 требует регулярной технической проверки собственного периметра специализированными инструментами: testssl.sh даёт такую проверку для TLS конкретно, не заменяя при этом более широкий аудит внешней поверхности.
Как проверить
- Полная проверка (
-e -S) запускается после каждого изменения конфигурации TLS. - Находки уровня предупреждения и выше разобраны и либо исправлены, либо осознанно приняты с обоснованием.
- Устаревшие шифры (CBC-режим, RC4, экспортные шифры) не включены в список разрешённых там, где это не требуется для совместимости.
- Проверка применяется только к собственным серверам или по письменному разрешению владельца.
Источники
- Методика оценки уровня зрелости кибербезопасности компании, Группа Сбер: sberbank.ru.
- Документация testssl.sh: testssl.sh; исходный код: github.com/testssl/testssl.sh.


















