Декодировщик сертификатов и PEM

Разбирает сертификаты X.509 и запросы на подпись из PEM — субъект, издатель, срок действия, альтернативные имена, расширения и отпечатки.

Ввод 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 — это то, что вы отправляете удостоверяющему центру: ваше имя субъекта, ваш открытый ключ и запрашиваемые расширения, подписанные вами. Сертификат — то, что приходит обратно, с именем самого УЦ в качестве издателя, окном действия и серийным номером. Инструмент разбирает и то и другое.
Отправляется ли мой сертификат куда-нибудь?
Нет. Разбор, декодирование и вычисление отпечатков выполняются в вашем браузере; ничто из вставленного не покидает ваше устройство.