Android WebView加载HTTPS站点报CertificateExpiredException无法加载问题求助
Android WebView HTTPS证书过期问题解决方案
错误根因
日志明确提示服务端SSL证书已于2021年6月16日过期,你之前配置的TLS版本支持、Provider安装仅用于解决TLS协议兼容性问题,和证书有效性校验逻辑无关,因此无法修复该错误。
由于你没有服务端操作权限,只能从客户端侧适配,分两种场景处理:
测试/内部使用场景(禁止用于正式发布)
可以临时跳过SSL证书校验,操作如下:
自定义WebViewClient,重写onReceivedSslError方法,针对证书过期错误放行:
webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // 仅放行证书过期错误,也可根据需求直接跳过所有证书错误,安全风险更高 if (error.getPrimaryError() == SslError.SSL_EXPIRED) { handler.proceed(); return; } // 其他错误走默认逻辑 handler.cancel(); } });
如果APP内还有原生HTTPS请求也需要兼容,还需自定义X509TrustManager,信任所有证书后配置给对应的HTTP客户端使用。
正式发布场景
优先选择第一种方案,合规性和安全性最高:
- 方案1:联系服务端所属的运营/运维人员,更新服务端过期的SSL证书,这是该问题的标准修复方案
- 方案2:如果无法联系服务端维护方,可将该服务端的过期证书内置到APP assets目录,自定义TrustManager仅信任该内置证书,同时忽略证书有效期校验,该方案不会引入全局信任所有证书的安全风险,可用于正式环境
内容的提问来源于stack exchange,提问作者benoffi7
相关产品推荐
相关产品推荐

