我想,以验证在Ubuntu 10.10与OpenSSL的客户端的SSL连接百利。
openssl s_client -CApath /etc/ssl/certs/ -connect dm1.experian.com:443
问题是,在连接与验证返回码关闭:21(无法验证第一个证书)。
我检查证书列表和证书用来签署益百利(威瑞信3级安全服务器CA - G3)被列入名单。
/etc/ssl/certs/ca-certificates.crt
但我不知道为什么它是无法核实的第一个证书。 提前致谢。
整个响应可以在这里看到: https://gist.github.com/1248790
第一个错误信息,告诉你更多关于这个问题:
验证错误:NUM = 20:无法获取本地颁发者证书
最终实体服务器证书的证书颁发机构是
威瑞信3级安全服务器CA - G3
在您的CA文件仔细一看-因为它是一个中介CA你不会找到这个证书-你发现了什么是VeriSign公司的类似名称的 G3公立小学CA。
但为什么其他连接成功,但是这一次却没有? 问题是服务器配置错误(看到自己使用-debug
选项)。 “好”的服务器在握手期间发送整个证书链,从而为您提供必要的中间证书。
但是,发生故障的服务器发送你只有最终实体证书和OpenSSL是不能够下载“对飞”(这将有可能通过解释机构信息访问扩展)缺少中间证书。 因此,你的尝试失败使用s_client
但如果你浏览到使用如火狐(其中不支持“证书发现”功能)相同的URL但它也是成功的。
您的选择来解决这个问题要么通过使服务器在服务器端修复这个发送整个链条,也或失踪中间证书传递到OpenSSL的作为客户端的参数。
添加额外的信息,以浮雕的答案。
简单地说,有一个在您证书链不正确的证书。
例如,您的证书颁发机构将最有可能给你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在我的例子)的一个旧,或不正确的版本,你会得到你所描述的确切的症状。
- SSL连接似乎从浏览器中运行
- SSL连接从其他客户端失败
- 卷曲失败,错误:“ 卷曲:(60)SSL证书:无法获取本地颁发者证书 ”
- OpenSSL的的s_client.First -connect给出错误“校验错误:NUM = 20:无法获取本地颁发者证书”
从证书颁发机构重新下载所有证书,并作出新的捆绑。
我碰到了同样的问题来到亚马逊弹性负载均衡实例安装我的签名证书。
一切似乎都通过浏览器(Chrome)找到,但通过我的Java客户端访问该网站所产生的异常javax.net.ssl.SSLPeerUnverifiedException
我没有做的是提供“证书链”的文件在我的ELB实例安装我的证书时(见https://serverfault.com/questions/419432/install-ssl-on-amazon-elastic-load-balancer-with -godaddy通配符证书 )
我们只能从签署机构把我们的签名的公钥,所以我不得不建立自己的证书链文件。 用我的浏览器证书查看器面板我签名链中导出的每个证书。 (在重要的证书链的顺序,见https://forums.aws.amazon.com/message.jspa?messageID=222086 )