Декодировщик сертификатов и PEM
Разбирает сертификаты X.509 и запросы на подпись из PEM — субъект, издатель, срок действия, альтернативные имена, расширения и отпечатки.
Вставьте PEM выше — он будет разобран здесь.
Что делает этот инструмент
Сертификат приходит блоком Base64 между двумя строками дефисов, и по виду о нём ничего не сказать. Этот инструмент его разбирает: кому и кем выдан, когда истекает, какие имена узлов покрывает, какой ключ содержит и какие расширения несёт. Вставьте целую цепочку — и каждый сертификат будет сверен со следующим.
Всё выполняется в вашем браузере. Здесь это важнее, чем для большинства инструментов: обычная альтернатива — вставить рабочий сертификат на чужой сервер или вспомнить нужный вызов openssl, чего почти никто не делает.
PEM — это лишь обёртка
Дефисы и Base64 — упаковка. Внутри DER, двоичная кодировка структуры под названием ASN.1, а метка между дефисами говорит, какую структуру ожидать:
CERTIFICATE выданный сертификат X.509 CERTIFICATE REQUEST запрос: то, о чём вы попросили УЦ PUBLIC KEY голый ключ, без привязанной личности PRIVATE KEY секретная половина, здесь отклоняется
Тот же сертификат может прийти и сырым DER в файле .cer или .crt — без дефисов и без Base64. Если файл открывается двоичным шумом, а не текстом, дело именно в этом: сначала закодируйте его в Base64 или экспортируйте как PEM.
Что на самом деле внутри сертификата
Основные поля одинаковы во всех когда-либо выданных сертификатах:
- Субъект — о ком сертификат. Для сайта сегодня это обычно только одно общее имя, и часто больше ничего.
- Издатель — удостоверяющий центр, который его подписал. Имя его субъекта дословно появляется как издатель всего, что он подписывает, и именно это делает возможной проверку цепочки.
- Срок действия — два абсолютных момента, всегда в UTC. Инструмент показывает оба и вычисляет остаток в вашем браузере, потому что машина, собравшая эту страницу, не знает, когда вы её читаете.
- Серийный номер — уникален у каждого издателя и служит идентификатором при отзыве сертификата.
- Алгоритм подписи — чем подписал издатель, например SHA-256 с ECDSA.
- Открытый ключ — тип и размер. У RSA это длина модуля в битах; у EC это свойство названной кривой, поэтому P-256 — всегда 256 бит.
Поле, которое ищут и больше не находят: общее имя субъекта — не то, что проверяют браузеры. Для сопоставления имени узла оно игнорируется уже много лет. Значение имеет расширение альтернативных имён, о нём ниже.
Расширения, которые решают, заработает ли он
Сертификат может нести сколько угодно расширений. Пять из них определяют, будет ли он вообще принят, и инструмент разбирает их полностью:
- Альтернативные имена субъекта — имена узлов, IP-адреса или адреса почты, для которых сертификат действителен. Именно это поле проверяют браузеры, и сертификат, среди альтернативных имён которого нет введённого вами, будет отклонён, каким бы верным ни было всё остальное.
- Базовые ограничения — является ли он удостоверяющим центром и сколько промежуточных сертификатов может стоять ниже. Конечный сертификат, помеченный как УЦ, или наоборот, ломает цепочку.
- Назначение ключа — для чего ключ вообще может применяться: подпись, шифрование ключа, подпись сертификатов. Почти всегда помечено критическим, а значит программа обязана отклонить сертификат, а не проигнорировать непонятное ей назначение.
- Расширенное назначение ключа — цель: сервер TLS, клиент TLS, подпись кода, почта. Сертификат без аутентификации сервера TLS не обслужит сайт, и это частая неожиданность у сертификатов, выпущенных для другого.
- Идентификаторы ключа субъекта и центра — короткие хеши, позволяющие программе быстро сопоставить сертификат с его издателем, когда несколько из них носят одно имя.
Любое другое расширение перечисляется с именем, если оно известно, с OID и с признаком критичности. Ничего не отбрасывается молча: расширение, которое инструмент не разбирает, всё равно показывается, чтобы было видно, что оно есть.
Цепочки и что здесь значит «непрерывна»
Сервер почти никогда не отправляет один сертификат. Он отправляет свой плюс промежуточные, нужные, чтобы дойти до корня, которому клиент уже доверяет. Порядок важен, а файл обычно называется fullchain.pem:
subject: example.com issuer: Example CA R3 блок 1, конечный subject: Example CA R3 issuer: Example Root блок 2, промежуточный
Корневой сертификат — возможный третий блок, и его обычно опускают, потому что у клиента он уже есть. Каждый сертификат называет своего издателя, и у следующего сертификата ниже это же имя должно стоять как субъект. Инструмент сравнивает эти два имени побайтово и сообщает, совпадают ли они. Это единственная связь, проверяемая офлайн, и она ловит два сбоя, объясняющих большинство проблем с цепочкой: пропущенный промежуточный сертификат и блоки, вставленные в неверном порядке.
У этих сбоев характерный симптом. Настольные браузеры часто прикрывают пропущенный промежуточный сертификат, подгружая его сами, поэтому сайт выглядит исправным на ноутбуке и отказывает на телефоне, в мобильном приложении или из curl. Если вы отлаживаете именно это, сперва вставьте сюда полную цепочку.
О чём инструмент не говорит
Он не проверяет подписи и не может. Чтобы убедиться, что сертификат действительно подписан своим издателем, нужен открытый ключ издателя; чтобы решить, стоит ли этому издателю верить, нужно хранилище доверия. Вставленный файл не даёт ни того, ни другого. Отзыв тоже проверить нельзя — для этого нужен сетевой запрос к УЦ.
Поэтому «цепочка непрерывна» здесь значит, что имена сходятся, а не что цепочка действительна. Цепочка поддельных сертификатов сошлась бы идеально. Проверка хороша для другого — она находит структурные ошибки в вашей собственной конфигурации, а именно на них и смотрят, вставляя цепочку в декодировщик.
Отпечатки и закрытые ключи
Отпечаток SHA-256 — это хеш всего сертификата, и именно его сверяют со значением, которое вам назвали, или с пином. Обратите внимание, что он идентифицирует: сертификат, а не ключ внутри него. Перевыпуск сертификата для того же ключа даёт другой отпечаток — обычная причина того, что пин ломается при обновлении. Отпечаток SHA-1 показан тоже, потому что старые инструменты и консоли всё ещё его печатают, — только для опознания; подписывать что-либо SHA-1 не должен.
Закрытые ключи распознаются и отклоняются. Ничто вставленное сюда не покидает браузер, так что отказ не про эту страницу: вставлять закрытый ключ в веб-форму — привычка, которую лучше не заводить, а следующий сайт, который об этом попросит, может работать не локально. Если нужно убедиться, что ключ и сертификат — пара, сравните локально открытый ключ из сертификата с выведенным из ключа.
Частые вопросы
- Говорит ли это, доверяют ли моему сертификату?
- Нет. Доверие зависит от хранилища доверия и проверки подписи, а ни то ни другое из вставленного файла невозможно. Инструмент сообщает, что сертификат говорит о себе сам, и сходятся ли имена в цепочке.
- Сайт работает в Chrome на ноутбуке, но падает на телефоне. Куда смотреть?
- Почти всегда пропущен промежуточный сертификат. Настольные браузеры часто подгружают недостающий сертификат сами и скрывают проблему, другие клиенты — нет. Вставьте сюда полную цепочку: если связь между двумя сертификатами показана как разорванная, там и пробел.
- Почему общее имя не совпадает с моим сайтом?
- Потому что проверяется не оно. Сопоставление имени узла идёт по расширению альтернативных имён, и так уже много лет. Посмотрите строку альтернативных имён: если имени узла там нет, сертификат его не покрывает, что бы ни говорило общее имя.
- Почему он не разбирает мой закрытый ключ?
- Намеренно. Ничто из вставленного не покидает браузер, но вставлять закрытые ключи в веб-страницы — привычка, которой стоит избегать, и этот инструмент отказывается ей учить. Сертификаты и запросы на подпись секретов не содержат и разбираются как обычно.
- Чем сертификат отличается от CSR?
- CSR — это то, что вы отправляете удостоверяющему центру: ваше имя субъекта, ваш открытый ключ и запрашиваемые расширения, подписанные вами. Сертификат — то, что приходит обратно, с именем самого УЦ в качестве издателя, окном действия и серийным номером. Инструмент разбирает и то и другое.
- Отправляется ли мой сертификат куда-нибудь?
- Нет. Разбор, декодирование и вычисление отпечатков выполняются в вашем браузере; ничто из вставленного не покидает ваше устройство.