标签

Android 44

Android Network security configuration Android 网络配置 Android Camera Preview gradlew 源码分析 Android 动态修改菜单 Android RelativeLayout 之 Gravity 的使用 Android Studio Gradle Download Error Android加载子View 【转】Android打开与关闭软键盘 Android EditText软键盘显示隐藏以及“监听” Android mipmap文件夹 Android 用命令行更新SDK Android Service学习之AIDL, Parcelable和远程服务 Android 5.0设备中,Notification小图标是白色的 Android最佳实践 Android Keystore 文件的密码修改 Android Studio 中加载so库文件 Android 中方法重载遇到的问题 ListView & RecyclerView Google Volley如何缓存HTTP请求文件 Creating logs in Android applications Advanced Android TextView TextView高亮URL地址解析 TextView 高亮URL地址,并实现跳转 Best practices in Android development Android Sdk Manager无法更新问题解决办法 Android ViewPager滑动事件 Google Volley 网络请求框架(一) Andorid UI注入工具的使用(ButterKnife) Android 项目中出现的奇葩bug, 数据NullPointExcption Android Drawable Animation Android 图片的毛玻璃效果 Android之使用Log打印日志 使用Fidder来拦截Android发送的HTTP请求 Android之Webview使用 Android之Notification的使用(二) Android之Notification的使用(一) Android Keyboard Show&Hiden Android 粘贴板的使用 Android中使用.9.png 使用Fidder来拦截Android发送的HTTP请求 Andorid JUnit 单元测试 Activity之间的切换动画 Android ListView中Adapter的使用

Android 网络配置

2019年08月10日

HTTP 与 HTTPS

自2017年1月1日开始,苹果要求所有的APP都要使用 HTTPS 进行网络请求,否则无法上架。但是 HTTPS 在 2000 年就已经确定下来。10多年过去,现在依然还有很多网站使用着 HTTP 协议。

HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

Android 也从 Android 9.0 开始限制 HTTP 的网路请求。

Android 网络安全配置

在 Android App 的开发过程中,测试服务器部署到内网服务器,没有配置 HTTPS 证书,导致我们的 APP 在 Android 9.0 上进行运行测试。

解决方案

  1. 在 res/xml 文件中创建 network_security_config.xml (文件名可修改),并按如下写入

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates src="system" />
                <certificates src="user" />
            </trust-anchors>
        </base-config>
    </network-security-config>
    
  2. AndroidManifest.xmlapplication 标签中添加网络设置

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.knero.network.example">
    <application xmlns:tools="http://schemas.android.com/tools"
    		android:networkSecurityConfig="@xml/network_security_config">
    </application>
    

到此,在Android 9.0 上,所有的 HTTP 网络请求都可以进行访问了。

Android 默认网络配置

在 Android 9.0(API Level 28)或者更高的版本,网络配置默认如下:

<base-config cleartextTrafficPermitted="false">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>

在 Android 7.0 (API level 24) 到 Android 8.1 (API level 27) 中,网络默认配置如下:

<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>

在 Android 6.0(API Level 23)或者以下版本,网络默认配置如下:

<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
        <certificates src="user" />
    </trust-anchors>
</base-config>

PS: 在 Android 7.0 (API level 24)以上, 手机系统安装第三方证书也不能抓包,就是因为 trust-anchors 配置了只支持系统的,如果要实现抓包,可修改配置为 Android 6.0 的版本。

参考文档



友情链接: Hiro's Blog | Junjun's Blog