Hostgator启用免费SSL后Android7.0报证书信任锚未找到异常
问题根因
报错触发的核心原因有两个:
- 服务端SSL证书链配置不全:Hostgator部署的免费SSL证书如果只上传了域名自身的证书、没有拼接对应的中间CA证书,Android 7.0(API24)及更早版本的系统内置信任库没有对应中间证书的信任锚,就会抛出
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found错误。Android 11(API30)及以上版本更新了内置根证书列表,同时自带缺失中间证书的自动补全校验逻辑,所以可以正常访问。 - 客户端网络安全配置写法错误,完全未生效:你当前的
network_security_config.xml存在语法错误,<trust-anchors>标签下不支持直接嵌套<domain>节点,且<debug-overrides>节点仅在debug构建变体下生效,对正式发布的包没有任何作用。
修复方案
1. 优先修复服务端配置(根本解决手段)
这一步是解决问题的核心,不要跳过直接改客户端:
- 登录Hostgator的cPanel面板,进入「SSL/TLS」管理页,选中你的域名
innovativeapps.me - 检查已部署的证书内容:完整的证书配置需要包含两段及以上证书内容,第一段是你的域名专属证书,第二段要拼接对应签发机构的中间CA证书(一般是Let's Encrypt的R3中间证书,签发证书时签发方会同时提供该文件),不能只粘贴域名自身的证书。
- 保存证书配置后重启对应的web服务(Apache/Nginx),可以用openssl命令校验配置是否正确:执行
openssl s_client -connect innovativeapps.me:443 -showcerts,返回结果中如果能看到从域名证书到中间CA的完整证书链路,就说明服务端配置正确。
只要服务端证书链配置完整,不需要改动任何客户端请求代码,就能兼容所有Android版本的系统。
2. 修正客户端网络安全配置
把你当前的network_security_config.xml替换为以下正确写法即可:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config> <domain includeSubdomains="true">innovativeapps.me</domain> <trust-anchors> <!-- 信任系统内置根证书,服务端证书链配置正确时用该规则即可正常访问 --> <certificates src="system" /> </trust-anchors> </domain-config> <!-- 仅debug构建生效,方便本地抓包测试,正式包不会加载该配置 --> <debug-overrides> <trust-anchors> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config>
注意:配置域名时不要加
https://前缀,直接填写裸域名即可。
避坑提醒
不要为了兼容老版本在客户端添加全局忽略SSL证书校验的逻辑,这种写法会让HTTPS连接完全失去加密防护,极易遭遇中间人攻击,属于高危安全漏洞。
内容的提问来源于stack exchange,提问作者Panache
相关产品推荐
相关产品推荐

