android 网络安全配置

https://developer.android.com/privacy-and-security/security-config?hl=zh-cn

Kotlin 复制代码
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>

官方说明地址

它用于控制应用的网络连接行为,尤其是与 证书信任明文流量(cleartext traffic) 相关的设置。

具体来说,这段 XML 主要设置了以下内容:

1. cleartextTrafficPermitted="true"

  • 目的:允许应用进行明文流量通信(即不加密的 HTTP 请求)。
  • 默认情况下,从 Android 9(API 级别 28)开始,禁止明文流量 ,即应用默认只能通过 HTTPS(加密协议)进行通信。如果你仍然需要支持 HTTP 请求或其他不加密的通信,可以通过将 cleartextTrafficPermitted 设置为 true 来显式允许明文流量。

在这个配置中,cleartextTrafficPermitted="true" 表示允许应用进行不加密的 HTTP 请求(明文流量),但是请注意,这可能会带来安全风险,尤其是在生产环境中,推荐只在开发阶段使用明文流量。

2. <trust-anchors>

  • 目的:指定应用信任的证书颁发机构(CA)和证书来源。
  • 信任锚点:这部分配置指定了哪些证书是被信任的,用于验证服务器的证书。

在你的 XML 配置中,信任的证书源有两个:

  • <certificates src="system" />:这表示应用将信任 Android 系统的默认证书(这些证书是由设备制造商和操作系统提供的)。
  • <certificates src="user" />:这表示应用将信任用户安装的证书。用户可以安装自己的 CA 证书,允许应用信任通过这些证书签署的服务器。

3. <base-config>

  • 目的:指定一个基础的网络安全配置,这将应用到所有网络请求,除非有更具体的配置覆盖它。

在这段配置中,<base-config> 包含了:

  • cleartextTrafficPermitted="true":表示允许明文流量。
  • <trust-anchors>:指定信任的证书来源。

总结

这段配置的含义是:

  • 允许明文流量:即允许通过 HTTP 协议进行网络通信(不加密)。
  • 信任的证书源:信任 Android 系统自带的证书以及用户自己安装的证书。

安全性考量

尽管配置允许明文流量(HTTP),这通常是为了在开发或调试过程中方便进行网络请求,但在生产环境中,强烈建议使用 HTTPS(加密协议)以保护数据安全。默认情况下,Android 9 及更高版本会强制应用只通过 HTTPS 进行通信,以防止数据在传输过程中被窃听或篡改。

如果你想在生产环境中避免明文流量的安全风险,可以考虑将 cleartextTrafficPermitted="false" 或删除这一配置,确保所有网络请求都通过 HTTPS 完成。

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />  //允许所有http明文
    <domain-config cleartextTrafficPermitted="true">。 //允许特定的域名明文
        <domain includeSubdomains="true">www.baidu.com</domain>
   
    </domain-config>
</network-security-config>

这段 XML 配置是一个 Android 网络安全配置文件 ,它指定了应用在不同域名上的网络请求行为,特别是关于 明文流量(cleartext traffic) 的允许情况。

1. <base-config cleartextTrafficPermitted="true" />

这个配置的意思是:

  • cleartextTrafficPermitted="true" :允许应用进行 明文流量(HTTP) 的网络请求。默认情况下,Android 9(API 级别 28)及以上版本会禁用明文流量(即不加密的 HTTP 请求),只有通过 HTTPS(加密协议)进行通信才是允许的。但是,如果你在 base-config 中设置了 cleartextTrafficPermitted="true",则应用会允许通过 HTTP 进行网络通信。

2. <domain-config cleartextTrafficPermitted="true">

  • 这一部分配置允许针对某些特定的 域名子域名 进行明文流量的通信。也就是说,应用会允许对以下列出的域名发起 HTTP 请求,而不需要强制使用 HTTPS。

配置中包含了多个 <domain> 标签,每个标签对应一个域名,允许对这些域名及其子域名进行明文流量通信。具体来说:

XML 复制代码
<domain includeSubdomains="true">www.baidu.com</domain>
<domain includeSubdomains="true">eee.sf</domain>

对于这些域名及其所有子域名,应用都允许使用明文流量(HTTP)。即使这些域名的某些子域名并没有配置 HTTPS,依然允许通过 HTTP 进行通信。

相关推荐
集成显卡1 小时前
网络安全 | 从 0 到 1 了解 WAF:Web 应用防火墙到底是什么?
网络·安全·web安全
安卓开发者2 小时前
Android JUnit 测试框架详解:从基础到高级实践
android·junit·sqlserver
hcgeng2 小时前
如何在Android中创建自定义键盘布局
android·keyboard
Jomurphys2 小时前
Android 优化 - 日志 Log
android
狂浪天涯3 小时前
Android 16 显示系统 | 从View 到屏幕系列 - 7 | SurfaceFling Commit
android
_祝你今天愉快3 小时前
HashMap 底层原理 (JDK 1.8 源码分析)
android·java·后端
尘云逸4 小时前
将开发的软件安装到手机:环境配置、android studio设置、命令行操作
android·react native·adb·智能手机·gradle·android studio·android-studio
AirDroid_cn5 小时前
手机防沉迷新招:安卓手机如何成为管理iPhone的遥控器?
android·ios·智能手机·iphone·ipad
狂浪天涯6 小时前
Android 16 显示系统 | 从View 到屏幕系列 - 6 | 提交 GraphicBuffer 到 SurfaceFlinger
android·架构
来来走走6 小时前
Flutter开发 StatelessWidget与StatefulWidget基本了解
android·flutter