java中远程连接忽略证书_忽略Java中的自签名证书

java中远程连接忽略证书

我在职业生涯中遇到过几次问题,就是我们有时希望允许自签名证书用于开发或测试目的。 Google的快速搜索显示了多年来无数Java开发人员遇到的麻烦。

根据确切的证书问题,您可能会收到类似以下内容之一的错误,尽管我几乎肯定有其他表现形式:

java.security.cert.CertificateException: Untrusted Server Certificate Chainjavax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

要解决此问题,通常需要修改JDK信任库文件,这可能会很痛苦,而且常常会遇到麻烦。 最重要的是,您团队中的每个开发人员都必须做同样的事情,并且您在每个新环境中都会遇到相同的问题。

幸运的是,有一种方法可以以通用的方式解决问题,而不会给开发人员带来任何负担。 我们将重点介绍普通的HttpURLConnection类型的连接,因为它是最通用的类​​型,仍应帮助您了解其他库的使用方向。 如果您使用的是Apache HttpClient,请参见此处 。

警告:知道您在做什么!

请注意使用此代码的含义:这意味着您完全不关心主机验证,而仅使用SSL来加密通信。 您不是要防止中间人攻击,也不是要确保您已连接到您认为是的主机。 通常可以归结为以下几种有效情况:

  1. 您在锁定的LAN环境中操作。 您不容易受到攻击者拦截的请求(或者,如果存在,则问题更大)。
  2. 您所处的测试或开发环境中,确保通信安全并不重要。

如果这符合您的需求,请继续进行。 否则,也许要三思而后行地想要完成什么。

解决方案:修改信任管理器

既然我们已经放弃了这个免责声明,我们就可以解决当前的实际问题。 Java允许我们控制负责验证HttpsURLConnection的主机和证书的对象。 这可以在全球范围内完成,但是我敢肯定,有经验的人会畏缩于做出如此彻底的改变的想法。 幸运的是,我们还可以根据每个请求进行操作,并且由于很难在网络上找到此类示例,因此我在下面提供了代码。 这种方法很好,因为您无需在全球范围内换掉SSLSocketFactory实现。

随时获取它并在您的项目中使用它。

package com.mycompany.http;import java.net.*;
import javax.net.ssl.*;
import java.security.*;
import java.security.cert.*;public class TrustModifier {private static final TrustingHostnameVerifierTRUSTING_HOSTNAME_VERIFIER = new TrustingHostnameVerifier();private static SSLSocketFactory factory;/** Call this with any HttpURLConnection, and it willmodify the trust settings if it is an HTTPS connection. */public static void relaxHostChecking(HttpURLConnection conn)throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {if (conn instanceof HttpsURLConnection) {HttpsURLConnection httpsConnection = (HttpsURLConnection) conn;SSLSocketFactory factory = prepFactory(httpsConnection);httpsConnection.setSSLSocketFactory(factory);httpsConnection.setHostnameVerifier(TRUSTING_HOSTNAME_VERIFIER);}}static synchronized SSLSocketFactoryprepFactory(HttpsURLConnection httpsConnection)throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {if (factory == null) {SSLContext ctx = SSLContext.getInstance("TLS");ctx.init(null, new TrustManager[]{ new AlwaysTrustManager() }, null);factory = ctx.getSocketFactory();}return factory;}private static final class TrustingHostnameVerifier implements HostnameVerifier {public boolean verify(String hostname, SSLSession session) {return true;}}private static class AlwaysTrustManager implements X509TrustManager {public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { }public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { }public X509Certificate[] getAcceptedIssuers() { return null; }}}

用法

要使用上面的代码,只需在打开流之前调用RelaxHostChecking()方法即可:

URL someUrl = ... // may be HTTPS or HTTP
HttpURLConnection connection = (HttpURLConnection) someUrl.openConnection();
TrustModifier.relaxHostChecking(connection); // here's where the magic happens// Now do your work!
// This connection will now live happily with expired or self-signed certificates
connection.setDoOutput(true);
OutputStream out = connection.getOutputStream();
...

在那里,它是支持自签名证书的本地化方法的完整示例。 这不会影响您的应用程序的其余部分,而其余部分将继续具有严格的托管检查语义。 可以扩展此示例以使用配置设置来确定是否应使用宽松的主机检查,并且如果使用此代码主要是通过自签名证书进行开发的一种方式,我建议您这样做。

参考:在Carfey Software Blog上, 忽略了我们JCG合作伙伴提供的Java自签名证书 。

相关文章 :
  • 使用Spring Security 3.1保护RESTful Web服务
  • 使用Spring Security保护GWT应用程序的安全
  • JBoss 4.2.x Spring 3 JPA Hibernate教程
  • 调试生产服务器– Eclipse和JBoss展示
  • Java EE6 CDI,命名组件和限定符
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/12/ignoring-self-signed-certificates-in.html

java中远程连接忽略证书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BurpSuite插件 -- FastjsonScan(反序列化检测)

你可以因为现任不好二分手,但千万不要认为别人更好,永远有人更好,眼下便是更好。。。 ---- 网易云热评 一、插件介绍: 一个简单的Fastjson反序列化检测burp插件,我在挖洞的时候看到一些json请求总是想要检测一下有没有…

开发人员对Spring vs JavaEE的看法

在Java社区中,Spring vs JavaEE是一个永无止境的争论。 在这样的辩论中,人们组成一个团体,由两个传播者,建筑师和一个平台的核心粉丝组成,并且不断进行辩论。 参与辩论的人可能是负责平台选择的架构师。 但是开发人员会…

