Android WebView 自动校验https证书解决方案
109 浏览量
更新于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或其他因素导致的加载失败问题。这种方法对于混合开发的应用程序尤其重要,因为它允许开发者控制证书验证流程,提高用户体验。
2016-10-21 上传
2020-08-28 上传
点击了解资源详情
2020-08-29 上传
2014-02-20 上传
2019-07-31 上传
2017-04-25 上传
2015-11-19 上传
weixin_38625442
- 粉丝: 6
- 资源: 950
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