我正在使用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将其转储
>openssl s_client -showcerts -connect host:port
b。要导入链,您需要将PEM转换为PKCS#7或拆分。将PEM转换为PKCS#7
ii。分裂
>keytool -import -trustcacerts -file /path/ldapserver.pem -alias somealias -keystore /security/cacerts