web-dev-qa-db-ja.com

この証明書チェーンを検証できないのはなぜですか?

チェーンに3つの証明書があります。

  • root.pem
  • 中間.pem
  • john.pem

openssl x509 -in [filename] -text -nooutを使用してそれらを調べると、問題はないように見えます。root.pemは自己署名(Issuer == Subject)のように見え、各証明書の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が中間の.pemの発行者を見つけることができないことを意味します。 root.pemは実際にintermediate.pemの発行者であるため、これは意味がありません。

何が欠けていますか?


編集:私は最初に、root.pemとIntermediate.pemを1つのファイルに連結し、このファイルを-CAfileのパラメーターとして使用する必要があると回答しました。 Johannes Pille が指摘しているように、これは中間体.pemを暗黙的に信頼しているため、これは間違っています。私が削除した回答に彼が投稿したリンクを読む: https://mail.python.org/pipermail/cryptography-dev/2016-August/000676.html

16
Jong Bor

確認するために2つの証明書を一緒に分類する必要はありません。

次の3つの証明書がある場合:

  • 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 ...

14
antiduh

@antiduhが言ったことは、私にとって単一の中間証明書の場合にのみ機能します。コマンドに複数の-untrusted intermediate.pemを追加しても機能しないようです。特定のopensslバージョンに関連しているのかはわかりません。

Opensslドキュメントによると:[ https://linux.die.net/man/1/verify]

-信頼できないファイル

信頼されていない証明書のファイル。ファイルには複数の証明書が含まれている必要があります

私の場合、次のようなチェーンがあります:root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

catによって中間1.pemと中間2.pemを1つの中間チェーン.pemファイルにしてから、openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pemを実行するとうまくいきます。

また、CAの拡張機能でbasicConstraints = CA:trueを設定する必要があるようです。それ以外の場合でも、openssl検証レポートエラーが発生します。

3
Yang Xu