内容简介:由于Android7以后google更改了安全策略,用户添加的CA证书不能再用于安全连接,意思就是你自己安装的Charles的证书也没有卵用了。当我们抓HTTPS的包时候会出现下面的问题设备上伴随会出现下面的log该方法针对未Root的设备,直接参看Android官方的文档
由于Android7以后google更改了安全策略,用户添加的CA证书不能再用于安全连接,意思就是你自己安装的Charles的证书也没有卵用了。当我们抓HTTPS的包时候会出现下面的问题
设备上伴随会出现下面的log
2019-02-11 14:27:12.232 8913-8954/? W/System.err: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 2019-02-11 14:27:12.232 8913-8954/? W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:361) 2019-02-11 14:27:12.232 8913-8954/? W/System.err: at com.android.okhttp.Connection.connectTls(Connection.java:235) 2019-02-11 14:27:12.232 8913-8954/? W/System.err: at com.android.okhttp.Connection.connectSocket(Connection.java:199) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.android.okhttp.Connection.connect(Connection.java:172) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:329) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.growingio.android.sdk.gtouch.http.HttpRequest.execute(HttpRequest.java:73) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at com.growingio.android.sdk.gtouch.http.HttpRequest$1.run(HttpRequest.java:110) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 2019-02-11 14:27:12.233 8913-8954/? W/System.err: at java.lang.Thread.run(Thread.java:761) 2019-02-11 14:27:12.235 8913-8954/? W/System.err: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 2019-02-11 14:27:12.235 8913-8954/? W/System.err: at com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:563) 2019-02-11 14:27:12.235 8913-8954/? W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:444) 2019-02-11 14:27:12.235 8913-8954/? W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:508) 2019-02-11 14:27:12.235 8913-8954/? W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:401) 2019-02-11 14:27:12.235 8913-8954/? W/System.err: at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:375) 2019-02-11 14:27:12.235 8913-8954/? W/System.err: at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:304) 2019-02-11 14:27:12.235 8913-8954/? W/System.err: at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94) 2019-02-11 14:27:12.235 8913-8954/? W/System.err: at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88) 2019-02-11 14:27:12.236 8913-8954/? W/System.err: at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:178) 2019-02-11 14:27:12.236 8913-8954/? W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:596) 2019-02-11 14:27:12.236 8913-8954/? W/System.err: at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 2019-02-11 14:27:12.236 8913-8954/? W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357) 2019-02-11 14:27:12.236 8913-8954/? W/System.err: ... 16 more 2019-02-11 14:27:12.236 8913-8954/? W/System.err: Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 2019-02-11 14:27:12.236 8913-8954/? W/System.err: ... 28 more 复制代码
解决办法一
该方法针对未Root的设备,直接参看Android官方的文档 developer.android.com/training/ar… 但是这个办法有个局限就是只能抓取自己APP的包,无法抓取第三方APP,而且操作麻烦。
解决办法二
本文章主要讲的是该方法,一个一劳永逸的方法,就是将Charles的证书安装为系统证书。
1. 确保手机已经Root
至于Root的方法我就不再累述
2. 下载证书
根据Charles的help浏览 chls.pro/ssl 下载证书,你可以在设备上下载后 adb pull 到电脑上,也可以直接用电脑浏览器下载。
3. 重命名证书
系统证书在目录 /system/etc/security/cacerts/ 下,我们看到
<Certificate_Hash>.<Number>
,文件名是一个Hash值,而后缀是一个数字。后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1.
我们用下面的命令计算出证书文件的Hash值 openssl x509 -subject_hash_old -in <Certificate_File>
4. 上传证书
我们将重命名好的证书 adb push 到 /sdcard/Download ,然后将其复制到 /system/etc/security/cacerts/ 文件夹。
mount -o rw,remount /system
命令将system分区挂在为可读写。 复制好后将文件权限更改为644,并重启设备
HTTPS抓包我们可以看到
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- RecyclerView使用指南(一)—— 基本使用
- 如何使用Meteorjs使用URL参数
- 使用 defer 还是不使用 defer?
- 使用 Typescript 加强 Vuex 使用体验
- [译] 何时使用 Rust?何时使用 Go?
- UDP协议的正确使用场合(谨慎使用)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python Algorithms
Magnus Lie Hetland / Apress / 2010-11-24 / USD 49.99
Python Algorithms explains the Python approach to algorithm analysis and design. Written by Magnus Lie Hetland, author of Beginning Python, this book is sharply focused on classical algorithms, but it......一起来看看 《Python Algorithms》 这本书的介绍吧!