美文网首页程序员程序开发之路
Https证书未经权威机构认证下如何访问站点

Https证书未经权威机构认证下如何访问站点

作者: 程序员微尘 | 来源:发表于2018-09-18 22:59 被阅读6次

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

Https证书未经权威机构认证下如何访问站点

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

首先是是默认的信任管理器TrustManager

TrustManager默认信任管理器要实现X509TrustManager接口X509TrustManager有以下三个公有的方法需要我们实现

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

该方法检查客户端的证书,若不信任该证书则抛出异常。其中chain为同位体的证书链,authType为使用的密钥交换算法,如果将 null 或长度为零的 chain 传递给 chain 参数,或者将 null 或长度为零的字符串传递给 authType 参数则会抛出IllegalArgumentException,如果证书链不受此 TrustManager 信任则会抛出CertificateException 。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。JSSE中,默认的信任管理器类为TrustManager。

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

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

⑶ X509Certificate[] getAcceptedIssuers()

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

使用自己的信任管理器类,例如MyTrustManager

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

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

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

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

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

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

以上内容整理自CSDN博主賣豆豆,自己需要用到时百度了一下也就借用了,仅供参考,如有错误烦请提醒以免误导别人

相关文章

  • Https证书未经权威机构认证下如何访问站点

    本文主要介绍了在HttpS的证书未经权威机构认证的情况下,访问HttpS站点的两种方法,一种方法是把该证书导入到J...

  • SSL认证与CA认证的区别

    作者:Gakki SSL单向认证与双向认证 SSL单向认证只要求站点部署了ssl证书就行,任何用户都可以去访问(I...

  • 实现tomcat的https单向认证及双向认证

    前言 单向认证只需站点部署了ssl证书就行,任何用户都可以去访问(IP被限制除外等),只是服务端提供了身份认证 一...

  • golang 请求 https 网站跳过证书验证

    我在用 Golang 访问 IPPBX 的管理页面时出现以下错误,因为证书是未经过认证的,而是自己创建的。 错误信...

  • docker pull 提示 ‘x509: certificat

    这个问题是本机没有远程仓库的证书文件(远程仓库是https://方式访问的) 确认证书是 crt 结尾的,不是按照...

  • https证书验证

    废话开篇:https 证书是什么?如何进行认证呢?带着这些疑问来简单的实现一下验证过程 简单的了解一下 https...

  • 搭建Nginx Https

    Certbot Https生成证书后需要CA认证。未认证的搭建好后,浏览器会首先出现此网站不安全提示,选择继续访问...

  • https站点证书是什么

    HTTPS协议是一类计算机网络通信协议,近几年,各大网站逐渐从以往的HTTP协议转移为网站使用HTTPS协议。这是...

  • iOS HTTPS 双向认证

    iOS HTTPS 双向认证 @(iOS)[网络,HTTPS] 搞了半天,记录一下,坑很多。双向认证,就是在访问网...

  • java密码技术(*) - HTTPS双向加密

    常见的https站点都是客户端用服务端提供的证书验证服务端的签名,确认自己访问的站点不是伪造的。同样的,服务端也可...

网友评论

    本文标题:Https证书未经权威机构认证下如何访问站点

    本文链接:https://www.haomeiwen.com/subject/tdwvnftx.html