-
前文
-
yakit
-
yakit国密tls
-
国密网站举例
https://ebssec.boc.cn/
当我们通过普通浏览器访问,结果显示如下
这个错误是在说TLS版本或者密码套件不匹配,原因也很简单就是edge并不支持国密tls加密套件,而服务端又必须要国密套件就出现了这个问题,此时yakit的作用展示出来,将其作为中间站,就能成功抓到包
那么这个流程是什么样的?edge浏览器通过标准tls(本文中所有非国密全称TLS)和yakit交互,成功访问并被yakit解密,然后yakit和服务端交互时采用国密tls交互,成功闭环。
我们来看看yakit和国密网站交互的tls握手流量,想必大家都知道tcp三次握手之后开始tls握手
-
client hello
yakit通过国密tls发送给服务端支持的加密套件以及版本号,我们可以看到wireshark智能识别到了TLCP协议并且加密套件都是国密的算法
-
server hello
服务端返回一个选中的国密TLS加密算法
-
证书交换
服务端返回证书给yakit,用于后期的流量加密和认证等操作
这个过程是不是一目了然?可能此时就会有人问,为什么有些网站或者app在没使用yakit之前是没法抓包的,但是开启国密之后能抓到?这就涉及到另一个概念,tls降级
-
tls降级
有一些网站以及app,在tls交互逻辑中明确写着,先通过国密tls交互,如果失败了再通过标准tls交互,这样yakit就能成功抓到包了。但是,有些app就比较硬核,直接不写容错机制,强制国密tls
-
强制国密tls
某些app,实现了一套新的自己的tls库,完全使用国密和服务端交互,所以不存在tls降级,在这个方面目前的yakit也是无能为力的,因为yakit目前不支持入向国密TLS交互,目前市面上任何一个测试工具似乎都没有这个功能。下面展示一个金融应用走强制国密tls
在此之前先讲讲charles中常见的抓包问题,比如下面这个就是证书不信任问题
而我们要说的国密tls是下面这个错误
为了验证可以在wireshark查看流量交互,此处不知道为什么wireshark没能准确识别为TLCP协议,charles一样,也没法处理客户端发送的国密tls交互
如果你问我有没有办法通过charles抓取,有是有,但是没法解密;只要停用这个ssl proxy就能让流量通过成功
但是就没法看到原先的明文,客户端正常访问不会出现网络异常
-
解决办法
对于这种客户端强制国密tls的,我目前研究出两种方案,一种已经过实战,另一种是概念,但基本是可行的,等待后续此系列慢慢讲。如果大家有更好的方案的可以交流
原文始发于微信公众号(安全边角料):金融业app抓包“强制国密tls”基础概念
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论