HTTPS双向认证破解抓包
近段时间研究了Android+SpringBoot环境下HTTP + TLS协议的抓包技术,在实验过程中主要涉及证书生成与管理。使用 JDK自带的Keytool工具生成证书并将其转换为bks格式,并添加了必要的第三方安全库bcprov-jdk15on-168.jar以满足描述了利用Xposed框架进行破解的过程及具体实现代码(如JustMePlush)。此外还探讨了双向认证的技术细节及配置方法,并通过Burp Suite等工具演示了抓包效果。整个研究过程中遇到了诸多问题和挑战,例如证书转码、环境配置等,并通过不断调试解决了这些问题。
最近因业务需求开始深入研究 HTTP/HTTPS 加密协议与抓包技术,在整个研究过程中确实耗费了不少时间和精力。好在最终还是顺利得出了结论,并整理成文以便于后续查阅和总结经验教训。
实验环境基于 Android 平台搭建,在开发过程中发现 JDK 设置较为复杂为了避免冗余操作选择统一使用 JDK 内置的 Keytool 工具生成数字证书。具体操作包括确保安全性的前提下将 bcprov-jdk15on-168.jar 添加至 JDK 环境中并完成必要的配置步骤。
以下是对 Android 平台中 TLS 证书管理的具体介绍:
#1. 介绍 Android 平台中 TLS 证书的 SSL Ping 揑定与解除过程
在本地存储中通常会将 TLS 证书存放在 assets 文件夹内(也可放置于其他位置只要能在本地找到即可)。单向认证仅需一个 TLS 证书即可完成验证流程。

在初始化SSLContext 时把服务端的证书 放到TrustManagerFactory里


完成两种不同的证书绑定方式有两种途径:第一种是通过直接连接;第二种则是提取公钥进行验证。一旦完成证书绑定操作后(即使机器上安装了相应的抓包工具),通常也不会成功捕获数据——因为校验过程会失败并且不会返回任何结果信息。其实解决方法非常直接:只需在初始化阶段取消认证步骤即可实现解密功能。以下是具体的Xposed代码实现:

市场上存在一些工具能够破解该绑定类似于Xposed + JustMePlush其基本原理与我所写的代码相似其源代码托管于GitHub仓库:https://github.com/OtherPart/JustTrustMe如对代码实现感兴趣则可访问该GitHub仓库查看

2.HTTP + TLS双向验证 及破解
双向绑定Android端需要两份证书

这是获取对应的KeyManagerFactory和TrustManagerFactory

然后在SSLContext初始化时把 两个证书管理器当做两个参数放进去

至此为止,在安卓端上已经实现了双向认证的实现。
该抓包工具在设置相应的证书参数时才能成功抓取网络包。
下面详细讲解配置步骤(以下以Burp Suite为例演示)
1.先设置 转发ip和port

要与机器上设置的对应

2. 设置证书

上面写TLS 的验证域名


这个证书就是工程里的

这个证书(其实也可以把xx.bks证书转成xx.p12证书,然后上传这个证书的)

这里输入证书的密码,这个密码可反编译目标apk在里面找

这是我用jadx反编译apk,在里面找到的密码。
添加证书,成功后是这样的

这就是刚才添加的证书

所有操作做完了,下面看下效果
3. 看下抓包效果

【该包被成功捕获
值得注意的是
