本文介绍使用okhttp时配置https证书的用法,关于证书的原理和SSL协议本文不做介绍,需要的同学自行查阅。https证书常见的错误用法是信任所有证书,https证书在移动应用中常见的问题是证书过期但客户端无法及时更新的问题。本文列举了几种配置方法,并做简单总结:

1、验证系统中信任的根证书(默认)

  • 不适合自颁发的证书(12306.cn)
  • 一般不会存在中间人劫持问题,原因如下:

    • Android 内置的 SSL 的实现是引入了Conscrypt 项目,而 HTTP(S)层则是使用的2.x的 OkHttp。而 SSL 层只负责校验证书的真假,对于所有基于SSL 的应用层协议,需要自己来校验证书实体的身份,因此 Android 默认的域名校验则由 OkHostnameVerifier 实现的,默认是校验域名的。如果使用其他网络库则需要check一下是否校验的域名。

    • WebView的默认校验证书规则也会校验域名,检查到如果网站部署的SSL证书不是浏览器受信任的根证书颁发机构,则会有安全警告。

    • 受信任的根证书颁发机构,在别人申请证书时会校验 域名所有权验证。

2、验证本地证书(certificate pinning),cer 和 pem 格式都可以

  • 本地证书打包在App内,无法及时更新,无法应对证书过期或吊销问题。
  • 如果是自颁发的证书,期限尽可能设置长点,如果是信任机构颁发的证书,则需要在过期前提前放置新证书,实现平滑过渡。
client = OkHttpClientUtil.getSSLClient(client,this,"12306.cer");

3、不验证任何证书

  • 存在中间人劫持问题
client = OkHttpClientUtil.getTrustAllSSLClient(client);

总结

  • 1、使用自颁发的长期限的本地证书(方法2)最安全省事。
  • 2、推荐使用我封装的RetrofitPlus,里边包含了本文的配置,还有更方便的retrofit用法:https://github.com/MasonLiuChn/RetrofitPlus
  • 3、本文代码:https://github.com/MasonLiuChn/TestOkhttpSSL

更多相关文章

  1. 关于Android应用程序漏洞的防护措施
  2. Android(安卓)_实现SSL解决不受信任的证书问题
  3. 使用webView访问https的url-处理SslError解决android2.2版本之前
  4. 应用在华为P9手机上安装失败原因分析 (错误码:-110)
  5. Android(安卓)App 安全的HTTPS 通信
  6. Android:用 SQLite 实现 用户的登录查询功能(详解+效果图)
  7. 保护Android上的通信安全
  8. Tomcat双向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动
  9. Android(安卓)Studio获取SHA1和MD5值---》图文直播

随机推荐

  1. 增加android-support-v4.jar
  2. Android(安卓)GLSurfaceView在屏幕旋转后
  3. Android腾讯微薄客户端开发十四:首页menu
  4. Android(安卓)debug summary
  5. 苦逼啊--qt for android 5.4.1 camera
  6. 【Android(安卓)Studio】 Caused by: jav
  7. 【android】AudioManager音量控制
  8. Android中贪吃蛇游戏的学习(四)
  9. Gradle 的配置
  10. Android(安卓)Ftp 简单上传下载