0%

本地证书校验

背景

为了防止Fiddler抓包,实现更进一步的安全。以及,如果后台证书变更,能够更方便地实现替换。

证书获取

assets目录下内置默认的crt证书,第一次使用App的话,则sp中还没有证书,就判断assets中的证书有效期,如果有效,先使用该crt,并且同时请求后台获取最新的证书。

由于本地有crt证书,并且自带有tag,后台根据tag判断是否需要下发新的证书;请求后台证书这个接口,通过114或者119获取到ip,之后将host设置到请求的header中,(为什么要这样做,是因为有些服务会校验host是否正确的;此外,ip直连之后,只能直达主机,如果一个主机承载多个服务,没有host没法区分服务)这样以ip直连的方式请求该接口。注意,不管后台有没有证书返回,这里都可以返回服务器当前时间,防止用户更改手机时间,不过这种情形其实更改手机时间是没什么用的。

新证书验证

请求下来的证书会存在sp中,下次启动App时,从sp中读取缓存证书,如果有效,则使用sp缓存的证书。

校验过程: 首先,新证书自己先一级级验证通过,如果自己都验证不通过,则肯定非法;其次,验证本地证书和新证书是否包含当前请求的h-o-s-t 来确认证书验证是否合法;最后,通过比本地证书和当前请求返回的证书的公钥,只要新证书中含有旧证书中的某个公钥,就说明通过验证;

当然,你也许会说如果换了CA厂家,那么可能新证书里面压根就不包含旧的证书中的公钥了,那我只能说,如果换了新证书了必然要求强制升级了。

谢谢你的鼓励