Чому я не можу перевірити цю ланцюжок сертифікатів?


16

У мене є три сертифікати в ланцюжку:

  • root.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 не в змозі знайти емітента для intermediate.pem. Що не має сенсу, оскільки root.pem справді є емітентом для intermediate.pem.

Що я пропускаю?


Редагувати: Спочатку я опублікував відповідь, в якій говорилося, що root.pem і intermediate.pem повинні бути об'єднані в один файл, а потім слід використовувати цей файл як параметр -CAfile. Це WRONG, оскільки це неявно довіряє intermediate.pem, як вказує Йоханнес Піл . Прочитайте посилання, яке він опублікував у моїй видаленій відповіді: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html


Будь ласка, видаліть свою відповідь, це небезпечна дезінформація!
Йоганнес

1
@JohannesPille Готово, дякую за інформацію
Чон Бор

Кудо за те, що насправді це робив, і швидка реакція.
Йоганнес

Відповіді:


14

Вам не доведеться котити два сертифікати разом, щоб перевірити їх.

Якщо у вас є такі три сертифікати:

  • root.pem - зберігає самопідписаний сертифікат.
  • intermediate.pem - зберігає сертифікат, підписаний root.pem
  • john.pem - зберігає сертифікат, підписаний intermediate.pem

І ви довіряєте тільки root.pem, тоді ви б це підтвердили john.pemза допомогою наступної команди:

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

Якби у вас було багато проміжних продуктів, ви могли просто ланцюжок -untrusted intermediate2.pem -untrusted intermediate3.pem ...


Це. Єдина правильна відповідь.
Йоганнес

Я думав, що якщо у мене будуть як проміжні, так і кореневі сертифікати CA в комплекті openssl, я забрав би їх і перевірив сертифікати. Чи є причина, що це станеться? Мовляв, особа, яка підписала сертифікат користувача, не підписала його з Проміжним, а з корінням, чи щось?
FilBot3

Останнє речення цієї відповіді неправильне. Якщо у вас є багато проміжних продуктів, вам потрібно об'єднати їх в один проміжний файл, а потім використати untrustedпрапор один раз. Використання ненадійного прапора кілька разів не працює.
AjaxLeung

1
@AjaxLeung - працює як багато -untrustedваріантів (у будь-якому порядку), так і один -untrustedваріант, що вказує на пакет проміжних продуктів (об'єднаних у будь-якому порядку). Це з OpenSSL версії 1.1.1c на Ubuntu.
garethTheRed

Так, я помилився Я думаю, що я просто не використовував потрібні файли під час написання коментаря.
AjaxLeung

3

те, що сказав @antiduh, працює лише для одного проміжного випадку сертифіката для мене. Додавши декілька -untrusted intermediate.pemв команду, здається, не виходить. Не впевнений, що це стосується конкретної версії opensl.

Відповідно до документа opensl: [ https://linux.die.net/man/1/verify]

-надійний файл

Файл ненадійних сертифікатів. Файл повинен містити кілька сертифікатів

У моєму випадку я маю ланцюжок на кшталт: root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

by cat intermediate1.pem & intermediate2.pem в єдиний файл intermediate-chain.pem, а потім запустити openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pemпрацює для мене.

Також здається, що розширення в ca вам потрібно встановити, basicConstraints = CA:trueінакше я все ще зустрічаю openssl перевірити помилку звіту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.