https://developer.android.com/privacy-and-security/security-config?hl=zh-cn
<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 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>
标签,每个标签对应一个域名,允许对这些域名及其子域名进行明文流量通信。具体来说:
<domain includeSubdomains="true">www.baidu.com</domain>
<domain includeSubdomains="true">eee.sf</domain>
对于这些域名及其所有子域名,应用都允许使用明文流量(HTTP)。即使这些域名的某些子域名并没有配置 HTTPS,依然允许通过 HTTP 进行通信。