使自定义控件居中于父容器的计算公式

frm.Top (this.panelListView.Height - frm.Height) / 2; frm.Left (this.panelListView.Width - frm.Width) / 2; 设置两个值,top和left,公式:用父容器的长宽减去自定义控件的长宽然后除以二。转载于:https://www.cnblogs.com/llcdbk/p/46…

查看linux电脑总内存,如何查看Linux系统中的内存使用情况的命令呢?

有些命令可用于检查Linux系统中的内存使用情况。这是一些更好的命令。有很多工具可以查看Linux系统中的内存使用情况。一些命令被广泛使用,例如free和ps。其他命令允许以多种方式显示系统的性能统计信息,例如top。在本文中,我们将介绍一些命令…

如何玩转CSS的Id 和 Class选择器?

目录 id 和 class 选择器 id 选择器 class 选择器 id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置”id” 和 “class”选择器。 id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。 HTML元素以id属性来设置id选择器,CSS 中 id…

【工具使用】Xray与Burp联动--流量转发插件Passive Scan Client

Burp被动扫描流量转发插件:Passive Scan Client 0x01 插件编译 插件地址:https://github.com/c0ny1/passive-scan-client rootkali:~# git clone https://github.com/c0ny1/passive-scan-client.git rootkali:~# cd passive-scan-client/ rootkali:~/passive-scan…

linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】

(基于LINUX的操作系统实验教程)(最终版)《基于LINUX的操作系统实验教程.doc》由会员分享,可免费在线阅读全文,更多与《(基于LINUX的操作系统实验教程)(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、b;*Waitonthe…

怎么玩转CSS内部样式表与外部样式表?

CSS 创建 当读到一个样式表时,浏览器会根据它来格式化 HTML 文档。 如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet)内部样式表(Internal style sheet)内联样式(Inline style)外部样式表 当样式需要应用于很多页面时,外部样式表将是理想的选择。…

服务器硬件监控转载:

转载:http://nolinux.blog.51cto.com/4824967/1664664 前一周上架服务器,本来准备把针对服务器的硬件监控这一部分总结下成文,结果过个端午给过忘了。。。今天就又整理了下,在这里分享给51博友,也算是对自己前段工作的…

java 分析java死锁_有益的CountDownLatch和棘手的Java死锁

java 分析java死锁您是否曾经使用过java.util.concurrent.CountDownLatch ? 这是在两个或多个线程之间实现同步的非常方便的类,在该类中,一个或多个线程可以等待,直到在其他线程中执行的一组操作完成为止(请参阅javado…

验证码识别Burp reCAPTCHA插件使用

介绍 Burp的reCAPTCHA也可用来识别验证码,github地址:https://github.com/bit4woo/reCAPTCHA,下载相应的jar包添加到burp中,位置在extender-extensions-add下,添加成功后burp模块栏会多出reCAPTCHA一栏,如下…

linux下的五种io模型,Linux下的五种IO模型

Java中提供的IO有关的API,在文件处理的时候,其实依赖操作系统层面的IO操作实现的(关于Java对IO的三种封装,可见我的另一篇博客)开门见山,Linux下的如中IO模型:阻塞IO模型,非阻塞IO模型,IO复用模…

怎么样才能玩转前端所有的CSS背景相关问题?

目录 背景颜色 背景图像 背景图像 - 水平或垂直平铺 背景图像- 设置定位与不平铺 背景- 简写属性 CSS 背景属性 CSS 背景 CSS 背景属性用于定义HTML元素的背景。 CSS 属性定义背景效果: background-

如何使用Eclipse调试Maven构建

当运行带有许多插件(例如jOOQ或Flyway插件 )的Maven构建时,您可能想更深入地了解这些插件或这些插件的扩展内部发生了什么。 当您从命令行运行Maven时,这可能并不明显,例如通过: C:\Users\jOOQ\workspace&…

PropertyGrid 控件使用方法

编写一个对象,后面传递给 PropertyGrid 来显示: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace WindowsForms_PropertyGrid {public class UserPropertyClass{privat…

BurpSuite插件 -- Struts2-RCE

​好遗憾,明明不想失去,却又无能为力,说真的,那种想放弃又想爱的滋味,真折磨人。。。。 ---- 网易云热评 一、插件介绍 一个用于检查struts2 RCE漏洞的Burp扩展器 二、下载地址(插件作者:prakh…

c语言移位运算的作用,C语言的移位操作符使用方法

位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。以下是小编为大家搜索整理的C语言的移位操作符使用方法…

一文精通CSS文本问题,你值得一看

目录 CSS 文本格式 文本颜色 文本的对齐方式 文本修饰 文本转换 文本缩进 CSS文本属性 CSS 文本格式 下面是文本的演示

[算法导论]练习16.1-4 活动教室分配(区间着色问题)

转载请注明原创:http://www.cnblogs.com/StartoverX/p/4608412.html 题目: 有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行。我们希望使用最少的教室完成所有活动。 设计一个高效的贪心算法求每个活动应该…

c语言选择菜单程序设计,c语言课程设计报告-- 使用菜单选择趣味程序.doc

c语言课程设计报告-- 使用菜单选择趣味程序青岛农业大学课程设计报告题 目: 使用菜单选择趣味程序姓 名: 杨丽娜学 院: 理学与信息科学学院专 业: 通信工程班 级: 2班学 号:指导教师:年月日目 录…