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


77

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

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

问题在于连接关闭时返回验证返回码:21(无法验证第一个证书)。

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

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

但是我不知道为什么它不能验证第一个证书。提前致谢。

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

Answers:


111

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

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

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

VeriSign 3类安全服务器CA-G3

在您的CA文件仔细一看-你会不会因为它是一个中介CA发现该证书-你发现了什么是一个类似的名为VeriSign公司的G3公立小学CA。

但是,为什么另一个连接成功,而这个连接没有成功?问题是服务器配置错误(使用该-debug选件请自己查看)。“良好”服务器在握手期间发送整个证书链,因此为您提供了必要的中间证书。

但是发生故障的服务器向您发送最终实体证书,而OpenSSL无法“即时”下载丢失的中间证书(这可以通过解释Authority Information Access扩展名来实现)。因此,您的尝试使用失败,s_client但是如果使用例如FireFox(它确实支持“证书发现”功能)浏览到相同的URL,则尝试将成功。

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


5
您可以使用-CAfile /etc/ssl/certs/ca-certificates.crt
encc 2013年


Apache配置中不同虚拟主机之间的冲突也可能是一个问题。尝试这样的方法来帮助发现问题: grep -riE 'virtualhost|server(name|alias)' /etc/httpd
vijay

43

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

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

例如,您的证书颁发机构将很可能为您提供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),则将得到您所描述的确切症状。

从证书颁发机构重新下载所有证书,然后重新打包。


1
***这是我的确切问题。我做了这个digitalocean.com/community/tutorials/…*** 然后使用以下*** digitalocean.com/community/tutorials/…从apache切换到nginx… 一切都很好。但是现在Facebook调试器给了我:Curl错误:SSL_CACERT SSL证书问题:无法获取本地颁发者证书***问题:我该如何从您的证书颁发机构重新下载所有证书,并根据情况重新打包?
alemac852

11

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

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

我没有做的是在我的ELB实例上安装证书时提供了一个“证书链”文件(请参阅/server/419432/install-ssl-on-amazon-elastic-load-balancer-with -godaddy-wildcard-certificate

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


+1表示从浏览器下载的想法。我还发现,对于Verisign,您可以在ssltools.websecurity.symantec.com/checker/#certChecker中检查SSL ,他们会为您提供下载链接。
HDave 2014年

0

您可以执行以下操作:-

进出口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 Root证书(ca捆绑包,链等),则将CA的内容添加到实际证书之后的exim.cert中。

最好确保所有其他地方的副本,以防万一出错。

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


-1

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

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

在此信任锚未找到错误消失后

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.