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


16

チェーンに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がIntermediate.pemの発行者を見つけることができないことを意味します。root.pemは実際にintermediate.pemの発行者なので、これは意味がありません。

何が欠けていますか?


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


回答を削除してください。危険な誤報です。
ヨハネスPille

1
@JohannesPille完了、情報ありがとうございました
Jong Bor

実際にそれを行うための称賛と迅速な反応。
Johannes Pille、

回答:


14

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

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

  • root.pem-自己署名証明書を格納します。
  • medium.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 ...


この。唯一の正しい答えです。
ヨハネスPille

バンドルに中間CAとルートCAの両方の証明書がある場合、opensslそれらを取得して証明書を確認すると思いました。これが発生する理由はありますか?同様に、ユーザー証明書に署名した人は、中間ではなくルートなどで署名しましたか?
FilBot3

この回答の最後の文は間違っています。多くの中間ファイルがある場合は、それらを1つの中間ファイルに連結してから、untrustedフラグを1回使用する必要があります。untrustedフラグを複数回使用しても機能しません。
AjaxLeung

1
@AjaxLeung-複数の-untrustedオプション(任意の順序)または-untrusted中間体のバンドル(任意の順序で連結)を指す単一オプションの両方が機能します。これは、UbuntuのOpenSSLバージョン1.1.1cに対応しています。
garethTheRed

ええ、私は間違っていました。コメントを書いたとき、私はちょうど正しいファイルを使用していなかったと思います。
AjaxLeung

3

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

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

-信頼できないファイル

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

私の場合、私は次のようなチェーンを持っています: root.pem -> intermediate1.pem -> intermediate2.pem -> john.pem

catにより、intermediate1.pemとIntermediate2.pemを単一の中間チェーン.pemファイルにしてから、openssl verify -CAfile root.pem -untrusted intermediate-chain.pem john.pemworksを実行してください。

また、設定する必要があるCAの拡張機能のようです。basicConstraints = CA:trueそうしないと、openssl verifyレポートエラーが発生します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.