首页 文章

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

提问于
浏览
55

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

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

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

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

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

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

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

3 回答

  • 23

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

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

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

    VeriSign Class 3安全服务器CA - G3

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

    但是为什么另一个连接成功,但这个连接没有?问题是服务器配置错误(请参阅使用 -debug 选项的自己) . "good"服务器在握手期间发送整个证书链,因此为您提供必要的中间证书 .

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

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

  • 8

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

    简而言之,证书链中存在不正确的证书 .

    例如,您的证书颁发机构很可能会给您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),您将获得您所描述的确切症状 .

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

  • 75

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

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

    我没做的是在我的ELB实例上安装证书时提供"certificate chain"文件(参见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

相关问题