证书链不完整,导致浏览器无法信任你安装的证书
优采云 发布时间: 2021-06-13 01:22
证书链不完整,导致浏览器无法信任你安装的证书
安装证书后,仍然无法访问。
重新整理思路,安卓浏览器和qq等都能正常访问https,说明证书配置正确。只有微信访问异常。百度后发现其他人也遇到过类似问题,说证书链不完整,导致浏览器无法信任你安装的证书。
证书链实际上是在描述证书的签名链接。比如A给B发证书,B给C发证书,那么我们手里就有了证书C。当证书链不完整时,即没有说明我们手中的证书C是谁使用的,所以浏览器不会认为你的证书是可信授权证书。
二. 如何验证证书链的完整性? 1.如果是外网可以访问,输入域名验证SSL证书链是否完整
2.如果是内网,可以使用命令验证:
openssl s_client -connect x.x.x.x:443
// s_client为一个SSL/TLS客户端程序,与s_server对应,它不仅能与s_server进行通信,也能与任何使用ssl协议的其他服务程序进行通信。
// -connect host:port:设置服务器地址和端口号。如果没有设置,则默认为本地主机以及端口号4433。
连接内网IP后:
0、1 是证书链中每一级证书的序号。 0 是网站 使用的要验证的证书。其CN对应网站域名。
在每个序列号之后,以s开头的行表示证书,以i开头的行表示证书的颁发者。
0 的 CN 收录一个英文域名。其发行人为 TrustAsia Technologies, Inc./OU=Symantec Trust Network/OU=Domain Validated SSL/CN=TrustAsia DV SSL CA
1 的证书是 0 的颁发者。而 1 本身是由另一个证书 VeriSign Class 3 Public Primary Certification Authority 颁发的。
所以这么一看,浏览器以为我知道1的发行者。安装包里提到了VeriSIign。签名正确,验证正确,所以信任1。那么1发出的0也应该信任。所以这个网站是可以信任的。
但是,如果网站在配置的时候只在crt文件中收录了自己,而没有收录可以被浏览器内置数据验证的完整证书链,则可能会被浏览器拒绝。例如
openssl s_client -connecttouko.moe:443
---
Certificate chain
0 s:/CN=touko.moe
i:/C=CN/O=WoSign CALimited/CN=WoSign CA Free SSL CertificateG2
---
只有0组。请注意,第 s 行的 touko.moe 是由第 i 行的 WoSign CA Free SSL CertificateG2 颁发的。没了。
这就是这个坑最神奇的地方:这个时候浏览器是否验证失败还不确定。有两种情况:
A.自从安装浏览器以来,我从未见过这种情况。那么验证就会失败。
B.如果浏览器之前看到并验证过i,则验证成功。
通常管理员会去证书颁发机构的https网站购买证书,浏览器会验证,然后所有验证成功的中间证书都会缓存起来,以备日后使用。当管理员(错误地)配置了他的网站并去浏览测试时,他根本不会遇到任何问题。因为他的浏览器已经识别了这个中间证书。
总结:
通过证书链验证发现我们内网的证书链是完整正确的。
三.微信自己的问题
再整理思路,用安卓微信访问其他https网站如百度、csdn等,都是空白页面。如果是我们的证书链有问题,那么其他网站证书链应该没问题,为什么?不能参观?这样证书链问题就彻底解决了。
由于不是本地证书问题,也不是我们服务器的证书链问题,QQ和浏览器都可以正常访问,ios也正常,说明fiddler端没问题。这时候就怀疑是微信本身的问题了。 ?
好的,首先考虑为什么fiddler可以抓取https包?
Fiddler 巧妙地伪造了 CA 证书。我(fiddler)自己编造了一个私钥和公钥,作为签名证书发给浏览器,提交给服务器,服务器根据公钥签名返回。 (提琴手)伪造的钥匙自然可以解锁。
所以,你知道,我知道,大家都知道,为了防止软件被fiddler捕获,开发者会内置SSL证书,直接用自己的证书进行签名和加密,而不是使用系统的CA证书。您将被伪造证书欺骗信息。自然,fiddler 将无法使用自己的证书捕获软件数据。