У меня есть три сертификата в цепочке:
- root.pem
- intermediate.pem
- john.pem
Когда я проверяю их, используя, openssl x509 -in [filename] -text -noout
они выглядят нормально, root.pem выглядит так, как будто он самоподписан (Issuer == Subject), и субъект каждого сертификата является эмитентом следующего, как и ожидалось.
И действительно, я могу проверить цепочку до промежуточного сертификата:
$ openssl verify -CAfile root.pem root.pem
root.pem: OK
$ openssl verify -CAfile root.pem intermediate.pem
intermediate.pem: OK
Однако john.pem не работает:
$ openssl verify -CAfile root.pem -CAfile intermediate.pem john.pem
john.pem: C = CL, [...redacted data...]
error 2 at 1 depth lookup:unable to get issuer certificate
Насколько мне известно, это означает, что openssl не может найти эмитента для файла middle.pem. Что не имеет смысла, так как root.pem действительно является издателем для middle.pem.
Что мне не хватает?
Редактировать: я первоначально опубликовал ответ о том, что root.pem и промежуточный.pem должны быть объединены в один файл, а затем следует использовать этот файл в качестве параметра для -CAfile
. Это НЕПРАВИЛЬНО, потому что это неявно доверяет промежуточному каналу, как указывает Йоханнес Пилле . Прочитайте ссылку, которую он разместил в моем удаленном ответе: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html
источник
Ответы:
Вам не нужно связывать два сертификата вместе, чтобы проверить их.
Если у вас есть следующие три сертификата:
И вы доверяете только root.pem, тогда вы проверите
john.pem
следующую команду:Если у вас было много промежуточных звеньев, вы могли бы просто цепочку
-untrusted intermediate2.pem -untrusted intermediate3.pem ...
источник
openssl
бы их забрали и проверили. Есть ли причина, по которой это происходит? Например, тот, кто подписал сертификат пользователя, подписал его не Intermediate, а рутом, или что-то еще?untrusted
флаг один раз. Многократное использование ненадежного флага не работает.-untrusted
вариантов (в любом порядке), так и один-untrusted
параметр, указывающий на связку промежуточных продуктов (объединенных в любом порядке). Это с OpenSSL версии 1.1.1c в Ubuntu.То, что сказал @antiduh, работает только для одного случая промежуточного сертификата для меня. Добавление более одного
-untrusted intermediate.pem
в команду, кажется, не работает. Не уверен, что это связано с конкретной версией openssl.Согласно документу openssl: [ https://linux.die.net/man/1/verify]
В моем случае у меня есть такая цепочка:
root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem
кошкой промежуточный. промежуточный и промежуточный2.pem в один файл промежуточный-chain.pem и затем запустить
openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pem
работает для меня.Также кажется, что расширение in ca нужно установить,
basicConstraints = CA:true
иначе я все еще сталкиваюсь с сообщением об ошибке openssl verify.источник