Я использую смесь Windows, Linux и Mac и заметил большие различия в том, как каждая ОС показывает детали сертификата с использованием инструментов по умолчанию, доступных в каждой.
Информация о сертификате отображается в Windows очень лаконично. В частности, цепочка сертификатов. См. Для примера снимок экрана. И здесь он снова в Windows, но с помощью
certutil
инструмент. (хорошо, это проверка pfx, но суть вы поняли). Однако на Mac вот как он показывает тот же сертификат в
Keychain Access
. Как видите, у него нет красивого иерархического представления, которое позволяло бы легко идентифицировать цепочку сертификатов, которую Windows или
certutil
показывает - по крайней мере, на мой (возможно) неподготовленный взгляд. Я также не придумал, как показать цепочку сертификатов с помощью openssl
либо, например, следующая команда openssl x509 -in certificate.crt -text
не показывает иерархическую цепочку - только эмитент. Итак, есть ли способ просмотреть цепочку сертификатов, будь то текст или изображение, используя openssl
или родные инструменты Mac?
[Edit]: я часто создаю файлы PFX со всей цепочкой сертификатов (без корня) для распространения внутри компании, в которой я работаю. В рамках этого процесса я дважды проверяю, что сертификаты, которые я загрузил из выдающего ЦС, верны и находятся в правильном порядке, прежде чем передать их в openssl
чеканить PFX. Чтобы быть ясным, я задаюсь вопросом, как просмотреть цепочку сертификатов, над которыми я работаю локально, на моем компьютере.
Использовать showcerts
:
openssl s_client -showcerts -connect www.serverfault.com:443
Вывод с удалением некоторой информации для краткости:
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = *.stackexchange.com
verify return:1
---
Certificate chain
0 s:/CN=*.stackexchange.com
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
*REMOVED*
-----END CERTIFICATE-----
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
*REMOVED*
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=*.stackexchange.com
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: X25519, 253 bits
Я не могу помочь с другими инструментами Mac, включая родные. OpenSSL - это чистый продукт командной строки без графического интерфейса, хотя, конечно, вы можете использовать библиотечную часть (libcrypto) и написать свой собственный графический интерфейс.
Из командной строки openssl verify
будет, если возможно, построить (и проверить) цепочку из / каждого листового сертификата, который вы ему даете, плюс промежуточные звенья из -untrusted
(которые могут повторяться) и, возможно, более промежуточные звенья к корню (или якорю) в -trusted
или -CAfile
и / или -CApath
или хранилище доверенных сертификатов по умолчанию, которое обычно определяется вашей системой или сборкой, но может быть переопределено с помощью envvars. Если это не удается, выдается ошибка. В 1.1.0 вверх, если это удалось, и вы также указываете -show_chain
, он отображает имена субъектов каждого сертификата - которых может быть или недостаточно для их идентификации. Если у вас есть только один сертификат на предмет, это довольно просто. Если у вас есть сертификаты по одному и тому же предмету от разных эмитентов, посмотрите на следующий имя сертификата (кроме последнего, которое является самоподписанным, если вы также не используете -partial_chain
) достаточно. Если у вас есть несколько сертификатов по одному предмету и эмитенту сложнее.
Я часто создаю PFX-файлы со всей цепочкой сертификатов (без корня) для распространения внутри компании, в которой я работаю. В рамках этого процесса я дважды проверяю, верны ли сертификаты, которые я загрузил из выдающего ЦС, и что они находятся в правильном порядке, прежде чем передать их openssl для создания PFX.
За исключением части «запретить корень», вы можете полностью изменить этот рабочий процесс. Вместо того, чтобы вручную создавать и проверять цепочку, а затем использовать ее, вы можете использовать openssl pkcs12 -export -chain
и предоставить возможные сертификаты цепочки как (или в) -CAfile
и / или -CApath
. Это построит цепочку (фактически проверив ее также как побочный эффект) и создаст PKCS12, содержащий только закрытый ключ и лист плюс допустимая цепочка в случае успеха, но выдает ошибку и не создает никаких выходных данных в случае неудачи, т.е. если у вас нет действительной цепочки.