在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. linux常用的引导管理器,多重引导管理器Grub使用详解

    多重引导管理器Grub使用详解 1.问题的提出 目前发行的Linux版本大多用LILO实现多系统引导,但不同版本的LILO有同样的一个问题:根分区(/boot分区)不能分在1024柱面(约8.4GB ...

  3. yum(Fedora和RedHat以及SUSE中的Shell前端软件包管理器)命令详解

    yum官方网站:http://yum.baseurl.org/ Fedora对于yum的介绍:http://fedoraproject.org/wiki/Yum yum(全称为 Yellow dog ...

  4. linux软件包管理工具,Linux 软件包管理器-----yum配置详解一

    一.yum简介 Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定 ...

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

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

  6. ios开发读取剪切板的内容_iOS中管理剪切板的UIPasteboard粘贴板类用法详解

    一.自带剪切板操作的原生UI控件在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField.UITextView与UIWebView.在这些控件的文字交互处进行长按手势可以在屏幕视图 ...

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

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

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

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

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

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

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

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

最新文章

  1. linux 卡在grub_详解ubuntu双系统启动时卡死解决办法
  2. 返回空的List集合
  3. 二值化函数Threshold
  4. 区块链BaaS云服务(38)点存DCpool分布式存储
  5. 2、mybatis主配置文件之properties
  6. debian6 xen4.0安装 guest半虚拟化--debootstrap安装
  7. 学硕论文选题计算机,计算机硕士论文题目分享
  8. hadoop与mysql的区别_数据库与hadoop与分布式文件系统的区别和联系
  9. Linux时间子系统之一:clock source(时钟源)
  10. 代码管理学:安排新员工看代码,因为主管不会管理,不负责任
  11. 并发编程学习之volatile关键字
  12. 翻转课堂管理系统_ER图_功能图_数据字典_数据库脚本
  13. matlab的机器学习工具箱在哪,[matlab]机器学习及SVM工具箱学习笔记
  14. 芯片查询选型网址汇总
  15. Python LeetCode 数组中的最长山脉
  16. 【演歌】北の漁場 (北方的渔场) 歌词翻译
  17. 推荐一个开源电子白板,教学专用。
  18. 在线零售的未来看起来就是网红的带货直播
  19. 系统错误——Required request body is missing:
  20. 此计算机未配置为允许委派用户凭据,Kerberos 协议转换和受限委派

热门文章

  1. TikTok干货分享:创作者基金申请流程及常见问题解答
  2. vue单页面怎么做SEO优化
  3. feed机制、fetch机制
  4. 2020年中国海洋大学夏令营记录
  5. Big Endian与Little Endian区别
  6. 网页在线验证工具(W3C国际标准验证)
  7. 新高考如何选科?职引教你一招简单又直接的方法
  8. 虚拟路由器冗余协议——VRRP
  9. 如何在liunx上搭建服务器资源监控平台
  10. 论文邮箱不是导师的_我的漫漫读研路,就是导师对我的套路