我遇到了问题并试图调试它 . 我们购买了Verisign证书 . 当我们使用时:
openssl> s_client -connect myweb.com:443 -showcerts
SSL握手永远不会完成,最后我们会看到错误:
Verify return code: 19 (self signed certificate in certificate chain)
它显示3个 ---BEGIN/END CERTIFICATE---
标签 . 链中的两个证书是Verisign签署的,但其中一个是自签名的 .
-
如果有人可以解释这个自签名证书如何出现在CA签名证书中?
-
这个错误是
19 (self signed certificate in certificate chain)
良性吗?如果没有,可能导致什么? -
客户端在受信任存储区中具有CA证书,但自签名证书没有任何内容 . 你认为这可能导致问题吗?如果是,我该怎么做:
-
如何从链证书中删除自签名证书,只留下链中的2个CA签名证书?
-
在客户端信任存储上添加此自签名证书?
5 回答
CA颁发的根证书只是自签名证书(可以反过来用于颁发中间CA证书) . 除了在许多浏览器或操作系统信任锚中默认导入它们之外,它们没有太多特别之处 .
虽然浏览器和一些工具被配置为默认情况下在位置中查找受信任的CA证书(其中一些可能是自签名的),但据我所知,
openssl
命令不是 .因此,任何提供完整证书链的服务器,从其最终实体证书(服务器证书)到根CA证书(可能具有中间CA证书),都将在链中具有自签名证书:根CA .
openssl s_client -connect myweb.com:443 -showcerts
没有't have any particular reason to trust Verisign'的根CA证书,因为它's self-signed you'将获得“证书链中的自签名证书” .如果你的系统有一个默认值信任的证书捆绑的位置(我认为在RedHat / Fedora上的
/etc/pki/tls/certs
和Ubuntu / Debian上的/etc/ssl/certs
),你可以配置OpenSSL将它们用作信任锚,例如:听起来好像缺少中间证书 . 截至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/index?page=content&id=AD146
Intermediate CA Certificates
以下是VeriSign SSL证书安装检查器的链接:https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR1130
输入您的URL,单击“测试此Web服务器”,它将告诉您中间证书颁发机构是否存在问题 .
关于服务器可以向客户端提供根证书与否,从RFC-5246“传输层安全性(TLS)协议版本1.2”文档中提取,它说:
关于术语“MAY”,摘自RFC-2119“最佳实践”,说:
总之,根可以位于服务器在握手中提供的证书路径中 .
实用 .
考虑一下,不是在导航器用户术语中,而是在具有有限互联网访问权限的军事区域中的服务器上的传输工具上 .
在传输时扮演客户端角色的服务器从服务器接收所有证书路径 .
应检查链中的所有证书是否可信,包括根 .
检查这一点的唯一方法是在传输时间中将根包含在certs路径中,并与先前声明的'trusted'本地副本进行匹配 .
当您看到“
Verify return code: 19 (self signed certificate in certificate chain)
”时,服务器实际上是在尝试使用自签名证书(客户端永远无法验证),或者OpenSSL没有't got access to the necessary root but the server is trying to provide it itself (which it shouldn' t因为它's pointless - a client can never trust a server to supply the root corresponding to the server'自己的证书) .再次,添加-showcerts将帮助您诊断哪些 .