![OpenSSL 一直告诉我“无法获取本地颁发者证书”](https://linux22.com/image/718752/OpenSSL%20%E4%B8%80%E7%9B%B4%E5%91%8A%E8%AF%89%E6%88%91%E2%80%9C%E6%97%A0%E6%B3%95%E8%8E%B7%E5%8F%96%E6%9C%AC%E5%9C%B0%E9%A2%81%E5%8F%91%E8%80%85%E8%AF%81%E4%B9%A6%E2%80%9D.png)
我正在使用 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)
因此,我已经验证证书是好的,位置没有改变,我没有手动更改任何配置。
我想也许我应该重建 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
我也尝试过-CAfile
,直接指向ca-bundle.crt
我知道具有正确证书的(1.0.2k-fips 使用它们没有问题),仍然没有变化。
我不知道为什么它无法获取我的证书,并且想知道这个问题是否在我更改证书之前就已经存在(我检查了更改证书后它们是否正常工作,可能 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'