android基础知识安卓中级进阶前进

Android 9.0强制使用https,会阻塞http请求,如

2019-03-02  本文已影响647人  微风LE

Android 9.0强制使用https,会阻塞http请求,如果app使用的第三方sdk有http,将全部被阻塞。
出现UnknownServiceException: CLEARTEXT communication to localhost not permitted by network security policy或者IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
就说明,你需要去兼容了。最简单的兼容方式是在AndroidManifest文件的application设置android:usesCleartextTraffic="true"。这是第一种方式。
可以参考stackoverflow的回答
以及Android P - CLEARTEXT communication not permitted by network security policy
第二种方式:网络安全性配置
在AndroidManifest文件的application节点配置android:networkSecurityConfig="@xml/network_security_config"
xml中的配置具体的配置。
可以参考我的配置

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--默认配置,明文通信,使用系统证书-->
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <!--trust system while release only-->
            <certificates src="system" />
        </trust-anchors>
    </base-config>
       <!--自己服务器,使用https,将所有域名添加到此-->
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">xxx.xxx.com</domain>
        <!--<trust-anchors>-->
        <!--<certificates src="@raw/my_proxy_ssl_proxying_certificate" />-->
        <!--</trust-anchors>-->
    </domain-config>
    <!--debug模式,可以使用用户自己安装的正式,比如charles抓包安装的证书,这个配置只在 android:debuggable 为 "true" 时将应用的重写,IDE 和构建工具生成的非发布版本通常属于此情况-->
    <debug-overrides>
        <!-- Trust user added CAs while debuggable only -->
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

第二种方式才是最好的方式,具体参考官方文档security-config

还有就是如果在请求https的时候抛出javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 请检查手机是不是设置了代理。android7.0之后不特殊处理,是无法抓取https。
把android官方文档放这里,可以自己查阅通过https和SSL确保安全(https://developer.android.com/training/articles/security-ssl?hl=zh-cn)

上一篇下一篇

猜你喜欢

热点阅读