При создании сертификата вручную вы часто делаете что-то вроде этого, добавляя промежуточный сертификат к своему собственному (а иногда и к корневому ЦС):
# Concatenate intermediate certificate and root certificate
cat ${CERTNAME}.single.pem DigiCertSHA2ExtendedValidationServerCA.pem DigiCertHighAssuranceEVRootCA.pem > ${CERTNAME}.pem
Недавно я добавил промежуточный сертификат к сертификат, выданный другим ЦС, и, конечно же, Chrome предупредил меня, что он не может проверить сертификат. Интересно, как я могу узнать это заранее, используя, например, openssl
или keytool
, чтобы гарантировать, что я присоединяю только те сертификаты к цепочке, которые имеют смысл.
При создании " человекочитаемый дамп "промежуточного сертификата Buypass. Я получаю следующее:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
1b:78:1c:6d:5e:34:ce:1f:77
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = NO, O = Buypass AS-983163327, CN = Buypass Class 2 Root CA
Validity
Not Before: Mar 25 12:17:10 2019 GMT
Not After : Oct 26 09:16:17 2030 GMT
Subject: C = NO, O = Buypass AS-983163327, CN = Buypass Class 2 CA 2
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:9c:ab:67:c6:96:4b:0d:0f:91:d2:ec:ca:cc:33:
2b:f3:72:fc:0e:7f:b9:4e:84:a9:0f:7d:73:aa:26:
...
(используя openssl x509 -in my-cert.pem -noout -text
)
Поле Тема
в этом промежуточном сертификате совпадает с полем Issuer
в моем собственном сертификате, поэтому я предполагаю, что мог бы извлечь его и grep, но хотя этого, вероятно, будет достаточно в 99% случаев, этого не произойдет кажется мне правильным :) Есть ли какая-то подпись, которую я могу использовать для проверки "происхождения" между ними?
Да, есть два расширения, которые могут вам помочь. Идентификатор ключа субъекта и Идентификатор ключа органа.
Первый должен основываться на открытом ключе сертификата, в который встроено это расширение. Последний должен основываться на открытом ключе, которым подписал сертификат, то есть ЦС. RFC 5280 определяет альтернативные методы генерации этих значений, но главное, чтобы они были уникальными для сертификата.
Таким образом, если у вас есть сертификат с идентификатором ключа центра сертификации (AKI) 1234567890abcdef
, он будет подписан ЦС, чей идентификатор ключа субъекта (SKI) также 1234567890abcdef
. ]. Вы можете использовать это, чтобы проследить цепочку.