移动端HTTPS请求报证书错误,怎么安全处理信任问题?

百里振巧 阅读 62

在开发Android混合应用时,用fetch请求后台接口,突然出现NET::ERR_CERT_AUTHORITY_INVALID错误。测试环境用的是自签名证书,但iOS没问题,Android直接拦截请求。试过在代码里强行忽略证书验证,但被框架禁止了,怎么办?

代码是这样的:


fetch('https://api.example.com/data', {
  method: 'GET',
  headers: { 'Content-Type': 'application/json' }
})
.then(response => {
  if (!response.ok) throw new Error('网络错误');
  return response.json();
})
.catch(err => console.log('证书校验失败:', err));

查了资料说需要配置证书信任,但移动端H5页面能直接操作底层证书吗?如果必须通过原生桥接,前端该给开发团队提供什么具体参数或配置?

我来解答 赞 20 收藏
二维码
手机扫码查看
2 条解答
 ___蕴轩
这种情况我遇到过,Android对证书校验确实比iOS严格得多。先说结论:自签名证书在生产环境肯定不能用,测试环境的话可以这样处理:

1. 对于测试环境,建议让后端开发生成一个正规CA签发的测试证书(比如用Let's Encrypt),这是最安全省事的方案。自签名证书现在越来越不受待见了。

2. 如果非要用自签名证书,Android原生这边需要配置网络安全配置。在res/xml/network_security_config.xml里添加类似这样的配置:
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">api.example.com</domain>
<trust-anchors>
<certificates src="@raw/my_cert"/>
</trust-anchors>
</domain-config>
</network-security-config>


然后把证书文件放到res/raw/my_cert.cer,并在AndroidManifest里引用这个配置。

3. 前端H5没法直接绕过证书校验,必须通过原生桥接。可以封装一个原生方法让H5调用,把需要忽略证书校验的域名白名单传给原生。

安全警告:这些方法都只适用于开发和测试阶段!上线必须用正规CA签发的证书,强行绕过证书验证会埋下中间人攻击的安全隐患。我之前就踩过坑,被安全团队揪出来要求整改...

另外注意Android 7.0开始系统不再信任用户安装的证书,所以方案2在Android 7+设备上可能还需要用户手动安装证书到系统证书库。
点赞
2026-03-08 13:07
梦雅~
梦雅~ Lv1
移动端用自签名证书测试,Android H5没法直接信任证书,得让原生侧配置证书校验白名单。你这边把域名和证书指纹给原生开发,让他们在WebView或网络请求层加信任配置,绕过证书拦截。前端强行忽略校验不安全也不推荐,生产环境记得换成合法证书。
点赞 9
2026-02-08 08:13