Как просмотреть цепочку сертификатов с помощью openssl

Я использую смесь Windows, Linux и Mac и заметил большие различия в том, как каждая ОС показывает детали сертификата с помощью инструментов по умолчанию, доступных в каждой.

Как Windows отображает сертификат подробности очень лаконичны. В частности, цепочка сертификатов. См. Пример на снимке экрана. Windows certificate view И снова в Windows, но с использованием инструмента certutil . (хорошо, это проверка pfx, но суть вы поняли). Windows certutil view Однако на Mac вот как отображается тот же сертификат в Keychain Access . Mac Keychain Access view Как видите, у него нет красивого иерархического представления, которое позволяет легко идентифицировать цепочку сертификатов, которую показывает Windows или certutil - по крайней мере, не для моих (возможно) нетренированных глаз. Я также не нашел способа показать цепочку сертификатов с помощью openssl , например, следующая команда openssl x509 -in certificate.crt -text не показывает иерархический цепочка - только эмитент.Так есть ли способ просмотреть цепочку сертификатов, будь то текст или изображение, с помощью openssl или собственных инструментов Mac?

[Изменить]: Я часто создаю файлы PFX со всей цепочкой сертификатов (без корня) для распространения в компании, в которой я работаю. В рамках этого процесса я дважды проверяю, верны ли сертификаты, которые я загрузил из выдающего ЦС, и что они находятся в правильном порядке, прежде чем передать их openssl для создания PFX. Чтобы быть ясным, я задаюсь вопросом, как просмотреть цепочку сертификатов, над которыми я работаю локально, на моем компьютере.

3
задан 8 April 2020 в 04:43
3 ответа

Используйте 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
4
ответ дан 4 January 2021 в 07:40

Я не могу помочь с другими инструментами Mac, включая родные. OpenSSL - это чистый продукт командной строки без графического интерфейса, хотя, конечно, вы можете использовать библиотечную часть (libcrypto) и написать свой собственный графический интерфейс.

Из командной строки openssl verify по возможности построит (и проверит) цепочку из / каждого листового сертификата, который вы ему даете, плюс промежуточные (-ые) из -недоверенных (которые может повторяться) и, возможно, больше промежуточных звеньев для корня (или якоря) в -доверенный или -CAfile и / или -CApath или хранилище доверенных сертификатов по умолчанию, которое обычно определяется вашей системой или сборкой, но может быть переопределено с помощью envvars. Если это не удается, выдается ошибка. В версии 1.1.0, если это успешно, и вы также указываете -show_chain , он отображает имена субъектов каждого сертификата -чего может быть или не хватить для их идентификации. Если у вас есть только один сертификат на каждый предмет, это довольно просто. Если у вас есть сертификаты для одного и того же предмета от разных эмитентов, достаточно взглянуть на имя следующего сертификата (кроме последнего, которое является самоподписанным, если вы также не используете -partial_chain ). Если у вас есть несколько сертификатов для одного и того же субъекта и издателя, это сложнее.

Я часто создаю PFX-файлы со всей цепочкой сертификатов (без корня) для распространения внутри компании, в которой я работаю. В рамках этого процесса я дважды проверяю, верны ли сертификаты, которые я загрузил из выдающего ЦС, и что они находятся в правильном порядке, прежде чем передать их в openssl для создания PFX.

За исключением части «запретить корень», вы можете отменить этот рабочий процесс. Вместо того, чтобы вручную создавать и проверять цепочку, а затем использовать ее, вы можете использовать openssl pkcs12 -export -chain и предоставить возможные сертификаты цепочки как (или в) -CAfile и / или -CApath . Это построит цепочку (фактически проверяя ее также как побочный эффект) и создаст PKCS12, содержащий только закрытый ключ и лист плюс действительную цепочку в случае успеха, но выдаст ошибку и не создаст никаких выходных данных в случае неудачи - т.е. если у вас нет действующей цепочки.

2
ответ дан 4 January 2021 в 07:40

Основываясь на ответе Дэйва Томпсона, это то, что вам нужно для проверки связки / цепочки сертификатов, состоящей из промежуточного звена и вашего собственного листа:

# split your certificate chain into individual certificates
$ csplit -z -f individual- bundle.pem '/-----BEGIN CERTIFICATE-----/' '{*}'
1977
1850

# verify the chain and show the info in the chain
$ openssl verify -show_chain -untrusted individual-01 individual-00
individual-00: OK
Chain:
depth=0: CN = foobar.example.com (untrusted)
depth=1: C = NO, O = Buypass AS-983163327, CN = Buypass Class 2 CA 2 (untrusted)
depth=2: C = NO, O = Buypass AS-983163327, CN = Buypass Class 2 Root CA
0
ответ дан 4 January 2021 в 07:40

Теги

Похожие вопросы