チェーンに3つの証明書があります。
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
確認するために2つの証明書を一緒に分類する必要はありません。
次の3つの証明書がある場合:
そして、あなたはroot.pemだけを信頼し、それからjohn.pem
次のコマンドを使用:
openssl verify -CAfile root.pem -untrusted intermediate.pem john.pem
それはあなたが多くの中間体を持っていた、あなたは単にチェーンすることができた-untrusted intermediate2.pem -untrusted intermediate3.pem ...
@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検証レポートエラーが発生します。