项目场景:
项目场景:使用jdk1.6创建https连接到其他jdk更高版本jdk的服务器。问题描述:
在获取连接时会被远程主机断开连接。javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:980) ~[na:1.8.0_45]
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363) ~[na:1.8.0_45]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391) ~[na:1.8.0_45]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375) ~[na:1.8.0_45]
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) ~[na:1.8.0_45]
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) ~[na:1.8.0_45]
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) ~[na:1.8.0_45]
at com.dangdang.ddframe.job.executor.type.SimpleJobExecutor.process(SimpleJobExecutor.java:41) [elastic-job-common-core-2.1.5.jar:na]
at com.dangdang.ddframe.job.executor.AbstractElasticJobExecutor.process(AbstractElasticJobExecutor.java:206) [elastic-job-common-core-2.1.5.jar:na]
at com.dangdang.ddframe.job.executor.AbstractElasticJobExecutor.process(AbstractElasticJobExecutor.java:171) [elastic-job-common-core-2.1.5.jar:na]
at com.dangdang.ddframe.job.executor.AbstractElasticJobExecutor.execute(AbstractElasticJobExecutor.java:150) [elastic-job-common-core-2.1.5.jar:na]
at com.dangdang.ddframe.job.executor.AbstractElasticJobExecutor.execute(AbstractElasticJobExecutor.java:122) [elastic-job-common-core-2.1.5.jar:na]
at com.dangdang.ddframe.job.lite.internal.schedule.LiteJob.execute(LiteJob.java:26) [elastic-job-lite-core-2.1.5.jar:na]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [quartz-2.2.1.jar:na]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.2.1.jar:na]
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.read(InputRecord.java:505) ~[na:1.8.0_45]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:961) ~[na:1.8.0_45]
... 21 common frames omitted
原因分析:
这是因为jdk1.6和默认的https协议和1.7及1.8不一样解决方案:
System.setProperty(“https.protocols”, “TLSv1,TLSv1.1,TLSv1.2”);
或者 加JVM 参数 -Dhttps.protocols=TLSv1.1,TLSv1.2
而对于1.6而言,加了这两个的其中一个有会产生
javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair
对于这个异常,需要下载两个jar包。
解决这个异常的重点就在于下载两个jar包:
bcprov-ext-jdk15on-1.52
bcprov-jdk15on-1.52
传送门1:http://download.csdn.net/detail/a2279860a/9754944
传送门2:http://download.csdn.net/download/a2279860a/10106133
然后下载完毕之后就需要将这两个jar包放到
$JAVA_HOME/jre/lib/ext
放在指定的目录下之后,接下来就需要对一个文件进行编辑
这个文件的位置在
$JAVA_HOME/jre/lib/security/
对这个路径下的java.security文件进行修改
找到security.provider.9,然后在这句话下面加上:
security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider
对于某些小伙伴来说,如果还不起作用,可以试试放到security.provider.2下面