Получить цепочку или сертификат CA из сертификата x509 с помощью OpenSSL CLI - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь построить цепочку (или просто получить ее откуда-то) из сертификата, используя OpenSSL, предпочтительно с использованием интерфейса командной строки.

Я нашел какой-то пример в Интернете, но застрял вНа вопрос «Где я могу получить сертификат CA от сертификата?»

Например, проверьте этот веб-сайт команда openssl, таблица , вы найдете команду

openssl s_client -showcerts -host example.com -port 443

, чтобы получить цепочку. Вы можете попробовать это, используя www.google.com вместо example.com. Выход должен дать вам цепочку. Другие веб-сайты используют ту же команду, рано или поздно ...

Итак, я не могу получить цепочку напрямую из сертификата, но мне нужно где-то попросить цепочку.

Теперь моя проблема: где я могу получить имя хоста, куда я могу отправить свой запрос на цепочку?

Я посмотрел два сертификата.

  1. stackexchange.com
  2. google.com

Используя OpenSSL, я могу попросить Эмитента с помощью команды

openssl x509 -in certFile -noout -issuer

и я получаю соответственно

  1. эмитент = C = США, O = давайте шифровать, CN = давайте шифровать полномочия X3
  2. эмитент = C = US, O = Google Trust Services,CN = GTS CA 1O1

Честно говоря, я не знаю, что делать с этими результатами ....

Затем исследуем с помощью команды

openssl x509 -text -in certFile

Я обнаружил расширения AIA:

  1. CA Issuers - URI: http://cert.int -x3.letsencrypt.org /
  2. CA Issuers - URI: http://pki.goog/gsr2/GTS1O1.crt

Хорошо, в первом примере я наконец могу использовать команду

openssls_client -showcerts -host http://cert.int -x3.letsencrypt.org / -port 443

но с Google я не знаю, как скачать цепочку, используя openssl ... .Я мог бы использовать wget возможно, но у меня не тот формат, который я получаю из stackexchange ...

Итак, наконец, мои вопросы:

  • Как следуетработать с этими различиями?
  • Есть ли лучший способ получить цепочку из сертификата, не спрашивая у эмитента ЦС?
  • Эмитент ЦС - это расширение от AIA, иЯ думаю, что это не обязательно, могу ли я на это положиться?
  • Как я могу получить CA Issuer, используя OpenSSL, не анализируя сам вывод? (что-то вроде openssl x509 -caIssuer -in certFile)

PS: В самом конце я пытаюсь добиться проверки сертификата, прохождения всей цепочки и проверки всех OCSP или CRL для каждого сертификата. в цепочке ... Если у вас есть рабочий пример на C ++ или просто используете OpenSSL CLI, я был бы очень признателен:)

РЕДАКТИРОВАТЬ:

Что ясейчас я создаю цепочку самостоятельно.

Используя расширения AIA, я получаю URI CA Issuer, скачиваю сертификат CA Issuer (при необходимости преобразую в PEM) и так далее, пока не найдуCA Эмитент больше. Тогда, вероятно, это корневой CA.

После этого я вручную собираю все pem и создаю цепочку.

...