10

У меня есть три сертификата в цепочке:

  • 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 не может найти эмитента для промежуточного уровня. Что не имеет смысла, так как root.pem действительно является издателем для middle.pem.

Что мне не хватает?


Редактировать: я первоначально опубликовал ответ о том, что root.pem и промежуточный.pem должны быть объединены в один файл, а затем следует использовать этот файл в качестве параметра -CAfile . Это НЕПРАВИЛЬНО, потому что это неявно доверяет промежуточному каналу, как указывает Йоханнес Пилле . Прочитайте ссылку, которую он разместил в моем удаленном ответе: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html

1 ответ1

10

Вам не нужно связывать два сертификата вместе, чтобы проверить их.

Если у вас есть следующие три сертификата:

  • root.pem - хранит самоподписанный сертификат.
  • middle.pem - хранит сертификат, подписанный root.pem
  • john.pem - хранит сертификат, подписанный middle.pem

И вы доверяете только root.pem, тогда вы можете проверить john.pem с помощью следующей команды:

openssl verify -CAfile root.pem -untrusted intermediate.pem john.pem

Если у вас было много промежуточных звеньев, вы могли бы просто -untrusted intermediate2.pem -untrusted intermediate3.pem ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .