Android WebView 自动校验https证书解决方案
96 浏览量
更新于2024-08-29
收藏 476KB PDF 举报
"这篇文章主要讲解了如何在Android的Webview中手动校验HTTPS证书,以解决因系统bug或其他原因导致的加载异常问题。"
在Android应用程序中,混合开发时经常使用Webview组件来加载网页内容,包括HTTPS安全连接。然而,有时由于Android系统的bug或者特定设备的问题(如华为Mate7升级到Android 7.0后),Webview可能无法正确验证HTTPS证书,导致网页无法正常打开。为了解决这个问题,我们需要自定义Webview的行为,特别是处理SSL错误的方法。
当Webview尝试加载一个HTTPS网址,如果遇到证书问题,系统会触发`onReceivedSslError()`方法。通常,如果不进行特殊处理,Webview会通过调用`super.onReceivedSslError()`来取消加载,展示白屏,以保护用户免受潜在的安全风险。但这样做会忽视证书验证,失去HTTPS的安全性。
为了在保证安全的同时解决这个问题,我们可以手动校验证书。首先,我们需要捕获`onReceivedSslError()`中的错误,并且获取网站的证书信息。这可以通过在谷歌浏览器中打开目标网址,启用开发者工具,然后导出证书。接着,可以使用在线工具(如http://www.atool.org/file_hash.php 或 http://tools.jb51.net/password/sha_encode)计算证书的SHA256哈希值。
下面是一个简单的代码示例,展示了如何实现手动证书校验:
```java
public class CustomWebViewClient extends WebViewClient {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// 获取当前加载的URL
String url = view.getUrl();
// 手动校验证书,这里仅作演示,实际应使用获取的证书SHA256值进行比较
boolean isValid = false; // 假设这里进行了校验
if (isValid) {
// 证书有效,允许加载页面
handler.proceed();
} else {
// 证书无效,提示用户并停止加载
Toast.makeText(context, "证书校验失败,无法安全加载页面", Toast.LENGTH_SHORT).show();
handler.cancel();
}
}
}
// 使用自定义的WebViewClient
webView.setWebViewClient(new CustomWebViewClient());
```
这段代码中,`isValid`变量应该根据实际获取的证书SHA256值与预期值的比较结果来设置。如果校验通过,调用`handler.proceed()`继续加载页面;否则,调用`handler.cancel()`阻止加载并给出相应提示。
通过自定义Webview的错误处理机制并手动校验证书,可以在确保安全性的同时,避免因系统bug或其他因素导致的加载失败问题。这种方法对于混合开发的应用程序尤其重要,因为它允许开发者控制证书验证流程,提高用户体验。
2460 浏览量
361 浏览量
296 浏览量
1312 浏览量
2017-04-25 上传
104 浏览量
2019-07-31 上传
232 浏览量
weixin_38625442
- 粉丝: 6
- 资源: 950
最新资源
- 行业文档-设计装置-一种平板式太阳能导热接头.zip
- PullelaSneha_152634_PHASE3
- windows server 2012无法远程登录补丁.zip
- MapMatching-new2.zip
- 布达
- matlab确定眼睛的代码-MSc_Robotics_Project:MSc_Robotics_Project
- challenge05-ignite
- 行业文档-设计装置-一种具有储藏功能的漏斗.zip
- imobiliaria:网站desenvolvido para umaimobiliária
- KepServer可以将任何工业设备的通信协议转换为opc协议,然后用OPCAutomation进行上位机数据读写。
- RouteConverter-开源
- beginner_tutorials.tar.gz
- 非调试版本-C Runtime Library11.0.51106.1
- matlab确定眼睛的代码-PupilDetection_DLC:使用训练有素的DLC网络检测瞳Kong+确定直径,位置并从结果中闪烁
- gowork:golang中的任务分配管理系统
- 行业文档-设计装置-香蕉茎纤维复合牛皮纸的制备方法.zip