无法使用spring模板通过ssl连接到LDAP服务器

时间:2016-09-21 06:28:41

标签: java spring tomcat ssl ldap

我使用spring模板通过ssl连接到ldap服务器。我使用以下命令从服务器保存ssl证书:

echo -n | openssl s_client -connect <ldapserverip>:<port> | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ldapserver.pem

然后转到/ jre / lib / security目录并执行以下命令将证书添加到cacerts。

keytool -import -keystore cacerts -file ldapserver.pem

然后使用以下命令验证cacerts中条目列表中的计数:

keytool -list -keystore cacerts

我在tomcat中运行应用程序,tomcat指向同一个JDK_HOME。

我在使用spring在ldapTemplate中使用authenticate()登录时在tomcat中收到以下异常。

Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

使用纯文本(没有https)工作正常。我也试过设置VMArguments,但没有一个工作。

-Djavax.net.ssl.trustStore="<path to cacerts file>"
-Djavax.net.ssl.trustStorePassword="<passphrase>"

我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

看起来像是信任链被破坏了。两个可能的原因。

  1. 来自服务器的证书不是单个证书,而是直到根CA的链,并且您只导入了一个证书。您需要验证并导入该完整链。

    一个。要检查证书链,请使用openssl

    将其转储
    >openssl s_client -showcerts -connect host:port
    

    湾要导入链,您需要将PEM转换为PKCS#7或拆分。

    我。 Convert PEM to PKCS#7

    II。 Split

  2. 导入证书时,请使用“-trustcacerts”选项,以便将来自密钥库的证书视为信任链。

    >keytool -import -trustcacerts -file /path/ldapserver.pem -alias somealias -keystore /security/cacerts