在JSSE中,证书信任管理器类就是实现了接口X509TrustManager的类。我们可以自己实现该接口,让它信任我们指定的证书。

  接口X509TrustManager有下述三个公有的方法需要我们实现:

  ⑴ oid checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException

  该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。JSSE中,默认的信任管理器类为TrustManager。

  ⑵ oid checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException

  该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。在实现该方法时,也可以简单的不做任何处理,即一个空的函数体,由于不会抛出异常,它就会信任任何证书。

  ⑶ X509Certificate[] getAcceptedIssuers()

  返回受信任的X509证书数组。

  自己实现了信任管理器类,如何使用呢?类HttpsURLConnection似乎并没有提供方法设置信任管理器。其实,HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。HttpsURLConnection提供了方法setSSLSocketFactory(SSLSocketFactory)设置它使用的SSLSocketFactory对象。SSLSocketFactory通过SSLContext对象来获得,在初始化SSLContext对象时,可指定信任管理器对象。下面用一个图简单表示这几个JSSE类的关系:

图1 部分JSSE类的关系图
  假设自己实现的X509TrustManager类的类名为:MyX509TrustManager,下面的代码片断说明了如何使用MyX509TrustManager:

//创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = {new MyX509TrustManager ()};
SSLContext sslContext = SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());

//从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();

//创建HttpsURLConnection对象,并设置其SSLSocketFactory对象
HttpsURLConnection httpsConn = (HttpsURLConnection)myURL.openConnection();
httpsConn.setSSLSocketFactory(ssf);

  这样,HttpsURLConnection对象就可以正常连接HTTPS了,无论其证书是否经权威机构的验证,只要实现了接口X509TrustManager的类MyX509TrustManager信任该证书。

  小结

  本文主要介绍了在HTTPS的证书未经权威机构认证的情况下,访问HTTPS站点的两种方法,一种方法是把该证书导入到Java的TrustStore文件中,另一种是自己实现并覆盖JSSE缺省的证书信任管理器类。两种方法各有优缺点,第一种方法不会影响JSSE的安全性,但需要手工导入证书;第二种方法虽然不用手工导入证书,但需要小心使用,否则会带来一些安全隐患。

android ssl双向验证 X509证书信任管理器类的实现及应用相关推荐

  1. 请求https,X509证书信任管理器类,避免导证书

    实现X509证书信任管理器类(避免导证书) package com.showlin.httpsDemo;import javax.net.ssl.X509TrustManager; import ja ...

  2. 请给你的短信验证码接口加上SSL双向验证

    序言 去年年底闲来几天,有位同事专门在网上找一些注册型的app和网站,研究其短信接口是否安全,半天下来找到30来家,一些短信接口由于分析难度原因,没有继续深入,但差不多挖掘到20来个,可以肆意被调用, ...

  3. Android平台手机UI应用开发——软件管理器

    第一次写博客,与大家分享源代码,博客很多地方不知道怎么设计,望见谅. 希望大家多多支持,雅林和大家一起学习Android,共同进步. 今天我们要做的这个软件管理器,主要目的是为了学习Android平台 ...

  4. DriverManager 驱动管理器类简介 JDBC简介(三)

    驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中 后续的处理就可以对这个列表进行操作 简言之,驱动管理器,就是字面含义,主要负责就是管理 驱动 概述 ...

  5. Django中--自定义模型管理器类

    BookInfo.objects.all()->objects是一个什么东西呢? 答:objects是models.Manger类的一个对象,是Django帮我自动生成的管理器对象,通过这个管理 ...

  6. Django:admin管理后台2,ModelAdmin模型管理器类

    https://docs.djangoproject.com/zh-hans/3.2/ref/contrib/admin/ admin.py from django.contrib import ad ...

  7. 【Django入门】——模型管理器对象、模型管理器类和模型类

    文章目录 一.模型管理器对象 1. 自定义模型管理器对象 2. 自定义模型管理器类 3. 自定义模型管理器类应用 3.1 重写框架的方法 3.2 封装自定义方法 4. 模型管理器对象的`model`属 ...

  8. Python Django,模型,模型管理器类(models.Manager)(与数据库交互的接口),自定义模型管理器类

    模型类.objects.all() ---> objects是Django自动生成的管理器对象,通过这个管理器对象可以实现与数据库的交互. 定义模型类时可以为模型类指定自定义的管理类对象,指定后 ...

  9. cocos植物大战僵尸(五)选择植物卡片:待选择植物卡片管理器类

    2.4.2 待选择植物卡片管理器类 此类管理所有本关卡能选择的卡片. //从关卡配置文件中读取坐标,卡片名并显示出来 bool CWaitChooseCardMgr::levelConfigLoad( ...

  10. Django中数据对象的增删改查常用方法,自定义管理器类,过滤器及F和Q对象等知识点总结

    Django对象的增删改查 我们为了对django对象的增删改查进行总结,先在model.py文件中创建类便于举例 定义学生: class Students(models.Model):sname=m ...

最新文章

  1. python中文编辑器推荐-八款Python编辑器对比介绍推荐
  2. cdh sqoop 配置_相比于手动搭建集群,使用Ambari或者CDH的必要性
  3. 【渝粤教育】国家开放大学2019年春季 0408-22T管理学基础 参考试题
  4. MachineLearning(5)-去量纲:归一化、标准化
  5. mysql主从同步搭建和故障排除
  6. 《计算机网络》第二章:物理层(The Physical Layer)
  7. sqlite 附加和分离数据库
  8. java经典错误语句_【Java】Java代码经典错误清单
  9. OSN3500 华为SDH全新板卡备件升级扩容
  10. Ubuntu菜单栏和任务栏不见了 解决方案
  11. linux shell 脚本复制特定后缀文件到另外一个文件夹下
  12. matlab拷贝不进u盘,Mac无法拷贝文件到U盘怎么办
  13. Arduino基础入门篇26—步进电机
  14. 京东上千页面搭建基石——CMS前后端分离演讲史读后感
  15. word跨文件格式刷的方法
  16. Java、JavaScript、C语言数组的创建
  17. 任务型对话(二)—— DST(对话状态追踪)
  18. 伺服控制原理 及RT and IRT
  19. kubernetes-v1.15.0安装【使用kubeadm部署Kubernetes-跳过国内网络问题】
  20. 肥牛是不是牛肉,为什么?

热门文章

  1. 深度学习系列(二)显卡驱动升级篇(笔记)
  2. oracle11g dataguard
  3. 移动机器人 | 同时定位与建图
  4. phP imageMagic抠图,使用 Lua + ImageMagick 轻松批量抠图
  5. 生物信息学二级计算机,生物信息学-张红-第二章-计算机基础
  6. Node - 从0基础到实战企业官网
  7. Win7 不支持此接口问题
  8. 又一位华为工程师倒下了 程序员的世界怎么了?
  9. ROS学习笔记之——amcl源码的解读
  10. STM32F103ZET6【标准库函数开发】----- 04串口4的IO口收发数据实验测试