首页 > 其他, 移动端 > SSL中间证书的坑

SSL中间证书的坑

启用SSL已经有段时间了,使用的是 Let’s Encrypt 免费证书,除了需要每季度更新一次维护外,一切正常使用,包括WEB和iOS,因为历史原因Android还没有完全切到HTTPS协议,也正因为漏掉Android这一块无意间避过了中间证书的问题,一直到微信小程序开发过程中发现接口访问报 request fail 错误,由此填坑的过程揭开SSL中间证书的面纱

先来认识一下中间证书

中间证书,其实也叫中间CA(中间证书颁发机构,Intermediate certificate authority, Intermedia CA),对应的是根证书颁发机构(Root certificate authority ,Root CA)。为了验证证书是否可信,必须确保证书的颁发机构在设备的可信 CA 中。SSL的验证机制是由一级一级追溯验证,当前CA不可信则向上层CA验证,直到发现可信或没有可信CA为止,注意有时候Intermedia CA也有可能在设备的可信CA中,这样不用一直追溯到Root CA,即可认证完成。

根证书,必然是一个自签名的证书,“使用者”和“颁发者”都是相同的,所以不会进一步向下检查,如果根 CA 不是可信 CA ,则将不允许建立可信连接,并提示错误。

一般Root CA是要求离线保存的,如果要签发证书也是通过人工方式签发,这样能最大程序保证Root CA的安全,而Intermedia CA则相对宽松,允许在线签发证书的,这样方便高效,安全性灵活,即便通过Root CA签发的Intermedia CA发生意外泄露,也可以通过Root CA进行撤销

中间证书的运行机制

一张标准的证书,都会包含自己的颁发者名称,以及颁发者机构访问信息: Authority Info Access ,其中就会有颁发者 CA 证书的下载地址。如:

Authority Info Access
Access Method=证书颁发机构颁发者 (1.3.6.1.5.5.7.48.2)
Alternative Name:
URL=http://gn.symcb.com/gn.crt

客户端自动完成中间证书下载
一般情况下系统可以通过URL自行完成中间证书的下载,如Windows、iOS、OSX(macOS Sierra)都支持这种方式,但Android和Java客户端不支持自行下载,还有一种情况就是无法访问根证书地址的情况如内网

服务器端推送中间证书

除了通过证书中URL下载中间证书外,还可以通过服务器向客户端主动推送中间证书,这样即可兼容系统或客户端不支持自动下载中间证书的情况

至此微信小程序接口报错的问题原因即暴露出来了,既然不是内网就不存在无法访问中间证书下载地址的问题,所以只可能是系统或客户端不支持自动下载中间证书,其实在大家完成证书部署之后应该检测一下这样更保险,推荐一下赛门铁克家的工具

https://cryptoreport.websecurity.symantec.com/checker

下面是使用工在中间人证书部署前后的检测结果
CA证书配置错误

缺少中间证书

证书正确

含完整证书连证书

认识证书
Let’s Encrypt 工具生成的证书有以下几个文件
域名.key     证书密钥
域名.cer      域名证书
fullchain.cer    含中间证书的,完整证书链

之前只用到域名证书,没有注意fullchain.cer,结果导致微信小程序接口地址请求错误,切换使用fullchain.cer后恢复正常

分类: 其他, 移动端 标签: ,
  1. 本文目前尚无任何评论.

=4加5(必填)请输入两数相加的结果。