关于 APP 预埋检查策略优化

简介: APP 预埋检查策略优化的建议

背景

在 APP 海量时代,很多APP 都进行过证书预埋检查功能设置。当预埋的APP 更新服务器端证书时,发现部分客户出现证书更新之后,APP 无法正常通信等情况出现。经过技术排查发现由于APP 中进行了证书预埋检查,并预埋了服务器证书(公钥)文件等信息,导致证书更新后新证书无法通过 APP 预埋检查验证,提示网络中止连接。

如果你的 APP 做了以下的预埋,都会存在隐患:

1.在APP 中预埋了服务器证书(公钥)做证书检查

2.在APP 中预埋了服务器证书的指纹值做证书检查

3.在APP 中预埋了中级证书文件或者根证书文件做证书检查

4.在APP 中预埋了中级证书指纹值或者根证书指纹值做证书检查

证书预埋检查隐患

1.服务器证书(公钥)存在有效期限制,目前最高 3 年有效期,未来 CA/B 组织会逐渐缩短证书最长生命周期。如果将服务器证书进行 APP 预埋证书检查,当服务器证书因为生命周期终止导致证书更新时,经过预埋的 APP 会出现无法正常通信等情况。
2.根证书和中级证书也会存在失效、策略变更或者过期,如果将根证书或者中级证书进行

APP 预埋,一旦根证书和中级证书发生了更新,经过预埋的 APP 会出现无法正常通信等情况。虽然在大多数情况下,检查机制能够防御中间人攻击。因为当黑客窃听通信时,他提供
的拦截证书多为自签名证书,TrustManager 不能识别这个证书,于是拒绝 HTTPS 连接。但是,一旦预埋的这张证书由于证书生命周期的终止,触发服务器端进行证书更新替换机制时, APP 应用端将无法验证请求证书的有效性,从而导致业务中断。

建议

为了 APP 业务灵活性和可续性,天威建议使用系统默认的系统信任库来做证书认证, 并且开启域名强验证来增强 APP 安全性。

对服务器证书域名进行强校验(仅供开发人员参考):
图片1.png

实现 HostnameVerifier 的 verify()方法:
图片2.png

由于 SSL 证书本身存在生命周期基本属性,加上中级 CA 和根证书存在可变更的因素, 一旦应用中添加了证书检查功能之后,在后期业务发展过程中势必会带来不可预估的影响。
建议在安全策略允许的情况下取消证书检查功能,改为使用系统自带信任库方式验证,并配合使用其他比如域名强验证,使用 Proguard 混淆代码,使用编译库等手段来确保APP 安全。

TLS/SSL 证书链

保证通信安全至少要使用 HTTPS 协议,也就是说使用安全传输层协议(TLS)或是它的前身安全套接层协议(SSL)加密的通信。

SSL 证书链结构关系
公网可信 SSL 证书(至少)包括三个证书:

1、根证书:这是由证书认证机构(CA)颁发的,也就是一个可以确保整个通信时安全的值得信任的组织。

2、中级证书:一个根证书下有多个中级证书。它们建立服务器证书和根证书的信任桥梁,是连接服务器证书和根证书的证书链,由根证书签名的证书。
3、服务器证书:服务器证书是绑定最终请求域名的证书,为最终的加解密证书文件。

证书检查
1、Certificate Pinning
其实 Certificate Pinning 是 OkHttp 实现的一个类似于 HPKP 的技术,目的是为了使客户端可以有主动的信任CA 的权利,它的工作原理就是使用预先设置的证书指纹和服务器传过来的证书链中的证书指纹进行匹配,只要有任何一对指纹匹配成功,则认为是一次合法的连接,否则禁止本次链接。
2、预埋证书
把数字证书以文件或者字符串的形式写在本地,在 SSL 握手的时候用本地预埋的证书和服务器传过来的证书进行匹配,如果匹配不成功则禁止本次通信。
Certificate Pinning 和预埋证书做法的比较(以 OkHttp 为例)
3、预埋证书的写法
首先定义一个类实现类实现 X509TrustManager 接口,实现对客户端证书链的校验方法和服务端证书链的校验方法,不写的话表示不做任何校验,默认信任所有证书链中的证书。
图片3.png

