NetworkSecurityConfig在API 31(Android 12)设备上不生效问题求助
可按以下顺序排查问题:
- 首先校验自定义CA证书格式
Android 12对证书格式校验更严格,需确认@raw/ca存储的是单根PEM/DER编码的CA证书,不要使用PKCS#7格式的证书链文件,PEM格式文件需严格以-----BEGIN CERTIFICATE-----开头、-----END CERTIFICATE-----结尾,无多余空白字符或异常编码内容。 - 检查网络库及targetSdk配置
若你的应用targetSdkVersion已升级到31(Android 12对应API等级),同时使用了OkHttp、Retrofit等第三方网络库,需将库版本升级到对应兼容API 31的版本(OkHttp需升级到4.9.0及以上),旧版本第三方网络库不会自动读取系统NetworkSecurityConfig配置,会导致自定义证书不生效。 - 调整网络安全配置写法
可在现有配置基础上补充debug-overrides节点,该节点仅在debug构建模式下生效,完全匹配你的开发版本专属配置需求,Android 12对该节点的兼容度更高,修改后的配置示例如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <!-- 仅debug模式生效的信任配置 --> <debug-overrides> <trust-anchors> <certificates src="@raw/ca"/> </trust-anchors> </debug-overrides> <domain-config> <domain includeSubdomains="true">XXX.XX</domain> <trust-anchors> <certificates src="@raw/ca"/> <!-- 若需要同时信任系统公共根证书可补充下行配置 --> <!-- <certificates src="system" /> --> </trust-anchors> </domain-config> </network-security-config>
- 排查资源读取问题
可临时将CA证书内容转成Base64内嵌到配置中,替换<certificates src="@raw/ca"/>为<certificates src="data:application/x-pem-file;base64,【你的证书Base64内容】"/>,测试是否为raw资源读取异常导致的问题。
内容的提问来源于stack exchange,提问作者Patrik Nespor
相关产品推荐
相关产品推荐

