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

JFrog支持
2023-01-22十一10

用例如下:

HTTPS的背后是Artifactory

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

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

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

产生原因:javax.net.ssl.SSLPeerUnverifiedException: 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消息。但是,在服务器artifactory的JDK中,sslv2hello消息是禁用的。因此,在SSL握手过程中会出现失败,并抛出异常未验证的对等体

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

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

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

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

2.证书

对于详细调试输出,将出现以下异常

java.lang.RuntimeException: Could not generate DH keypair

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

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

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