使用LDAP over SSL的Spring Security:需要更多详细信息

时间:2014-06-08 01:51:59

标签: ssl spring-security ldap ssl-certificate self-signed

我已经通过LDAP获得了使用身份验证的网络应用程序。它完美无瑕,但生产版本需要使用SSL。我们有一个运行在" ldaps://ourserver.com:636"的服务器,但是当我尝试连接它时,Spring Security会抛出异常:

  

根异常是javax.net.ssl.SSLHandshakeException:   sun.security.validator.ValidatorException:PKIX路径构建失败:   sun.security.provider.certpath.SunCertPathBuilderException:无法   找到所请求目标的有效证明路径

Apache Directory Studio还警告我未知证书,但允许忽略检查并最终连接并读取所需数据。

这里有很多关于如何实施LDAP over SSL的问题和答案,但没有一个提供完整的解决方案。我已经two opportunities:制作certificate trusted或完全禁用证书检查。无论我选择哪种方式,我都无法弄清楚如何在Spring Security中使用该机制:

  1. 如果我选择使用keytool并使证书受信任,我无法弄清楚JVM / Tomcat / Spring Security将如何找出password I have defined-keypass changeit
  2. 如果我选择停用证书验证,我无法确定应该放置the code的位置。
  3. 我还很好奇Apache Directory Studio如何在没有keytool导入的情况下使证书可信任,这显着降低了应用程序的可移植性?像这样的解决方案对我的webapp来说是完美的,但我还没有找到类似的东西。

1 个答案:

答案 0 :(得分:0)

这是我能够使用的解决方案。我必须要理解的关键是既没有JVM,也没有webapp的容器需要知道别名和密码。 它的JVM头痛来检查所有已注册的证书,这与您的webapp无关。不幸的是,该解决方案意味着您为整个JVM安装证书。这使得webapp不那么便携,但至少它可以正常工作。我已决定向webapp源提供以下 bash脚本,以便其他开发人员可以在其计算机上轻松安装证书:

SERVER="mydomain:636" 
CRT_NAME="mydomain.crt"
CRT_ALIAS="mydomain_cert"

echo -n | openssl s_client -connect $SERVER | sed -ne '/-BEGIN
CERTIFICATE-/,/-END CERTIFICATE-/p' > $CRT_NAME

$JAVA_HOME/bin/keytool -import -alias $CRT_ALIAS -keystore $JAVA_HOME/lib/security/cacerts -file $CRT_NAME -storepass changeit

您可能希望添加其他错误检查,我已将其省略以简化脚本。您需要root权限才能启动第二个命令。