Android WebView打开链接遇SSL握手失败错误求助(net_error -202)
Android WebView SSL握手失败(net_error -202)解决方案
问题分析
你遇到的chromium: [ERROR:ssl_client_socket_impl.cc(878)] handshake failed; returned -1, SSL error code 1, net_error -202错误,对应ERR_CERT_AUTHORITY_INVALID,说明目标网站的SSL证书签发机构不在Android系统的信任列表中。Chrome能正常访问是因为它有独立的信任存储,可能已自动信任该证书或其签发机构,而WebView依赖系统信任存储,因此出现握手失败。
你当前的网络安全配置仅允许明文流量(cleartextTrafficPermitted="true"),和HTTPS证书信任问题无关,所以无法解决该错误。
解决方案
1. 修正网络安全配置(推荐,安全合规)
如果目标网站使用自签名证书或私有CA签发的证书,需在网络安全配置中添加对该CA的信任:
- 将CA证书(.pem或.crt格式)放到
res/raw目录下 - 修改
network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config> <!-- 替换为你的目标域名 --> <domain includeSubdomains="true">your-domain.com</domain> <trust-anchors> <!-- 引用raw目录下的CA证书 --> <certificates src="@raw/your_ca_certificate"/> <!-- 如需同时信任系统默认CA,保留此行;仅信任私有CA则删除 --> <certificates src="system"/> </trust-anchors> </domain-config> </network-security-config>
- 确保在
AndroidManifest.xml的<application>标签中引用该配置:
<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
2. 临时测试方案(仅用于开发/测试环境,禁止生产使用)
如果只是测试需要,可以通过WebViewClient忽略SSL错误,但这会带来严重安全风险,可能导致中间人攻击:
webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // 仅测试环境使用,生产环境请调用handler.cancel()并提示用户证书异常 handler.proceed(); } });
3. 其他排查点
- 检查证书链完整性:部分服务器未配置完整的证书链,Chrome会自动补全,但WebView不会。可通过本地SSL检测工具验证证书链,若不完整需服务器端补充中间证书。
- 适配Android系统版本:旧版本Android(如Android 9及以下)不支持TLS 1.3,若服务器仅启用TLS 1.3,需在服务器端兼容TLS 1.2及以下版本。
- 确认域名配置:检查
<domain>标签中的域名是否正确,includeSubdomains="true"是否符合你的需求。
内容的提问来源于stack exchange,提问作者Bhaskar Jyoti Dutta
相关产品推荐
相关产品推荐

