为什么我的构建在JDK6构建上失败了“peer not authenticated”异常?

JFrog支持
2017-05-24 06:03

用例如下:

Artifactory是HTTPS的支持者

CI服务器(例如Jenkins)配置为使用JDK 6运行。

从4.0版本开始。X Artifactory必须在JDK8及以上版本下运行。

当在Jenkins上运行作业时,它们会失败,出现以下例外:

产生原因:javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated . (peer not authenticated .

com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates (SSLSessionImpl.java: 352)

org.apache.http.conn.ssl.AbstractVerifier.verify (AbstractVerifier.java: 126)

org.apache.http.conn.ssl.SSLSocketFactory.connectSocket (SSLSocketFactory.java: 437)

org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection (DefaultClientConnectionOperator.java: 180)

org.apache.http.impl.conn.ManagedClientConnectionImpl.open (ManagedClientConnectionImpl.java: 294)

org.apache.http.impl.client.DefaultRequestDirector.tryConnect (DefaultRequestDirector.java: 643)

org.apache.http.impl.client.DefaultRequestDirector.execute (DefaultRequestDirector.java: 479)

org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java: 906)

org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java: 805)

org.jfrog.build.client.PreemptiveHttpClient.execute (PreemptiveHttpClient.java: 88)

org.jfrog.build.client.ArtifactoryHttpClient.execute (ArtifactoryHttpClient.java: 193)

org.jfrog.build.client.ArtifactoryHttpClient.upload (ArtifactoryHttpClient.java: 189)

org.jfrog.build.client.ArtifactoryBuildInfoClient.uploadFile (ArtifactoryBuildInfoClient.java: 514)

org.jfrog.build.client.ArtifactoryBuildInfoClient.deployArtifact (ArtifactoryBuildInfoClient.java: 294)

org.jfrog.build.extractor.maven.BuildDeploymentHelper.deployArtifacts (BuildDeploymentHelper.java: 270)

……30多个

发生了什么事?

JDK6和JDK8之间存在ssl冲突。

JDK负责更改CI服务器设置以在JDK7及以上版本上运行,这是一个很好的指示。

如何调试错误以获得有关异常原因的更多详细信息?

在作业配置中添加以下调试条目'-Djavax.net.debug=all'。

例如,如果CI服务器是Jenkins,并且工作是与Maven一起进行的,

首先,需要点击高级按钮

然后,添加此条目在MAVEN_OPTS字段上,如下所示:

如何解决这个问题,仍然使用JDK6,这是我的要求?

请注意,获取JDK6补丁需要Oracle企业账号

导致'peer not authenticated'异常的两个常见原因:

1.SSL协议

检查关于协议的演变比较JDK版本。

作为一个常见的可能用例,异常是SSLv2Hello消息进程失败的结果。

在配置了JDK6的CI服务器上,启用了SSLv2Hello消息。

另一方面,Artifactory服务器使用JDK8运行,其中默认禁用SSLv2Hello消息。

客户端—CI服务器—在SSL握手期间尝试向Artifactory发送SSLv2Hello消息。然而,在服务器的JDK - artifactory - sslv2hello消息被禁用。其结果是SSL握手过程失败,并抛出异常-Peer未被验证

下面是关于这个主题的oracle文档。版本1.6.0_91-b13是为JDK6用户修复ssl握手失败的版本。

看到在这里对于此版本的错误修复(特别是以下情况下这是你得到的错误)。

从JDK 7开始,默认情况下禁用SSLv2Hello消息

检查如下Stackoverflow谈话同样的话题。

2.证书

使用详细调试输出,将会出现以下异常

原因:java.lang.RuntimeException:不能生成DH对

检查以下内容Stackoverflow谈话同样的话题。

下面是关于这个主题的oracle文档。版本1.6.0_105-b15是固定DHKey对的版本。

在这个版本中,DHKeyPair生成支持使用最大2048位的密钥大小。密钥大小小于1024位必须是64的倍数,小于2048位则必须是64的倍数。
这是匹配的问题参考