OpenSSL が「ローカル発行者証明書を取得できません」と表示し続けます

OpenSSL が「ローカル発行者証明書を取得できません」と表示し続けます

私は CentOS を使用しており、OpenSSL 1.0.2k-fips がインストールされています。また、ここで概説されている HTTP2 インストールの一部として、バージョン 1.1.0g をビルドしてインストールしました。https://www.tunetheweb.com/performance/http2/

1.1.0g を問題なく使用していましたが、最近証明書を更新したところ、CA を検証しようとすると証明書が失われるようです。CA ファイルの場所は変更されておらず、1.0.2k-fips バージョンでは問題ないようです。しかし、1.1.0g では次のようなエラーが表示されます。

Verify return code: 20 (unable to get local issuer certificate)

したがって、証明書が適切であり、場所が変更されておらず、手動で構成を変更していないことを確認しました。

1.1.0g を再構築したほうがよいかもしれないと考えましたが、何も変わりません。コマンド-CApathのオプションをopenssl次のように使用してみました (1.0.2k-fips が使用するのと同じディレクトリを使用)。

echo | /usr/local/ssl/bin/openssl s_client -connect example.com:443 -CApath /etc/pki/tls

また、正しい証明書 (1.0.2k-fips は問題なくそれらを使用します) があることがわかっている-CAfileを直接ポイントしても試しましたが、それでも変化はありませんでした。ca-bundle.crt

なぜ証明書が取得されないのか全く分かりません。証明書を変更する前からこの問題は既に存在していたのではないかと考えています (証明書を変更した後に動作するかどうかを確認しましたが、その時点で 1.1.0g が既に壊れていた可能性があります)。

システムで実行された更新によってリンクまたはファイルが壊れている可能性があると考えていますが、証明書の内容がすべて正常に見える場合はどこを確認すればよいですか? または、1.1.0g には、指摘する必要がある他の証明書が不足していますか?

答え1

s_client に証明書チェーンを表示させるには、次のようにします-showcerts

openssl s_client -connect example.com:443 -showcerts </dev/null

これは証明書チェーンから始まり、サーバー証明書と TLS 接続に関するその他の情報を表示します。これらすべてが、問題がどこにあるかを把握するのに役立ちます。問題は CA ではなく、中間証明書にある可能性があります。

出力をフィルタリングすることで、証明書チェーンの概要を簡単に取得できます。

openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null |
sed -e '1,/Certificate chain/d' -e '/BEGIN CERTIFICATE/,/END CERTIFICATE/d' -e '/---/,$d'

関連情報