У меня есть три сертификата в цепочке:
- 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