15

SSL中间证书的坑

 3 years ago
source link: https://blog.vimge.com/archives/other/ssl-fullchain.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
首页 > 其他, 移动端 > 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加4(必填)请输入两数相加的结果。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK