项目环境配置
java+jdk1.7+tomcat+eclipse
由于不能升级项目jdk版本,只好想办法兼容jdk1.7版本
开始网上寻找解决办法,尝试了下载jdk1.7补丁包jce包方法https://www.cnblogs.com/1995hxt/p/6185399.html
https://blog.csdn.net/gege87417376/article/details/77936507,还是依然报错,继续尝试其他办法
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[na:1.7.0_80]
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) ~[na:1.7.0_80]
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979) ~[na:1.7.0_80]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086) ~[na:1.7.0_80]
报错代码:
static {
SSLContext sslContext = null;
try {
sslContext = SSLContexts.custom()
.loadTrustMaterial(new TrustStrategy() {
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
}).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
SSLConnectionSocketFactory sslSf = new SSLConnectionSocketFactory(sslContext,
new String[] { "TLSv1.2" },
null,
NoopHostnameVerifier.INSTANCE);
System.setProperty("https.protocols", "TLSv1.1,TLSv1.2,SSLv3");
Registry<ConnectionSocketFactory> sfRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", sslSf)
.build();
conMgr = new PoolingHttpClientConnectionManager( sfRegistry );
conMgr.setMaxTotal( MAXCONNECTION );
conMgr.setDefaultMaxPerRoute( MAXCONNECTION );
hb= HttpClients.custom().setSSLContext( sslContext );
hb.setConnectionManager( conMgr );
}
调整好后的代码
static {
SSLContext sslContext = null;
try {
sslContext = new SSLContextBuilder().useProtocol("TLSv1.2")
.loadTrustMaterial(null, new TrustStrategy(){
public boolean isTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException{
return true;
}
}).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
javax.net.ssl.HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
Registry<ConnectionSocketFactory> sfRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", sslSocketFactory)
.build();
conMgr = new PoolingHttpClientConnectionManager( sfRegistry );
conMgr.setMaxTotal( MAXCONNECTION );
conMgr.setDefaultMaxPerRoute( MAXCONNECTION );
hb= HttpClients.custom().setSSLContext( sslContext );
hb.setConnectionManager( conMgr );
}