在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的安全性,但需要手工导入证书;第二种方法虽然不用手工导入证书,但需要小心使用,否则会带来一些安全隐患。

X509证书信任管理器类的实现及应用相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Java-GUI编程实战之管理系统 Day2【Swing(组件介绍、布局管理器、事件类及监听器类)、基础组件按钮和输入框的用法】

    视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...

  10. Django框架(16.Django中的模型类管理器以及自定义管理器)

    模型类.objects.all()->objects是一个什么东西呢? 答:objects是Django帮我自动生成的管理器对象,通过这个管理器可以实现对数据的查询. objects是model ...

最新文章

  1. list redis 怎样做排行_学 Redis 的 7000 字小结!!!
  2. PL/SQL 中Returning Into的用法
  3. web项目路径如何更改
  4. VC调试信息输出 TRACE宏
  5. 去年的今天我做了些什么?
  6. java程序 输入10个数字并求和
  7. python 密码学 模块_python学习-itsdangerous模块-黑马程序员技术交流社区
  8. 前端学习(1330):数据库相关概念
  9. repositoryitemlookupedit根据每行的id绑定数据_一种根据数据库自增ID生成唯一ID的解决方案...
  10. Springboot整合ES
  11. 面试项目亮点_当面试官谈到项目经验的时候,你知道怎么回答吗?怎么反过来控制面试流程?...
  12. es system call filters failed to install; check the logs and fix your configuration or disable syste
  13. arm开发板嵌入式 linux 修改开机启动logo,ARM开发板 嵌入式Linux 修改开机启动LOGO...
  14. java 接口传数组_Restful接口传递数组参数
  15. android 8字体下载,安卓手机字体
  16. 思科交换机路由器破解密码
  17. Django发送电子邮件
  18. android控件属性大全
  19. 一个画板十年工程师的PCB设计经验分享
  20. 激活函数的作用是什么

热门文章

  1. 批处理 使用Win7照片查看器
  2. 蛙跳算法优化VMD参数,惩罚系数,分解层数,matlab语言 ,最小包络熵为适应度函数。
  3. 使用matlab编写协方差矩阵计算矩阵
  4. 计算矩阵A与矩阵B的欧式距离
  5. html颜色渐变配色方案,css网站推荐 渐变色配色方案 - 小俊学习网
  6. 微信小程序input只允许输入数字
  7. 请求头添加token
  8. 数据结构——p = new Lnode和Lnode *p有什么区别
  9. 互联网大佬生存法则:如何防守周鸿祎?
  10. 大学生如何学习c语言!