java 6 tls1.2_解决 JDK1.7 不支持 VCenter 6.7 的问题(涉及到Https TLS1.2协议)

本文介绍了如何解决使用JDK 1.7时,由于默认TLS版本不支持导致无法连接VCenter 6.7的问题。通过设置`https.protocols`为TLSv1.2,并自定义信任所有HTTPS证书的方法,实现了成功连接。
摘要由CSDN通过智能技术生成

解决 JDK1.7 不支持 VCenter 6.7 的问题

问题描述

原项目工程是使用JDK 1.7,可以连接 5.X版本和 6.0版本的 VCenter资源池。

但是,现在VCenter已经升到 6.7版本,原程序对于高版本的 VCenter 6.7 不再试用。

连接 VCenter 6.7版本的资源池的时候,一直报 SSLHandshakeException的异常错误。

报错信息如下:

e1b8e01b5cc5154484c21d413c5946d3.png

问题处理

1、背景介绍

JDK1.7 默认是 TSLv1, 但是可以支持 TSLv1.1,TSLv1.2;

JDK1.8 默认是 TSLv1.2

2、解决方案

1)如果是脚本访问,可以在连接参数里增加 -Dhttps.protocols=TLSv1.2

2)如果是Java程序处理,想使用 JDK 1.7 访问 VCenter 6.7 资源池,需要对VCenter 6.7版本单独处理

a)根据资源池类型,设置不同的 https.protocols

if (type.equals("VC67")){

java.lang.System.setProperty("https.protocols", "TLSv1.2");

}else{

java.lang.System.setProperty("https.protocols", "TLSv1");

}

b)对于连接VC的认证处理如下:

if (type.equals("VC67")){

trustAllHttpsCertificatesTLS12();

}else{

trustAllHttpsCertificates();

}

trustAllHttpsCertificates() 方法如下

private static void trustAllHttpsCertificates() throwsException {

javax.net.ssl.TrustManager[] trustAllCerts= new javax.net.ssl.TrustManager[1];

javax.net.ssl.TrustManager tm= newTrustAllTrustManager();

trustAllCerts[0] =tm;

javax.net.ssl.SSLContext sc= javax.net.ssl.SSLContext.getInstance("SSL");

javax.net.ssl.SSLSessionContext sslsc=sc.getServerSessionContext();

sslsc.setSessionTimeout(20);//add time out 20 t for session

sc.init(null, trustAllCerts, null);

javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

}

trustAllHttpsCertificatesTLS12() 方法如下

private static void trustAllHttpsCertificatesTLS12() throwsException {

javax.net.ssl.TrustManager[] trustAllCerts= new javax.net.ssl.TrustManager[1];

javax.net.ssl.TrustManager tm= newTrustAllTrustManager();

trustAllCerts[0] =tm;

javax.net.ssl.SSLContext sc= javax.net.ssl.SSLContext.getInstance("TLSv1.2");

javax.net.ssl.SSLSessionContext sslsc=sc.getServerSessionContext();

sslsc.setSessionTimeout(20);//add time out 20 t for session

sc.init(null, trustAllCerts, null);

javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

}

TrustAllTrustManager 类如下

private static class TrustAllTrustManager implementsjavax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {publicjava.security.cert.X509Certificate[] getAcceptedIssuers() {return null;

}public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throwsjava.security.cert.CertificateException {return;

}public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throwsjava.security.cert.CertificateException {return;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值