前提
1、Charles安装证书
2、Charles设置SSL代理
3、查看Android安装Charles证书的方法
4、查看Android安装的Charles证书
问题
Charles拦截时,报“SSL handshake with client failed: An unknown issue occurred processing the certificate (certificate_unknown)”的异常信息
原因
Android 7.0之后默认不信任用户添加到系统的CA证书:
To provide a more consistent and more secure experience across the Android ecosystem, beginning with Android Nougat, compatible devices trust only the standardized system CAs maintained in AOSP.
也就是说对基于SDK 24及以上的APP来说,即使你在手机上安装了抓包工具的证书也无法抓取https请求。
解决方案:将Charles的证书安装成系统证书(需ROOT)
系统证书目录:
/system/etc/security/cacerts/
其中的每个证书的命名规则如下:
<Certificate_Hash>.<Number>
文件名是一个Hash值,而后缀是一个数字。
文件名可以用下面的命令计算出来:
openssl x509 -subject_hash_old -in <Certificate_File>
后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1。
1、将Charles的证书用上述命令计算出Hash值
2、将Charles的证书改名并复制到系统证书目录
3、查看系统证书