Я пытаюсь построить цепочку (или просто получить ее откуда-то) из сертификата, используя OpenSSL, предпочтительно с использованием интерфейса командной строки.
Я нашел какой-то пример в Интернете, но застрял вНа вопрос «Где я могу получить сертификат CA от сертификата?»
Например, проверьте этот веб-сайт команда openssl, таблица , вы найдете команду
openssl s_client -showcerts -host example.com -port 443
, чтобы получить цепочку. Вы можете попробовать это, используя www.google.com
вместо example.com
. Выход должен дать вам цепочку. Другие веб-сайты используют ту же команду, рано или поздно ...
Итак, я не могу получить цепочку напрямую из сертификата, но мне нужно где-то попросить цепочку.
Теперь моя проблема: где я могу получить имя хоста, куда я могу отправить свой запрос на цепочку?
Я посмотрел два сертификата.
- stackexchange.com
- google.com
Используя OpenSSL
, я могу попросить Эмитента с помощью команды
openssl x509 -in certFile -noout -issuer
и я получаю соответственно
- эмитент = C = США, O = давайте шифровать, CN = давайте шифровать полномочия X3
- эмитент = C = US, O = Google Trust Services,CN = GTS CA 1O1
Честно говоря, я не знаю, что делать с этими результатами ....
Затем исследуем с помощью команды
openssl x509 -text -in certFile
Я обнаружил расширения AIA:
- CA Issuers - URI: http://cert.int -x3.letsencrypt.org /
- 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 и создаю цепочку.