移动端HTTPS请求报证书错误,怎么安全处理信任问题?
在开发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页面能直接操作底层证书吗?如果必须通过原生桥接,前端该给开发团队提供什么具体参数或配置?
1. 对于测试环境,建议让后端开发生成一个正规CA签发的测试证书(比如用Let's Encrypt),这是最安全省事的方案。自签名证书现在越来越不受待见了。
2. 如果非要用自签名证书,Android原生这边需要配置网络安全配置。在
res/xml/network_security_config.xml里添加类似这样的配置:然后把证书文件放到
res/raw/my_cert.cer,并在AndroidManifest里引用这个配置。3. 前端H5没法直接绕过证书校验,必须通过原生桥接。可以封装一个原生方法让H5调用,把需要忽略证书校验的域名白名单传给原生。
安全警告:这些方法都只适用于开发和测试阶段!上线必须用正规CA签发的证书,强行绕过证书验证会埋下中间人攻击的安全隐患。我之前就踩过坑,被安全团队揪出来要求整改...
另外注意Android 7.0开始系统不再信任用户安装的证书,所以方案2在Android 7+设备上可能还需要用户手动安装证书到系统证书库。