Android Retrofit调用本地ASP.NET API出现Trust anchor认证路径未找到错误
本地Android调用ASP.NET自签名接口证书校验错误解决方案
核心原因排查&修复
- 证书SAN字段缺失(90%概率触发)
Android 7.0及以上版本证书校验优先读取X509v3 Subject Alternative Name(SAN)字段,不再兼容仅填CN(通用名称)的旧证书。
执行命令查看证书内容:
openssl x509 -in 你的证书pem文件路径 -text -noout
如果输出中没有IP Address:10.0.2.2的SAN条目,重新生成自签名证书,必须将10.0.2.2加入IP类型的SAN字段。ASP.NET开发证书可通过以下命令重新生成带SAN的版本:
# 清理原有开发证书 dotnet dev-certs https --clean # 生成包含10.0.2.2的新开发证书 dotnet dev-certs https -ep ./localhost.pfx -p 自定义密码 --san "DNS:localhost,IP:127.0.0.1,IP:10.0.2.2" # 信任新证书 dotnet dev-certs https --trust
之后重新导出根CA转PEM格式放入项目raw目录即可。
- 配置文件路径/命名错误
- 确认
network_security_config.xml文件存放路径为res/xml/,文件名全小写,Android资源严格区分大小写 - 确认
res/raw/目录下的证书文件名为localhost(raw资源引用自动忽略后缀,不要保留.pem/.cer后缀) - 确认AndroidManifest中
android:networkSecurityConfig="@xml/network_security_config"属性直接写在<application>标签下,未嵌套在其他子标签内
网络框架自定义配置覆盖系统规则
如果给Retrofit依赖的OkHttpClient配置了自定义SSLSocketFactory或X509TrustManager,会覆盖系统网络安全配置的信任规则。要么删除自定义SSL配置让OkHttp使用系统默认信任管理器,要么将你的自定义CA手动加入自定义TrustManager的信任列表。低版本系统兼容问题
如果你的targetSdkVersion低于24(Android 7.0),系统原生不支持network_security_config配置,需要手动给OkHttp配置自定义信任管理器才能生效。
临时调试方案
仅本地开发时可在network_security_config中添加调试覆盖规则,debug包自动信任指定证书无需额外配置:
<network-security-config> <debug-overrides> <trust-anchors> <certificates src="@raw/localhost"/> <certificates src="user"/> </trust-anchors> </debug-overrides> <domain-config> <domain includeSubdomains="false">10.0.2.2</domain> <trust-anchors> <certificates src="@raw/localhost"/> </trust-anchors> </domain-config> </network-security-config>
内容的提问来源于stack exchange,提问作者Salim
相关产品推荐
相关产品推荐

