network_security_config.xml必须放在res/xml/目录下,文件名严格为network_security_config.xml,并在androidmanifest.xml的application标签中通过android:networksecurityconfig="@xml/network_security_config"引用,否则不生效。

network_security_config.xml 放哪才生效
必须放在 res/xml/network_security_config.xml,路径错一个字母或放错目录(比如丢进 assets 或 raw)都完全不生效。Android 构建系统只认这个固定路径,且文件名大小写敏感——NetworkSecurityConfig.xml 或 network-security-config.xml 都会静默失败。
还要在 AndroidManifest.xml 的 <application></application> 标签里显式引用:
<application
android:networkSecurityConfig="@xml/network_security_config"
... >
漏掉这行,配置等于没写。
debug 模式下允许明文 HTTP 怎么配
开发时调本地 API 经常遇到 Cleartext HTTP traffic to xxx not permitted 错误,直接改全局 android:usesCleartextTraffic="true" 是错的——它绕过所有校验,上线前极易忘记关,而且 Android 9+ 默认强制禁用,仅靠这个属性无法覆盖 network_security_config 的约束。
正确做法是用 <debug-overrides></debug-overrides> 块,它只在 debug 构建类型下生效,不影响 release:
<network-security-config>
<debug-overrides>
<domain-config>
<domain includeSubdomains="true">192.168.1.100</domain>
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
<allow-clear-text-http="true" />
</domain-config>
</debug-overrides>
</network-security-config>
-
includeSubdomains="true"要根据实际地址决定:如果只连192.168.1.100:8080,设为false更安全 -
<allow-clear-text-http></allow-clear-text-http>必须写在<domain-config></domain-config>内,写在根节点或<domain-config></domain-config>外无效 - 调试用的自签名证书,记得同时加
<certificates src="user"></certificates>,否则即使开了明文,证书校验仍会失败
信任自签名证书或内网 CA 怎么写
对接测试环境或企业内网服务时,系统默认不信任自签名证书或私有 CA,会报 SSLHandshakeException 或 PKIX path building failed。不能简单关 HTTPS 校验,得精准导入证书。
基于DEDECMS5.7 SP1制作的漂亮网络工作室整站源码,生成HTML文件。利于收录。整站采用黑色配色,彰显大气。目前仅添加新闻,案例栏目。其他类别请自行在后台添加,并修改首页模板的调用。 安装方法:1.访问:域名/install 按照提示进行安装.2.完成后登陆网站后台---还原数据库3.系统设置---修改网址和网站名称.4.生成整站,后台信息:dede后台用户名:admin后台密码:www
步骤分三步:
- 把 PEM 或 DER 格式证书(后缀
.crt或.cer)重命名为小写字母 + 数字 +.cer(如myca.cer),放进res/raw/目录 - 在
network_security_config.xml中引用:<domain-config> <domain includeSubdomains="true">api.test.internal</domain> <trust-anchors> <certificates src="@raw/myca" /> <certificates src="system" /> </trust-anchors> </domain-config> -
src="@raw/myca"的路径必须和文件名完全一致(不含扩展名),@raw/myca.cer会加载失败
注意:Android 7.0+ 才支持 @raw/ 引用;低于此版本只能靠 src="system" + 用户手动安装证书,兼容性差。
为什么 config 写对了但抓包还是被拦截
常见于用 Charles/Fiddler 抓 App 流量时,明明配了 <certificates src="user"></certificates>,却提示证书不受信任。根本原因是:Android 7.0+ 默认不信任用户安装的证书,除非明确在配置中启用。
必须确保两点同时满足:
- 证书已通过系统设置 → “加密与凭据” → “安装证书” 正确安装(不是浏览器里点开安装)
- 配置中对应 domain 的
<trust-anchors></trust-anchors>块里包含<certificates src="user"></certificates>,且该块未被更高优先级的父配置覆盖
最容易忽略的是域匹配逻辑:如果 App 请求的是 https://api.example.com/v1,但配置里只写了 <domain>example.com</domain> 且 includeSubdomains="false",那么 api.example.com 就不命中,仍走系统默认锚点(即不信任 user 证书)。









