OpenSSL:无法验证Experian URL的第一个证书

时间:2011-09-28 18:35:52

标签: ssl certificate openssl

我正在尝试使用OpenSSL客户端验证Ubuntu 10.10中与Experian的SSL连接。

openssl s_client -CApath /etc/ssl/certs/ -connect dm1.experian.com:443

问题是连接以验证返回代码关闭:21(无法验证第一个证书)。

我已经检查了证书列表,用于签署Experian的证书(VeriSign Class 3安全服务器CA-G3)包含在列表中。

/etc/ssl/certs/ca-certificates.crt 

但我不知道为什么它无法验证第一张证书。 提前谢谢。

整个回应可以在这里看到: https://gist.github.com/1248790

5 个答案:

答案 0 :(得分:91)

第一条错误消息告诉您有关此问题的更多信息:

  

验证错误:num = 20:无法获得本地颁发者证书

最终实体服务器证书的颁发证书颁发机构是

  

VeriSign Class 3安全服务器CA - G3

仔细查看您的CA文件 - 您将找到此证书,因为它是中间CA - 您发现的是类似命名的 G3公共主要CA VeriSign公司。

但是为什么其他连接会成功,但这个连接不成功?问题是服务器配置错误(请参阅使用-debug选项)。 “好”服务器在握手期间发送整个证书链,因此为您提供必要的中间证书。

但是失败的服务器只向您发送 最终实体证书,并且OpenSSL无法“即时”下载丢失的中间证书(通过解释权限信息可以实现)访问扩展)。因此,您尝试使用s_client失败,但如果您使用例如浏览相同的网址,则会成功FireFox(支持“证书发现”功能)。

解决问题的方法是在服务器端通过使服务器发送整个链来修复此问题,或者将缺少的中间证书作为客户端参数传递给OpenSSL。

答案 1 :(得分:35)

为浮雕的答案添加其他信息。

简而言之,证书链中的证书不正确。

例如,您的证书颁发机构很可能会为您提供3个文件。

  • your_domain_name.crt
  • DigiCertCA.crt#(或者您的证书颁发机构的名称)
  • TrustedRoot.crt

您很可能将所有这些文件合并为一个捆绑包。

-----BEGIN CERTIFICATE----- 
(Your Primary SSL certificate: your_domain_name.crt) 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
(Your Intermediate certificate: DigiCertCA.crt) 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
(Your Root certificate: TrustedRoot.crt) 
-----END CERTIFICATE-----

如果您创建了捆绑包,但使用旧版或不正确版本的中级证书(在我的示例中为DigiCertCA.crt),您将获得您所描述的确切症状。

重新下载证书颁发机构的所有证书并制作新的捆绑包。

答案 2 :(得分:10)

我遇到了在Amazon Elastic Load Balancer实例上安装签名证书的相同问题。

所有似乎都是通过浏览器(Chrome)找到的,但是通过我的java客户端访问该网站会产生异常javax.net.ssl.SSLPeerUnverifiedException

在我的ELB实例上安装证书时,我没有做的是提供“证书链”文件(参见https://serverfault.com/questions/419432/install-ssl-on-amazon-elastic-load-balancer-with-godaddy-wildcard-certificate

我们只是从签名机构发送了我们签名的公钥,因此我必须创建自己的证书链文件。使用我的浏览器的证书查看器面板,我在签名链中导出了每个证书。 (证书链的顺序很重要,请参阅https://forums.aws.amazon.com/message.jspa?messageID=222086

答案 3 :(得分:0)

这是您可以做的:-

Exim SSL证书

默认情况下,/ etc / exim.conf将使用cert / key文件:

/etc/exim.cert
/etc/exim.key

因此,如果您想在哪里设置文件,那就在哪里。

它们由exim.conf的选项控制:

tls_certificate = /etc/exim.cert
tls_privatekey = /etc/exim.key

中级证书

如果您具有CA根证书(ca捆绑包,链等),则将CA的内容添加到实际证书之后的exim.cert中。

一个好主意是确保您在出错时拥有其他所有内容的副本。

Dovecot和ProFtpd也应该正确读取它,因此dovecot不再需要ssl_ca选项。 因此,对于这两种情况,都无需对exim.conf或dovecot.conf(/etc/dovecot/conf/ssl.conf)

进行任何更改。

答案 4 :(得分:-1)

如果您使用的是MacOS,请使用:

sudo cp /usr/local/etc/openssl/cert.pem /etc/ssl/certs

此“找不到信任锚”错误消失后