【发布时间】:2016-09-21 06:28:40
【问题描述】:
我正在使用 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>"
我该如何解决这个问题?
谢谢
【问题讨论】:
-
如果您在 openssl 中使用
-showcerts选项,您可以看到链中的所有证书,直到颁发 CA。所有中间证书也需要导入。 -
感谢 mvreijn,如何获取链中的所有证书以发布 CA。我尝试了 -showcerts 选项,但它显示 openssl 的选项无效。
-
-showcerts 工作正常,但没有显示所有证书,在最后一行我得到“验证返回码:21(无法验证第一个证书)”。是否有任何命令可以获取整个证书链,以便我可以将它们直接导入到我的 cacerts 中?
-
抱歉,我离开了几天 - 很高兴看到您解决了这个问题。
-
没关系,谢谢您的帮助
标签: java spring tomcat ssl ldap