OpenSSL 一直告诉我“无法获得本地颁发者证书”

kas*_*mir 5 centos openssl ssl-certificate

我正在使用 CentOS,它安装了 OpenSSL 1.0.2k-fips,并且我已经构建并安装了 1.1.0g 版,作为此处概述的 HTTP2 安装的一部分: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)
Run Code Online (Sandbox Code Playgroud)

所以,我已经验证了证书是好的,位置没有改变,我没有手动更改任何配置。

我想也许我应该重建 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
Run Code Online (Sandbox Code Playgroud)

我也试过-CAfile,直接指向ca-bundle.crt我知道有正确证书的那个(1.0.2k-fips 使用它们没有问题),仍然没有变化。

我不知道为什么它不会获取我的证书,并且想知道在我更改证书之前这个问题是否已经存在(我检查了它们在更改后是否工作,可能 1.1.0g 已经在那一点)。

我认为这可能是由于在系统上执行的更新,破坏了某些链接或文件,但是当证书内容看起来都正常时,去哪里查看?或者 1.1.0g 是否缺少我需要指出的其他/更多证书?

And*_*man 2

您可以让 s_client 向您显示证书链-showcerts

openssl s_client -connect example.com:443 -showcerts </dev/null
Run Code Online (Sandbox Code Playgroud)

这将从证书链开始,然后显示有关服务器证书和 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'
Run Code Online (Sandbox Code Playgroud)