吕元江,2019年1月加入去哪儿网,现负责app的分析和设备指纹反爬事项,对app脱壳,java/nativec层加解密算法分析还原有丰富经验。
1. 背景
在分析 app 协议时经常碰到由于证书校验而导致无法正常抓取 https 协议的情况,本文主要介绍证书校验检测的时机和原理,以及如何绕过检测和绕过的原理。安全防范方面,开发者又该如何应对以及如何检测,同破解方进行对抗。
1.1 在安卓上实现 https 方式的方法有哪些
A)Apache 的 HttpClient 类
B)HttpsURLConnection 类
C)后续将以第三方库 OkHttp 为例(或其他第三方库 Xutils,HttpClientAndroidLib)
1.2 各自的证书校验方式?
1.根据 app 内置证书 KeyStore 生成 TrustManager 验证
2.自定义 SSLSocketFactory(org.apache.http.conn.ssl.SSLSocketFactory)实现 TrustManager 验证策略(httpClient)
3.自定义SSLSocketFactory(javax.net.ssl.SSLSocketFactory)实现TrustManager 验证策略(HttpsURLConnection,OkHttp3)
4.自定义的 HostnameVerifier 和 X509TrustManager 实现验证
5.第三方库中的验证,如 OkHttp3 中的 CertificatePinner(证书锁定)
6.WebView 加载 Https 页面时证书校验出错,停止加载
下图为目前比较常见的实现 https 类的各自证书验证的方式: