SonarQube 9.9.2无法建立LDAPS连接,LDAP正常求协助
SonarQube 9.9.2 LDAPS连接失败排查方案
环境信息
- SonarQube 9.9.2
- Oracle Linux 8.8
- Oracle DB 19c
- Apache Proxy
问题现象
- LDAP(
ldap://ldap_url:389)连接正常,但LDAPS(ldaps://ldap_url:636)无法建立连接 - 证书已添加至信任存储,636端口网络连通性验证通过
- 同一虚拟机上其他服务使用相同证书可正常建立LDAPS连接,日志显示证书已加载
- SonarQube启动失败,
web.log核心报错:org.sonar.auth.ldap.LdapException: LDAP realm failed to start: Unable to open LDAP connection
排查与解决步骤
1. 确认SonarQube使用的JVM信任存储
SonarQube默认使用自身内置JRE的信任存储,而非系统级或其他服务的存储。先定位SonarQube的JRE路径:
ps aux | grep sonar | grep java
找到JRE路径后,检查其信任存储(通常为$SONAR_JRE/lib/security/cacerts),确认LDAP证书已添加到该文件中,而非系统的/etc/pki/java/cacerts或其他路径。
添加证书命令示例:
keytool -importcert -file /path/to/ldap_cert.crt -alias ldap-server -keystore $SONAR_JRE/lib/security/cacerts -storepass changeit
2. 修复LDAP配置格式错误
你的配置存在两处关键格式问题:
sonar.log.level=DEBUG'末尾多了单引号,导致后续配置解析异常ldap.user.request中的&是HTML转义符,在properties文件中需改为&,否则会导致LDAP查询语法错误
修正后的规范配置(建议每行一个参数):
sonar.security.realm=LDAP sonar.log.level=DEBUG ldap.url=ldaps://ldap_url:636 ldap.bindDn=user@domain ldap.bindPassword=user_password ldap.authentication=simple ldap.user.baseDn=OU=Group,DC=domain,DC=com ldap.user.request=(&(objectClass=user)(sAMAccountName={0})) ldap.user.realNameAttribute=cn ldap.user.emailAttribute=mail
3. 验证证书链完整性
检查LDAP服务器证书是否包含完整信任链(根CA+中间CA+服务器证书)。若仅添加服务器证书,SonarQube的JVM可能无法完成信任验证。
用openssl查看证书链:
openssl s_client -connect ldap_url:636 -showcerts
将输出中所有证书(从服务器证书到根CA)依次添加到SonarQube的信任存储中。
4. 检查证书的SAN字段
确保LDAP服务器证书的**主题备用名称(SAN)**包含ldap_url的域名或IP。部分JVM版本会严格验证SAN字段,即使CN匹配,缺少SAN也会导致SSL连接失败。
查看证书SAN字段:
keytool -printcert -file /path/to/ldap_cert.crt | grep -A 10 "Extension"
5. 启用SSL调试日志定位细节
在SonarQube启动脚本(sonar.sh或sonar.bat)中添加JVM参数,启用SSL握手调试日志:
SONAR_JAVA_OPTS="$SONAR_JAVA_OPTS -Djavax.net.debug=ssl,handshake"
重启SonarQube后,查看日志中的SSL调试信息,可定位证书验证或握手阶段的具体错误。
内容的提问来源于stack exchange,提问作者Kozmov
相关产品推荐
相关产品推荐

