Почему я не могу проверить эту цепочку сертификатов?

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

  • корень.pem
  • промежуточный.pem
  • джон.пем

Когда я проверяю их с помощью openssl x509 -in [filename] -text -noout, они выглядят нормально, root.pem выглядит так, как будто он самозаверяющий (Эмитент == Субъект), и субъектом каждого сертификата является Эмитент следующего, как и ожидалось.

И действительно, я могу проверить цепочку вплоть до промежуточного сертификата:

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

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


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