Методология SSL/TLS Grade — v1.0
Кратко.
Рейтинг SSL/TLS A–F складывается из 6 взвешенных категорий: валидность сертификата (10 баллов), целостность цепочки доверия (8 баллов), запас до истечения (6 баллов), hostname match (5 баллов), версия протокола с бонусом за TLS 1.3 / 1.2 (8 баллов) и сила шифров + perfect-forward-secrecy (8 баллов). Source of truth — src/ssl.php. Один fail в валидности или цепочке ограничивает оценку до C даже при идеале остального — broken chain это реальный user-facing failure, его арифметика не должна замазывать.
1. Валидность сертификата — 10 баллов
- 10 pts — сертификат валиден (выдан доверенным CA, не истёк, не отозван через OCSP/CRL)
- 6 pts — истекает в течение 14 дней, в остальном валиден (warning)
- 0 pts — истёк, отозван или self-signed в production
Жёсткий cap: 0 баллов здесь означает оценку не выше D независимо от других категорий.
2. Целостность цепочки доверия — 8 баллов
- 8 pts — полная цепочка: leaf → intermediate(s) → trusted root, всё отдаётся сервером
- 4 pts — требуется AIA fetching для полной цепочки (legacy клиенты без AIA fail)
- 0 pts — broken chain или отсутствуют intermediates
3. Запас до истечения — 6 баллов
- 6 pts — осталось > 30 дней
- 4 pts — 14–30 дней
- 2 pts — 7–14 дней (срочно обновлять)
- 0 pts — < 7 дней
Пороги совпадают с дефолтами SSL warning в мониторах (ssl_warning_days=14, ssl_critical_days=3) — рейтинг согласован с тем, на что срабатывают алерты.
4. Hostname match — 5 баллов
- 5 pts — запрашиваемый hostname присутствует в CN или SAN list
- 0 pts — mismatch (браузеры дают NET::ERR_CERT_COMMON_NAME_INVALID)
5. Версия протокола — 8 баллов
- 8 pts — установлен TLS 1.3 (современный, обязательный PFS, нет downgrade-уязвимых шифров)
- 5 pts — установлен TLS 1.2 (приемлем по Mozilla Modern profile)
- 2 pts — TLS 1.1 (deprecated, браузеры warn)
- 0 pts — TLS 1.0 / SSL v3 / SSL v2 (запрещены по RFC 8996)
6. Сила шифров + PFS — 8 баллов
- 4 pts — AEAD-шифр (AES-GCM, ChaCha20-Poly1305) — без CBC, без RC4
- 4 pts — perfect forward secrecy через ECDHE или DHE key exchange
Буквенная оценка
| Баллы | Оценка | Примечания |
|---|---|---|
| 40–45 | A+ | TLS 1.3 + PFS + валиден + хороший запас |
| 35–39 | A | TLS 1.2+ ok, все категории pass |
| 28–34 | B | минор (скоро истекает или несовершенная цепочка) |
| 20–27 | C | cap здесь если fail в §1 или §2 |
| 10–19 | D | много деградаций |
| 0–9 | F | нет HTTPS или опасная конфигурация |
Источники
- Mozilla Server-Side TLS Guidelines
- RFC 8446 — TLS 1.3
- RFC 8996 — Deprecating TLS 1.0 and TLS 1.1
- NIST SP 800-52 Rev. 2 — TLS Implementation Guidelines
- SSL Labs Rating Guide (reference for grading approach)
Версионирование
v1.0 — опубликовано 2026-05-05. Зеркалит src/ssl.php на HEAD 2026-05-05. Веса категорий — оценочные, основаны на browser-error blast radius (валидность + цепочка максимально, потому что их fail даёт hard browser error; сила шифров рядом с протоколом, потому что оба могут быть тихо слабыми без warning). Будущие изменения весов поднимут версию.