Android APP之WebView如何校验SSL证书
Android系统的碎片化很严重,并且手机日期不正确、手机根证书异常、com.google.android.webview BUG等各种原因,都会导致WebViewClient无法访问HTTPS站点。SSL错误的处理方式十分关键,如果处理不当,可能导致中间人攻击,黑客窃听数据,进而引发安全事故。
严谨地处理onReceivedSslError尤为重要。请参考以下代码,原理是:如果webview报告SSL错误,程序将会对服务器证书进行强校验,如果服务器传入证书的指纹(sha256)与记录值一致,说明webview验证过程存在缺陷(如:手机日期错误、根证书被删除 等),忽略SSL错误;如果证书匹配失败,表明数据通信有问题,保留阻断。
请先点击 这里,获取证书的指纹(sha256),然后调整代码中的MySSLCNSHA256数组变量。如果APP需要访问多张证书,请在代码中加入多个证书指纹数值。在测试代码时,请将手机日期设置在证书有效期之前,判断WebView是否能正常访问HTTPS站点。
webview.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
if (error.getPrimaryError() == SslError.SSL_DATE_INVALID // 日期不正确
|| error.getPrimaryError() == SslError.SSL_EXPIRED // 日期不正确
|| error.getPrimaryError() == SslError.SSL_INVALID // webview BUG
|| error.getPrimaryError() == SslError.SSL_UNTRUSTED) { // 根证书丢失
if (chkMySSLCNCert(error.getCertificate())) {
handler.proceed(); // 如果证书一致,忽略错误
}
}
}
private boolean chkMySSLCNCert(SslCertificate cert) {
byte[] MySSLCNSHA256 = { 35, 76, 110, -121, -68, -104, -12, 84, 39, 119, -55,
101, 95, -8, -90, 9, 36, -108, 5, -57, 76, -98, -19, -73, 91, -37, 18,
64, 32, -41, 0, 109 }; //证书指纹
Bundle bundle = SslCertificate.saveState(cert);
byte[] bytes = bundle.getByteArray("x509-certificate");
if (bytes != null) {
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate ca = cf.generateCertificate(new ByteArrayInputSteam(bytes));
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] Key = sha256.digest(((X509Certificate) ca).getEncoded());
return Arrays.equals(key, MySSLCNSHA256);
} catch (Exception Ex) {}
}
return false;
}
}
原创文章,转载请注明文章来源 https://www.myssl.cn
Android APP之WebView如何校验SSL证书的更多相关文章
- 为你的Android App实现自签名的 SSL 证书(转)
介绍 网络安全已成为大家最关心的问题. 如果你利用服务器存储客户资料, 那你应该考虑使用 SSL 加密客户跟服务器之间的通讯. 随着这几年手机应用迅速崛起. 黑客也开始向手机应用转移, 原因有下列3点 ...
- Android app去掉https签名校验
本文同步至http://javaexception.com/archives/30 问题: 之前的一个开源项目碰到了一个问题,Fix CertPathValidatorException: Trust ...
- Android WebView访问SSL证书网页(onReceivedSslError)
Android WebView访问https SSL证书网页,如淘宝,需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebView ...
- 八大免费SSL证书-给你的网站免费添加Https安全加密
评论» https://www.freehao123.com/top-8-free-ssl-cert/ 文章目录 Let's Encrypt StartSSL SSL CloudFlare SSL ...
- android中使用https是否对服务证书合法性校验的新的体会
package com.cetcs.logreport.utils; import android.content.Context; import org.apache.http.conn.ssl.S ...
- Fiddler如何抓取使用了SSL或TLS传输的Android App流量
上篇文章介绍了Burpsuite如何抓取使用了SSL或TLS传输的Android App流量, 那么使用Fiddler的时候其实 也会出现与burpsuite同样的情况,解决方案同样是需要将Fiddl ...
- Https系列之四:https的SSL证书在Android端基于okhttp,Retrofit的使用
Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...
- android端,webview内url跳转到app本地
这是和一个前端同事沟通. app内嵌入他的web页,要通过web页内的url跳转到app的详细内容. 他的android同事,没有思路. 其实嵌入web页,用的webview控件,只要能找到webvi ...
- Android HTTPS如何10分钟实现自签名SSL证书
前言 去年公司内一个应用加了支付宝支付功能,为了保证安全,支付请求链接写成了https. 由于公司服务器使用的是的自签名证书,而在Android系统中自己签署的不能通过验证的,所以会抛出错误. 于是我 ...
随机推荐
- [Go] golang实现mysql连接池
golang中连接mysql数据库,需要使用一个第三方类库github.com/go-sql-driver/mysql,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现 一般连 ...
- [Linux] centos6.5升级安装的supervisor
因为我要用它来管理多个PHP进程去执行任务,在默认版本下的配置多个子进程不起作用 默认版本的supervisor版本比较低2.1.9,对于运行多个子进程貌似有问题,最新版的supervisor4.1的 ...
- 使用flask搭建微信公众号:完成token的验证
上一篇文章讨论了官方给的例子验证token失败的解决方法:微信公众号token验证失败 想了一下,还是决定不适用web.py这个框架.因为搜了一下他的中文文档不多,学起来可能会有点麻烦.而且看着他没有 ...
- Git之SSH公钥与私钥
今天来探讨一下如何使用Git的操作,来进一步的实现代码的下载到本地,我原来也不是很明白git中生成公钥和私钥的作用,我一直在想,git里面你把自己的公钥发给了git的服务器,他是怎么判断的,每一次我换 ...
- gn-build
I'm not completely sure from the error you describe but it sounds like you don't have a .gn file in ...
- 富文本编辑器Simditor
文档地址:https://simditor.tower.im/docs/doc-usage.html 父组件: options: { placeHolder: 'this is placeHolder ...
- Python网络编程基础 ❸ struct模块 基于upd的socket服务
struct模块 基于upd的socket服务
- vue_day05
目录 vue前后端交互: vue 分离前后端交互: vue前端发送请求: vue请求插件--axios: main.js配置: 前端朝后端请求传参方式: django后端返回数据样式: vue配置El ...
- ABP AOP 用例
介绍 在本文中,我将向您展示如何创建拦截器来实现AOP技术.我将使用ASP.NET Boilerplate(ABP)作为基础应用程序框架和Castle Windsor作为拦截库.这里描述的大多数技术对 ...
- 详解 IaaS、PaaS和SaaS 以及他们各自的代表公司
——IaaS,PaaS和SaaS 是云计算领域的专业术语,也是云计算的三种服务模式. (1)SaaS:Software as a Service,软件即服务(也称为云应用程序服务) . 云市场中企 ...