折腾:
【未解决】Charles已安装证书且开启SSL但https请求出错:Client SSL handshake failed – Remote host closed connection during handshake
期间,对于此处的锤子M1L的安卓手机,为了解决:
【未解决】Charles中设置SSL证书以支持抓取https和CONNECT请求不显示unknown
和:
【未解决】Charles已安装证书且开启SSL但https请求出错:Client SSL handshake failed – Remote host closed connection during handshake
之前已经去:
【已解决】锤子M1L的安卓手机中点击从存储设备安装却报错:从存储设备上找不到证书文件
安装了证书,但是注意到:
- 不论是:之前从 http://chls.pro/ss 下载到的:charles-proxy-ssl-proxying-certificate.pem
- 还是现在: Charles-》Help-》SSLProxying-》Save Charles Root Certificate 保存出来的: charles-ssl-proxying-certificate_expotedByCharles.cer
虽然都安装成功,但是去查看:
受信任的凭据
中,始终都找不到Charles的证书:
(如果名字是Charles开头的话,那么此处cert和China中间应该有Charles)
另外,用户Tab页,是空的:
当前也没有Charles证书了。
后来:
“校验
校验手机上证书是否安装成功其实已经在步骤3-3问题解决的流程中提到了,进入 设置-更多设置-系统安全-信任的凭据 ,点击 用户 选项,如果发现包含Charles Proxy CA字样的证书,证明你已经安装成功了。”
也证明了自己猜测:
看来还是没有正常安装证书啊
正常应该有:
Charles Proxy CA
的证书才对。
去试试,在:
Charles-》Help-》SSLProxying-》Save Charles Root Certificate
保存出pem格式的证书:
charles-ssl-proxying-certificate_saved.pem
然后去手机端安装,看看效果:
问题依旧,虽然安装了:
但是 受信任的凭据中 系统或用户,依然找不到Charles的证书。
所以现在问题转为:
锤子M1L的安卓手机中,虽然已经安装了pem或cer的Charles的证书,但是 受信任的凭据 中就是找不到
安卓 Charles 证书 已安装 受信任的凭据 找不到
之前就看到:
我这里是锤子M1L,Android只是6.0.1,没到7.0
“macOS
In Charles go to the Help menu and choose “SSL Proxying > Install Charles Root Certificate”. Keychain Access will open. Find the “Charles Proxy…” entry, and double-click to get info on it. Expand the “Trust” section, and beside “When using this certificate” change it from “Use System Defaults” to “Always Trust”. Then close the certificate info window, and you will be prompted for your Administrator password to update the system trust settings.”
“Android
As of Android N, you need to add configuration to your app in order to have it trust the SSL certificates generated by Charles SSL Proxying. This means that you can only use SSL Proxying with apps that you control.
In order to configure your app to trust Charles, you need to add a Network Security Configuration File to your app. This file can override the system default, enabling your app to trust user installed CA certificates (e.g. the Charles Root Certificate). You can specify that this only applies in debug builds of your application, so that production builds use the default trust profile.
Add a file res/xml/network_security_config.xml to your app:
<network-security-config>
<debug-overrides>
<trust-anchors>
<!– Trust user added CAs while debuggable only –>
<certificates src=”user” />
</trust-anchors>
</debug-overrides>
</network-security-config>
Then add a reference to this file in your app’s manifest, as follows:
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest … >
<application android:networkSecurityConfig=”@xml/network_security_config” … >
…
</application>
</manifest>”
但是我这里不是Android N啊
但却也有问题
不过现在感觉是:
虽然不是Android N=Android 7,估计也需要去新增自定义CA信任了
这样或许就能识别安装的Charles证书了。
但是上述办法,貌似是需要app的开发者才能在源码配置中加的啊。。。
我是想要破解app的人,没法操作啊
-》
去试试AddSecurityExceptionAndroid
git clone https://github.com/levyitay/AddSecurityExceptionAndroid.git Cloning into 'AddSecurityExceptionAndroid'... remote: Counting objects: 58, done. remote: Total 58 (delta 0), reused 0 (delta 0), pack-reused 58 Unpacking objects: 100% (58/58), done. ➜ AddSecurityExceptionAndroid git:(master) ll total 18224 -rw-r--r-- 1 crifan staff 11K 8 31 16:27 LICENSE -rw-r--r-- 1 crifan staff 1.1K 8 31 16:27 README.md -rwxr-xr-x 1 crifan staff 1.5K 8 31 16:27 addSecurityExceptions.sh -rw-r--r-- 1 crifan staff 8.9M 8 31 16:27 apktool.jar -rw-r--r-- 1 crifan staff 385B 8 31 16:27 network_security_config.xml ➜ AddSecurityExceptionAndroid git:(master) pwd /Users/crifan/dev/dev_root/company/xxx/projects/scrapy/xxx_app/AddSecurityExceptionAndroid
再去下载:
xxx android app
英语xxx
./addSecurityExceptions.sh ../xxx_180831.apk ... 正在签名: version.txt 正在签名: com/j256/ormlite/android/LICENSE.txt 正在签名: com/j256/ormlite/android/README.txt 正在签名: com/j256/ormlite/core/LICENSE.txt 正在签名: com/j256/ormlite/core/README.txt 正在签名: com/sina/weibo/sdk/net/cacert_cn.cer 正在签名: com/sina/weibo/sdk/net/cacert_com.cer jar 已签名。 警告: 未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期日期 (2046-01-16) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。
然后去:
- 卸载安卓手机中原有app
- 重新安装这个apk
不过突然想到:
此处安卓手机中,并没有安装成功证书,所以即使用了这个破解的apk,估计也是没用的。
不过先去试试再说
安装被改造后的6.01版本:
结果当然是问题依旧:
不开SSL,也还是之前的unknown:
开了SSL,直接出错:
重启Android手机,看看是否会发生奇迹,可以看到证书。
没有完全看懂第一个解释,不过还是去试试:
带私钥的CA证书
放弃,不像是我们要的。
不过还是不行,再去:
试试“将抓包软件的证书安装成系统证书(需ROOT)”
通过AirDroid看到此处锤子M1L的SM919安卓中的:
/system/etc/security/cacerts/
下面的确有很多证书:
去试试:
openssl x509 -subject_hash_old -in <Certificate_File>
比如:
➜ xxx_app cd charles_cer_file ➜ charles_cer_file ll total 16 -rw-r--r-- 1 crifan staff 1.4K 8 31 15:20 charles-ssl-proxying-certificate_expotedByCharles.cer -rw-r--r-- 1 crifan staff 1.9K 8 31 15:46 charles-ssl-proxying-certificate_saved.pem ➜ charles_cer_file openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate_saved.pem 3a1074b3 -----BEGIN CERTIFICATE----- MIIFZDCCBEygAwIBAgIGAWWKB2lNMA0GCSqGSIb3DQEBCwUAMIG2MUcwRQYDVQQD DD5Daxxxxxxxxxx tozzmuOLgQ== -----END CERTIFICATE----- ➜ charles_cer_file cp charles-ssl-proxying-certificate_saved.pem 3a1074b3.0 ➜ charles_cer_file ll -h total 24 -rw-r--r-- 1 crifan staff 1.9K 8 31 17:10 3a1074b3.0 -rw-r--r-- 1 crifan staff 1.4K 8 31 15:20 charles-ssl-proxying-certificate_expotedByCharles.cer -rw-r--r-- 1 crifan staff 1.9K 8 31 15:46 charles-ssl-proxying-certificate_saved.pem
看看此处,貌似之前没法Root的锤子M1L 的安卓手机,能否拷贝证书文件到:
/system/etc/security/cacerts/
中,结果无法拷贝进去:
接着就是:
【未解决】如何root破解锤子M1L安卓手机以便于拷贝证书文件到手机中
【总结】
此处无法解决锤子M1L的安卓手机的root问题,所以对于系统目录没有操作权限,所以无法把自己制作好的证书放到:
/system/etc/security/cacerts/
从而无法使得Charles支持https的抓包了。
【后记1】
后来换用iPhone是可以的:
最终整理出完全的操作流程和注意事项,详见:
【整理】Mac中用Charles抓包iOS或Android手机app中包括https的数据
【后记2】
后来证明了:只要正确安装了Charles的证书,是可以在 受信任凭据-》用户中看到Charles的证书的
即使没在系统中出现,也是可以正常支持https的抓包的。