Проверка SSL API: сертификат, TLS, HSTS и оценка A+…F
GET /v1/redirekto/ssl подключается к хосту по TLS, читает сертификат и цепочку, проверяет заголовок HSTS и
ставит итоговую оценку от A+ до F со списком причин.
Параметры
Заголовок раздела «Параметры»| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
hostname |
string | да | имя хоста; протокол, путь и порт отбрасываются (https://seyka.ru/gid → seyka.ru) |
port |
integer | нет | TLS-порт, 1–65535, по умолчанию 443 |
curl -G https://proxy.seyka.ru/v1/redirekto/ssl \ -H "Authorization: Bearer $SEYKA_API_KEY" \ --data-urlencode "hostname=seyka.ru"{ "hostname": "seyka.ru", "grade": "A", "gradeReasons": ["No HSTS header"], "certificate": { "subject": "seyka.ru", "issuer": "R11", "validFrom": "Sep 1 08:14:02 2026 GMT", "validTo": "Nov 30 08:14:01 2026 GMT", "daysUntilExpiry": 59, "isExpired": false, "subjectAltNames": ["seyka.ru", "www.seyka.ru"], "fingerprint": "3A:9F:…:C4" }, "tls": { "version": "TLSv1.3", "cipher": "TLS_AES_256_GCM_SHA384", "bits": 256 }, "hsts": { "enabled": false }, "chainValid": true, "chainTrust": "trusted", "chainLength": 3, "chainTruncated": false, "queryTimeMs": 184}| Поле | Описание |
|---|---|
hostname |
проверенный хост (для кириллического — в punycode); hostnameDisplay — исходное написание |
grade |
итоговая оценка: A+, A, B, C, D или F |
gradeReasons |
причины оценки, строками на английском (см. ниже) |
certificate |
если сертификат получен: subject и issuer (CN, иначе O), validFrom/validTo, daysUntilExpiry, isExpired, subjectAltNames, fingerprint (SHA-256, если есть) |
tls |
если соединение установлено: согласованная версия протокола, шифр и длина ключа шифра в битах |
hsts |
если удалось проверить: enabled; при наличии заголовка — maxAge (секунды), includeSubDomains, preload |
chainValid |
цепочка проверяется — с учётом корневого сертификата Минцифры |
chainTrust |
trusted, russian-ca или untrusted (см. ниже) |
chainLength |
число сертификатов в цепочке |
chainTruncated |
true, если цепочка длиннее, чем её разбирают |
queryTimeMs |
время проверки, мс |
error |
причина, если проверить не удалось |
Доверие к цепочке и сертификаты Минцифры
Заголовок раздела «Доверие к цепочке и сертификаты Минцифры»chainTrust разделяет три случая:
trusted— цепочка проверяется по стандартному набору корневых сертификатов браузеров.russian-ca— цепочка не проверяется стандартным набором, но проверяется, если добавить корневой сертификат НУЦ Минцифры России (Russian Trusted Root CA). Сертификат исправен,chainValid: true, но большинство браузеров по умолчанию ему не доверяет. Так выглядят многие сайты наgov.ruи сайты, перешедшие на российские сертификаты, — это не «сломанная цепочка».untrusted— цепочка не проверяется даже с корнем Минцифры (самоподписанный сертификат, не тот хост, нет промежуточного сертификата), либо сертификат получить не удалось.
Как ставится оценка
Заголовок раздела «Как ставится оценка»Оценка F ставится сразу, если сертификата нет или он истёк, или сервер говорит по SSLv3. В остальных случаях
баллы снимаются за:
Причина в gradeReasons |
Что означает |
|---|---|
Expires within 7 days / Expires within 30 days |
скоро истекает |
Certificate chain invalid |
chainTrust: "untrusted" |
Chain relies on the Russian Trusted Root CA (Минцифры) — … |
chainTrust: "russian-ca", штраф небольшой |
Outdated TLS version |
TLS 1.0 или 1.1 |
Weak cipher |
ключ шифра короче 128 бит |
No HSTS header / HSTS max-age is low |
нет HSTS или max-age меньше года |
A+ требует TLS 1.3 и включённого HSTS без существенных замечаний. Если замечаний нет, в gradeReasons будет
Excellent configuration (A+) или Good configuration (A). Оценка F сразу приходит с одной
из причин: Certificate expired, Insecure SSL version, Connection failed, Connection timed out,
No certificate presented, Failed to parse certificate или Hostname could not be resolved; в пакете также
Invalid hostname format и Blocked by SSRF protection.
Пакетный запрос
Заголовок раздела «Пакетный запрос»POST /v1/redirekto/ssl принимает массив из 1–25 объектов {"hostname": "…", "port": 443} (port можно
не указывать) и возвращает массив результатов в том же порядке:
curl https://proxy.seyka.ru/v1/redirekto/ssl \ -H "Authorization: Bearer $SEYKA_API_KEY" \ -H "Content-Type: application/json" \ -d '[{"hostname": "seyka.ru"}, {"hostname": "example.com", "port": 8443}]'В пакете некорректный хост не отклоняет запрос: его результат придёт с "grade": "F" и полем error.
Общие правила — в обзоре Redirekto.
Поведение и ограничения
Заголовок раздела «Поведение и ограничения»- На подключение отводится 15 секунд, на проверку HSTS (запрос
HEAD /) — 5 секунд; не ответивший на HSTS сервер считается работающим без HSTS. - Проверяются только публичные хосты. IP-адрес в числовой записи (
2130706433,0x7f000001),localhost,.localи адреса внутренней сети вGETотклоняются кодом502, в пакете — результатом сerror; обычный публичный IP проверяется. Имя, которое указывает на внутренний адрес, выглядит как нерезолвящееся:Hostname could not be resolved. - Хост с недопустимыми символами в
GET— тоже502. Коды — на странице Ошибки.
Каждый хост — один вызов, пакет — по числу элементов; повтор из кэша бесплатен. Цены и окно кэша — в таблице цен.