由于证书存在生命周期和可变性,证书更新和证书链变更都会导致这种预埋失效,从而带来业务中断风险。

Certificate Pinning 的写法

范例代码:
图片4.png

pinner 就是证书指纹,sha256 表示的是哈希值得一种算法,pinner 也可以是 sha1/* , 具体 pinner 要根据购买证书所支持的配置,证书指纹可以在证书详细信息中点击查看。在SSL 握手的时候,会检查配置中的指纹和服务端传过来的证书证的指纹是否相匹配,只要有一个指纹匹配,则进行下一步,否则直接抛出异常,禁止本次连接。

证书在使用过程中会存在不可避免的证书续期和替换更新,每次操作都会导致证书的指纹发现不可逆的变化,一旦使用了 Certificate Pinning 方式,都会在证书更新之后带来业务中断等情况。

目录
相关文章
|
Linux Shell 网络安全
【Azure 应用服务】如何来检查App Service上证书的完整性以及在实例中如何查找证书是否存在呢?
【Azure 应用服务】如何来检查App Service上证书的完整性以及在实例中如何查找证书是否存在呢?
284 3
|
11月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
1661 139
|
搜索推荐 开发工具 UED
apptrace 三大策略,助力电商 App 在 618 突围​
随着“618”电商大促预售开启,各大平台投入百亿流量与现金争夺用户。然而,网络购物市场增量空间趋于饱和,电商App亟需突破曝光、拉新与转化瓶颈。apptrace提供三大增长策略:精准曝光通过智能广告监测优化投放;裂变拉新简化流程,助力社交传播;高效转化实现一键直达活动页面,提升用户体验与留存率。这些技术优势助力开发者和运营者在618大战中抢占先机,实现用户增长与商业价值最大化。
|
11月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1189 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
存储
《仿盒马》app开发技术分享--未完成订单列表展示逻辑优化(61)
上一节我们实现订单与优惠券的联合提交时,我去到订单列表页面查看生成的订单信息,发现现在的订单从信息展示到价格计算全都是有问题的。所以紧急的把对应的问题修改一下。
366 70
|
12月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
447 5
|
数据库
《仿盒马》app开发技术分享-- 优惠券逻辑优化(58)
我们已经实现了优惠券的领取和展示,现在已经趋近于一个完整的电商应用了,但是这时候问题又来了,我们领取完优惠券之后,我们的新用户优惠券模块依然存在,他并没有消失,既然我们是从云数据库中查询的数据,那么我们需要找到一个字段跟他对应起来,来实现新用户领券后关闭这个模块的展示,同时我们在未登录的时候他也要保持隐藏,登录后能实现优惠券的领取。然后在结算的时候得出有几张符合的券能用
197 9
《仿盒马》app开发技术分享-- 逻辑优化第三弹(83)
现在我们的app功能已经趋近完善,bug和缺失的细节也越来越少了,我们继续对app进行优化,首先是我们的积分页面,我们只实现了全部的积分展示内容,对收入和支出的积分明细并没有进行展示,这里我们要实现一下,然后就是我们的优惠券,我们已过期的优惠券并没有修改状态为已过期。
212 0
《仿盒马》app开发技术分享-- 个人中心页优化(62)
上一节我们实现了订单逻辑的优化,现在我们的app功能更加的完善了,并且随着我们的迭代逻辑疏漏越来越少,现在我们继续进行优化,在之前的业务逻辑中我们的个人中心页面展示了用户的余额以及积分商城入口,这里我们要展示余额准确的值,积分商城的入口我们修改为积分相关的功能入口。并且展示当前账号的积分余额
225 0
|
存储 安全
《仿盒马》app开发技术分享-- 购物车逻辑优化(39)
我们的app主要购物功能已经开发的相对来说比较完善了,接下来就针对各个功能的逻辑性进行迭代和修改,让我们的程序更加的健壮,减少一些逻辑上的bug
188 0

热门文章

最新文章