Android App实体设备运行正常 模拟器启动崩溃报SSLHandshakeException错误
错误原因
该报错为SSL握手失败触发,根因是当前使用的网络环境部署了Netskope安全网关,它会对所有HTTPS请求做中间人拦截,将服务端证书替换为Netskope自签发的自定义证书。Android模拟器的系统信任根证书库默认没有收录该Netskope根证书,因此Firebase请求验证证书不通过触发崩溃。实体设备运行正常是因为设备要么没有接入当前带Netskope拦截的网络,要么已经提前安装了Netskope根证书到系统信任区。
修复方案
- 方案1:为模拟器安装Netskope根证书
先从本地电脑的浏览器/证书管理器中导出caadmin.netskope.com对应的根证书,保存为PEM/CER格式。打开Android模拟器,依次进入「设置 → 安全 → 加密和凭据 → 安装证书」,选中导出的证书文件,选择安装为「受信任的根证书」,重启模拟器后重新运行应用即可。 - 方案2:临时关闭Netskope代理拦截
本地开发测试时可以直接退出电脑端的Netskope客户端,或者关闭它的HTTPS流量拦截功能,模拟器的网络请求不会被中间人替换证书,即可正常请求Firebase相关服务。 - 方案3:应用debug版本临时信任用户证书(仅测试用)
在项目res/xml目录下新建network_security_config.xml文件,添加如下配置:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <debug-overrides> <trust-anchors> <!-- 信任系统根证书 --> <certificates src="system" /> <!-- 信任用户手动安装的根证书 --> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config>
随后在AndroidManifest.xml的<application>标签中添加属性:android:networkSecurityConfig="@xml/network_security_config"
该配置仅作用于debug编译版本,不会影响正式发布包,可快速解决本地测试的证书校验问题。
注意:禁止在生产版本的网络安全配置中添加信任用户证书的逻辑,会导致应用面临中间人攻击的安全风险。
内容的提问来源于stack exchange,提问作者swetha Naga
相关产品推荐
相关产品推荐

