SSL握手失败 - 一个verisign链证书 - 包含两个CA签名证书和一个自签名证书

cur*_*one 40 ssl openssl handshake

我遇到了问题并尝试调试它.我们购买了Verisign证书.当我们使用时:

openssl> s_client -connect myweb.com:443 -showcerts
Run Code Online (Sandbox Code Playgroud)

SSL握手永远不会完成,最后我们会看到错误:

Verify return code: 19 (self signed certificate in certificate chain)
Run Code Online (Sandbox Code Playgroud)

它显示3个---BEGIN/END CERTIFICATE---标签.链中的两个证书是Verisign签署的,但其中一个是自签名的.

  1. 如果有人可以解释这个自签名证书如何出现在CA签名证书中?

  2. 这个错误是否19 (self signed certificate in certificate chain)良性?如果没有,可能是什么原因造成的?

  3. 客户端在受信任存储中具有CA证书,但自签名证书没有任何内容.你认为这可能导致问题吗?如果是,我该怎么做:

    1. 如何从链证书中删除自签名证书,只留下链中的2个CA签名证书?
    2. 在客户端信任存储上添加此自签名证书?

Bru*_*uno 72

CA颁发的根证书只是自签名证书(可以反过来用于颁发中间CA证书).除了在许多浏览器或操作系统信任锚中默认导入它们之外,它们没有太多特别之处.

虽然浏览器和某些工具被配置为默认情况下在位置中查找可信CA证书(其中一些可能是自签名的),但据我所知,openssl命令不是.

因此,任何提供完整证书链的服务器,从其最终实体证书(服务器证书)到根CA证书(可能具有中间CA证书),都将在链中具有自签名证书:根CA .

openssl s_client -connect myweb.com:443 -showcerts没有任何特别的理由相信Verisign的根CA证书,并且因为它是自签名的,您将获得" 证书链中的自签名证书 ".

如果您的系统具有默认情况下受信任的证书包的位置(我认为/etc/pki/tls/certs在RedHat/Fedora和/etc/ssl/certsUbuntu/Debian上),您可以配置OpenSSL以将它们用作信任锚,例如:

openssl s_client -connect myweb.com:443 -showcerts -CApath /etc/ssl/certs
Run Code Online (Sandbox Code Playgroud)

  • 我不认为OSX默认有一个,因为它依赖于Keychain.您可以进入Keychain Access,选择"System Roots"中的所有证书(除了那些证据除外),右键单击并将所有项目导出到PEM文件中,然后使用`-CAfile`(而不是`-CApath `)指向该文件. (5认同)
  • 我仍然收到`验证错误:num=19:证书链中的自签名证书` (4认同)
  • OS X的-CApath是什么? (2认同)
  • @Bruno 我如何在 Windows 中获得 tursted 认证?他们在注册表中。我无法获得 -CAfile 和 -CApath (2认同)

Bre*_*ski 8

听起来好像缺少中间证书. 截至2006年4月,VeriSign颁发的所有SSL证书都要求安装中级CA证书.

可能是您没有在服务器上加载整个证书链.某些企业不允许其计算机下载其他证书,导致无法完成SSL握手.

以下是有关中间链的一些信息:
https://knowledge.verisign.com/support/ssl-certificates-support/index page = content& id =
AR657 https://knowledge.verisign.com/support/ssl-certificates-support /指数?页=含量&ID = AD146

中级CA证书


小智 5

关于服务器是否可以向客户端传递根证书,从 RFC-5246“传输层安全(TLS)协议版本 1.2”文档中提取,它说:

certificate_list
这是证书的序列(链)。发件人的证书必须位于列表中的第一位。随后的每个证书必须直接证明其前一个证书。 由于证书验证要求根密钥独立分发,因此假设远程端必须已经拥有它才能在任何情况下验证它,则指定根证书颁发机构的自签名证书可以从链中省略。

关于术语“MAY”,摘自 RFC-2119“最佳当前实践”,内容如下:

5.MAY
这个词,或者形容词“OPTIONAL”,意味着某项确实是可选的。一个供应商可能会选择包含该项目,因为
特定市场需要它,或者因为供应商认为
它增强了产品,而另一供应商可能会省略相同的项目。
不包含特定选项的实现必须
准备好与包含该选项的另一个实现进行互操作
,尽管功能可能会减少。同样,包含特定选项的实现
必须准备好与
不包含该选项的另一个实现进行互操作(当然,该
选项提供的功能除外。)

总之,根可能位于服务器在握手中传递的证书路径处。

实际用途。
想想,不是用导航器用户的术语,而是用位于互联网访问有限的军事区域的服务器上的传输工具。
服务器在传输中扮演客户端角色,从服务器接收所有证书路径。
应检查链中的所有证书(包括根证书)是否可信。
检查这一点的唯一方法是在传输时将根包含在证书路径中,并与之前声明为“受信任”的本地副本进行匹配。