Android Studio信任锚问题:找不到证书路径的信任锚
解决Android中“Trust anchor for certification path not found”错误
问题根源分析
你遇到的错误本质是Android系统无法验证目标API(https://myjson.dit.upm.es/)的SSL证书信任链。结合你的代码和描述,核心问题大概率出在**网络安全配置(network_security_config)**上,而非Retrofit或API调用逻辑——你的Retrofit代码本身没有语法或逻辑错误。
视频作者未出现该问题,可能是因为他的项目未自定义网络安全配置,系统默认信任了目标API的公共CA证书;或是他的配置文件正确包含了信任规则。
具体解决方案
情况1:目标API使用公共CA签发的合法证书(推荐先验证此情况)
先通过浏览器访问https://myjson.dit.upm.es/api/bins/3mei,如果浏览器未提示证书不安全,说明该API的证书是受公共CA信任的。此时问题出在你的网络安全配置限制了信任范围:
- 打开
res/xml/network_security_config.xml(如果没有则跳过下一步,直接移除Manifest中的配置) - 修改配置,让系统同时信任系统默认的公共CA和你自定义的证书(如果需要保留自定义证书):
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <!-- 信任系统默认的公共CA证书 --> <certificates src="system"/> <!-- 如果你需要保留自定义证书,保留这一行;不需要则删除 --> <certificates src="@raw/your_custom_cert"/> </trust-anchors> </base-config> </network-security-config> - 如果你不需要自定义网络安全规则,直接删除
AndroidManifest.xml中application标签下的android:networkSecurityConfig="@xml/network_security_config"属性,恢复系统默认信任逻辑。
情况2:目标API使用自签名证书(针对特殊场景)
如果目标API确实使用自签名证书(但myjson.dit.upm.es大概率不是),需正确导入目标域名的证书:
- 用浏览器打开目标API地址,导出证书(以Chrome为例:地址栏锁图标 → 证书 → 详细信息 → 复制到文件 → 选择DER格式)
- 将导出的证书重命名为
.crt后缀,放到app/src/main/res/raw目录(无raw目录则新建) - 修改
network_security_config.xml,仅对目标域名信任该证书:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config> <domain includeSubdomains="true">myjson.dit.upm.es</domain> <trust-anchors> <certificates src="@raw/your_exported_cert"/> </trust-anchors> </domain-config> </network-security-config>
额外检查点
- 确认
AndroidManifest.xml中的android:usesCleartextTraffic="false"无需修改,因为你访问的是HTTPS接口。 - 不要给localhost导入证书,你的请求目标是远程API,localhost证书完全无关。
内容的提问来源于stack exchange,提问作者bsudhir6
相关产品推荐
相关产品推荐

