更新された回答:

更新された回答:

私は他のスタックの回答(これに関連する多数の回答があります)の指示に従って、openssl verify次のようにLet's Encrypt証明書を確認するコマンドを作成しました。

openssl verify -show_chain /etc/letsencrypt/live/mail.example.com/chain.pem /etc/letsencrypt/live/mail.example.com/cert.pem 

しかし、エラーのため失敗します。

CN = mail.example.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error /etc/letsencrypt/live/mail.example.com/cert.pem: verification failed
/etc/letsencrypt/live/mail.example.com/chain.pem: OK
Chain:
depth=0: C = US, O = Let's Encrypt, CN = R3 (untrusted)
depth=1: C = US, O = Internet Security Research Group, CN = ISRG Root X1

交換してfullchain.pemchain.pem失敗します。しかし、これらはすべてLet's Encryptが私に配布した証明書です!

私がここで何を見逃しているのでしょうか?

答え1

openssl verify -show_chain /etc/letsencrypt/live/mail.example.com/chain.pem /etc/letsencrypt/live/mail.example.com/cert.pem 

このコマンドは無効です。指定されたすべての証明書を互いに独立して確認しようとします。つまり、信頼チェーンを構築せずに最初の証明書を確認します。代わりに、コマンドは次のようにする必要があります。

openssl verify -untrusted chain.pem cert.pem

-untrusted中間証明書を発行します。ルート証明書 ISRG X1 は、最新システムのトラストストアから取得されます。それ以外の場合は、それを使用または-trusted提供する必要があります-CAfile

答え2

更新された回答:

@SteffenUllichの答えを正解としてマークしていますが、バンドルの内部コンテンツと彼が答えで参照している信頼ストアに関連する部分だけを拡張します。

Files Let Us Encrypt は以下を提供します。

間違い登場私の信頼チェーンが破損して欠落していることを示します。少なくとも証明書しかし、私がどのような資格を持っているかを知るまでは、私が何を見逃しているのかわかりませんでした。

そのため、Let's Encryptが提供したパスのファイルを調べたところ、バンドル/etc/letsencrypt/live/example.com/に次のものが含まれていることがわかりました。

証明書.pem: サーバーの証明書
チェーン.pem:暗号化しよう」R3「証明書+」ISRGルートX1(「中間証明書」)
フルチェーン.pem: "Chain.pem" + "Certificate.pem"
秘密鍵:秘密鍵です。公開鍵は次のようにエンコードされます。cert.pem

メモ:1行のコードを使用して上記の内容を確認してください。mail.example.comパスを自分の証明書の名前に変更します。

while openssl x509 -noout -text; do :; done < /etc/letsencrypt/live/mail.example.com/cert.pem

while openssl x509 -noout -text; do :; done < /etc/letsencrypt/live/mail.example.com/chain.pem 

while openssl x509 -noout -text; do :; done < /etc/letsencrypt/live/mail.example.com/fullchain.pem

信託店:

サーバー証明書を確認しようとする最初の試みに、チェーンを元に戻すことができる「信頼アンカー」がありません。

しかし、-CAfile指定しないと、Steffenが言ったように、openssl「信頼ストア」を解析してルート証明書を見つけて信頼チェーンを完成させます。

「Trust Store」をインストールするには、ディストリビューションで「ca-certificates」/「ca-certificates-bundle」パッケージを検索してください。

したがって、CA証明書はすでに存在しているため、元の回答で誤って述べたように、チェーンを正常に追跡するために他のものをダウンロードする必要はありません。実際にopenssl一致するものが見つかるまでトラストストア内のすべての項目を解析すると、検証が成功する可能性が高くなります。

信頼できる店舗の場所を見つけるには:

openssl version -d

Alpine Linuxでは次のようになります。/etc/ssl

結論として:

私が下したコマンドが間違った理由で成功したことを思い出させたSteffenに感謝します;-)。公平に言うと、openssl文書が少し良くなる可能性があります...

関連情報