【发布时间】:2021-06-21 09:06:14
【问题描述】:
我通过 JAAS 模块使用 LDAP/AD 身份验证设置 Rundeck(参见官方文档)。
授权。与非加密连接(providerUrl="ldap://AD-FQDN")完美配合。
当我尝试从 LDAP 切换到 LDAPS (providerUrl="ldaps://AD-FQDN") 时,问题就出现了。
我收集了 AD 证书以及 Sub 和 Root CA,将它们添加到 rundeck 信任库(然后是密钥库)并重新启动 rundeckd。
正在成功验证证书:
[root@rundeck01 ssl]# openssl verify -CAfile RootCA.cer -untrusted SubCA.cer ad01.cer
ad01.cer: OK
我在 service.log 中看到的内容:
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
防火墙端口已打开(可以通过 telnet 连接到第 389,636 页)。
运行时间:
rundeck-3.4.0.20210614-1
CentOS 7.9
请多多指教。
【问题讨论】:
-
检查您使用哪个 java 来运行该软件。 Java 将其信任库与系统分开保存,每个 Java JDK 都将包含自己的。就个人而言,我会使用一个单独的精心设计的信任存储,并通过将
-Djavax.net.ssl.trustStore=/path/to/my/keystore添加到 Java 启动选项来明确使用它。 -
谢谢拉斯皮。现在我有“java.lang.RuntimeException:意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须为非空”
-
请检查路径。您的密钥库可能为空或进程无法访问。
-
为了测试,我已将密钥库和信任库权限更改为 0755(以及上面的所有目录),但错误仍然相同。附言。 -Djavax.net.ssl.trustStore= 应该指向 keystore 还是 truststore?
-
信任库是用于验证其他方的密钥库。从技术上讲,从 Java 的角度来看,它是一个 JKS 密钥库。它应该指向您包含受信任的根证书的文件。默认路径为
${JRE_HOME}/lib/security/cacerts。
标签: linux active-directory ldap rundeck