如何手动验证 CA 签名的 SSL 证书

如何手动验证 CA 签名的 SSL 证书

我正在使用的服务正在刷新其 SSL 证书,现在我与其服务的连接失败。在更改之前(即更改前 1 小时),它们正常运行。

他们的旧服务器证书和新服务器证书应该由 Verisign 签名。我该如何手动验证证书?

通过该工具运行可以openssl x509自动完成吗?

使用openssl s_client连接到他们的服务器,我可以看到他们在 SSL 握手期间发送的证书。通过带有选项的 x509 工具运行它-text,我得到了以下发行者行:

Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=Terms of use at https://www.verisign.com/rpa (c)10, CN=VeriSign Class 3 International Server CA - G3

并且该Subject: CN=值与我连接的主机名匹配。

我连接 s_client 时收到的投诉是(我省略了主题行以免提及服务名称):

verify error:num=20:unable to get local issuer certificate
verify return:1
verify error:num=27:certificate not trusted
verify return:1
verify error:num=21:unable to verify the first certificate
verify return:1

有人能告诉我如何找出为什么我的工具不信任该证书吗?

答案1

我倾向于快速通过curl -Iv https://www.example.com。curl 将转储出相关的 SSL 位(并将使用它手头上的 CA 列表)。

如果您需要手动执行更多操作,则可以openssl verify使用正确的选项运行,特别是 -CApath 选项:

$ openssl verify --help
usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check] [-engine e] cert1 cert2 ...

我猜你的问题是服务器没有发布中间证书包。看看https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR657(或者更具体地说,来自 Verisign 的有关如何安装证书的电子邮件说明)。

答案2

这是因为您在命令行上没有使用 或-CApath。这些参数告诉 openssl 在目录或特定文件中查找受信任的 CA 文件的位置。-CAfile

用它:

openssl s_client -CAfile /etc/ssl/ca-bundle.pem -connect www.bofa.com:443
CONNECTED(00000003)
depth=3 C = US, O = "VeriSign, Inc.", OU = Class 3 Public Primary Certification Authority
verify return:1
depth=2 C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2006 VeriSign, Inc. - For authorized use only", CN = VeriSign Class 3 Public Primary Certification Authority - G5
verify return:1
depth=1 C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = Terms of use at https://www.verisign.com/rpa (c)06, CN = VeriSign Class 3 Extended Validation SSL CA
verify return:1
depth=0 1.3.6.1.4.1.311.60.2.1.3 = US, 1.3.6.1.4.1.311.60.2.1.2 = Delaware, businessCategory = Private Organization, serialNumber = 2927442, C = US, postalCode = 60603, ST = Illinois, L = Chicago, street = 135 S La Salle St, O = Bank of America Corporation, OU = Network Infrastructure, CN = www.bankofamerica.com
verify return:1

没有它:

openssl s_client -connect www.bofa.com:443CONNECTED(00000003)
depth=3 C = US, O = "VeriSign, Inc.", OU = Class 3 Public Primary Certification Authority
verify error:num=19:self signed certificate in certificate chain
verify return:0

产生重大影响。

相关内容