基于SSL的LDAP的Spring安全性:需要更多详细信息
我有一个通过LDAP使用身份验证的web应用程序。它可以完美地工作,但生产版本需要使用SSL。我们有一台服务器正在运行ldaps://ourserver.com:636,但当我尝试连接到Spring Security时,它会引发以下异常: 根异常为javax.net.ssl.SSLHandshakeException: sun.security.validator.validator异常:PKIX路径生成失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到请求目标的有效证书路径 ApacheDirectoryStudio还警告我未知的证书,但允许忽略检查它并最终连接和读取所需的数据 这里有很多关于如何通过SSL实现LDAP的问题和答案,但没有一个提供完整的解决方案。我必须:执行或禁用证书检查。无论我选择哪种方式,我都不知道如何使用Spring Security的机制: 如果我选择使用keytool并使证书受信任,我无法弄清楚JVM/Tomcat/Spring安全性将如何确定哪个-keypass changeit。 如果我选择禁用证书验证,我无法确定应该放置什么位置。基于SSL的LDAP的Spring安全性:需要更多详细信息,ssl,spring-security,ldap,ssl-certificate,self-signed,Ssl,Spring Security,Ldap,Ssl Certificate,Self Signed,我有一个通过LDAP使用身份验证的web应用程序。它可以完美地工作,但生产版本需要使用SSL。我们有一台服务器正在运行ldaps://ourserver.com:636,但当我尝试连接到Spring Security时,它会引发以下异常: 根异常为javax.net.ssl.SSLHandshakeException: sun.security.validator.validator异常:PKIX路径生成失败: sun.security.provider.certpath.SunCertPath
我还很好奇Apache Directory Studio如何能够在没有keytool导入的情况下使证书本身受信任—这会显著降低应用程序的可移植性?这样的解决方案非常适合我的网络应用程序,但我还没有找到这样的解决方案。这是一个我可以使用的解决方案。我必须理解的关键是,JVM和带有webapp的容器都不需要知道别名和密码。检查所有已注册的证书是一件令人头痛的事情,而这与您的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权限才能启动第二个命令。。。。或者完全禁用证书检查-显然,这是个坏主意。这给你留下了一个选择,也许会对你有所帮助。