Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于SSL的LDAP的Spring安全性:需要更多详细信息_Ssl_Spring Security_Ldap_Ssl Certificate_Self Signed - Fatal编程技术网

基于SSL的LDAP的Spring安全性:需要更多详细信息

基于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

我有一个通过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。 如果我选择禁用证书验证,我无法确定应该放置什么位置。
我还很好奇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权限才能启动第二个命令。

。。。或者完全禁用证书检查-显然,这是个坏主意。这给你留下了一个选择,也许会对你有所帮助。