解决间歇性 SSLPeerUnverifiedException 问题

本文针对在使用SonarQube与GitHub Enterprise时遇到的间歇性SSLPeerUnverifiedException异常进行分析和解决。问题可能由TLS协议版本不一致、证书配置错误、JVM版本问题或okhttp3库版本冲突引起。解决方案包括强制使用特定TLS版本、检查证书配置、升级JVM和确保使用最新版okhttp3库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题背景

您在使用 SonarQube 与 GitHub Enterprise 进行拉取请求装饰时,遇到了间歇性的 javax.net.ssl.SSLPeerUnverifiedException 异常。具体错误信息如下:

txt

javax.net.ssl.SSLPeerUnverifiedException: Hostname XXXXXXX not verified (no certificates)
	at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:353)
	...
	at java.base/java.lang.Thread.run(Thread.java:834)

这个问题可能会影响到其他用户,也同样报告了类似的问题,即使在没有第三方插件的标准安装中也会出现。

问题分析

根据错误信息和您提供的背景,我们可以推测出几个可能的原因:

  1. TLS 协议版本问题:您的配置中可能在不同时间使用了不同版本的 TLS 协议(如 TLS 1.2 和 TLS 1.3),这可能导致握手过程中出现不一致。

  2. 证书配置问题:证书中是否定义了 SubjectAlternativeName。这个字段应该包含服务器的域名,以确保 SSL 验证能够顺利通过。

  3. JVM 版本问题:JDK 可能存在某些版本上的已知问题(例如 JDK-8214060),升级 JVM 可能会解决此问题。

  4. okhttp3 库版本冲突:SonarQube 及其第三方插件使用了不同版本的 okhttp3 库,可能会导致类路径问题,从而引发间歇性错误。

解决方案

1. 强制使用特定版本的 TLS 协议

您可以在配置文件中指定使用特定版本的 TLS 协议(如 TLS 1.2 或 TLS 1.3)。确保整个系统在所有连接过程中使用相同的 TLS 版本。

java

OkHttpClient client = new OkHttpClient.Builder()
    .sslSocketFactory(sslSocketFactory, trustManager)
    .build();
2. 检查证书的 SubjectAlternativeName

确保您的证书中包含 SubjectAlternativeName,并且该字段正确地定义了服务器的域名。如果证书中缺少这个字段,可能会导致 SSL 验证失败。

3. 升级 JVM

如果您使用的 JVM 版本较旧,建议升级到较新的版本,以避免已知的 SSL/TLS 问题。例如,OpenJDK 11.0.0.2 升级到 11.0.0.6 可能会解决该问题。

bash

sudo apt-get install openjdk-11-jdk
4. 确保使用最新版本的 okhttp3 库

检查并确保所有使用 okhttp3 库的组件和插件都使用了最新版本,以避免由于版本不一致导致的类路径问题。

示例配置

假设您的 SonarQube 配置文件如下,您可以在其中添加或修改相关的配置以确保使用特定的 TLS 版本和升级 JVM。

yaml

sonar.security.realm: LDAP
ldap.url: ldap://localhost:10389
ldap.bindDn: uid=admin,ou=system
ldap.bindPassword: secret
sonar.authenticator.downcase: true
sonar.core.serverBaseURL: http://your-sonarqube-server
sonar.ce.javaOpts: -Djavax.net.ssl.keyStore=/path/to/keystore -Djavax.net.ssl.keyStorePassword=changeit -Djavax.net.ssl.trustStore=/path/to/truststore -Djavax.net.ssl.trustStorePassword=changeit -Dhttps.protocols=TLSv1.2

总结

间歇性的 SSLPeerUnverifiedException 问题可能由于多个原因引起,本文提供了几种潜在的解决方案。通过强制使用特定版本的 TLS 协议、确保证书配置正确、升级 JVM 和使用最新版本的 okhttp3 库,您可以显著减少或解决这个问题。

希望这些建议能帮助您解决问题。如果有进一步的问题或需要更详细的帮助,请随时联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值