朋友碰到了一个问题,就是访问配置了SSL数字证书的服务器,报告签发者不可信。但是证书的确是花钱从正规CA机构购买的,那么哪里出错了呢? 经过检查发现证书文件缺少了中间证书。这里就列了补全中间证书的步骤。
检查是否缺少中间证书
正常来讲,我们在Windows上双击一个证书文件,发现“证书路径”里都是至少有3层的:
- 根证书
- 中间证书
- 服务器证书
而浏览器或操作系统里内置的信任列表,只包含了市面上CA机构的根证书。当然是CA机构向浏览器或操作系统付钱的结果。那么中间证书就需要服务器来提供出来,这样浏览器或操作系统可以一层一层的校验证书的合法性。
我们看一个例子,下图是我的服务器的证书文件:
可以看到这个文件里,只有服务器证书,缺少了中间证书。
如何补全中间证书
我发现最好用的工具还是Windows,双击这个证书文件,在“证书路径”里选择中间证书,点击下边的”查看证书(V)”按钮,就打开了中间证书。然后在新的窗口中选择”复制到文件(C)“,使用Base64编码的X509格式(.CER) 保存到独立的一个文件中。这个文件就是我们需要的中间证书。
把这个中间证书的内容,复制到刚刚我们服务器证书的后边,重新上传到服务器上配置,即可解决不可信问题。
彩蛋-下边是给技术人员看的
如果我想做一个自动补全中间证书的工具,那么应当怎么做呢?
其实,证书文件里已经描述了中间证书的下载路径,Windows双击证书文件,在”详细信息“里的授权信息访问里有个URL,使用这个URL下载即可获得中间证书。
只要这么一层一层的找上去,就能逐级找到根证书。
小知识-为啥要证书分级
首先,CA要保护自己的根证书。一般根证书为了避免泄露,都是要求被离线保存的。所以不能使用根证书在线签发服务器证书。
其次,CA使用不同的中间证书区分不同的产品,比如DV、OV、EV。不同安全级别的证书具有不同的赔付标准,当然费用也不一样。
最后,为了兼容老旧的浏览器或操作系统,根证书也会被另外的比较老的其他根证书签名,这样在一些老旧的浏览器上会看到四到五层的证书链。
小知识-为啥没有补全中间证书也可以正常访问
一般情况下,如果服务器没有提供中间证书,浏览器或操作系统会自动下载中间证书来验证服务器证书,包括Windows、Mac、IOS等,但是安卓除外。
另外如果是离线访问证书的话,离线的服务器一般无法连接互联网,故而只能使用服务器提供中间证书这种方式了。