春季安全,ssl ldap和无证书
问题描述:
我使用spring安全来管理登录。我配置了spring security来连接到一个使用ssl(ldaps)进行securized的ldap服务器。春季安全,ssl ldap和无证书
此服务器是测试服务器,并且没有有效的证书。当我尝试测试登录,Spring Security的抱怨证书无法验证(当然!):
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
我的问题很简单:我不想来管理任何类型的证书,我想取消激活证书检查并继续使用ssl ldap。我怎样才能做到这一点 ?
答
听起来像LDAP服务器的证书只是自我证明而非无效。
对我来说,最简单的解决方案是获得该证书并将其添加到Java中的cacerts信任存储区。一旦完成,代码将运行而不做任何修改。
为了从服务器获取证书:
$ openssl s_client -showcerts -connect ldapserver:636
输出将包含许多与
-----BEGIN CERTIFICATE-----
aklfhskfadljasdl1340234234ASDSDFSDFSDFSDFSD
....
-----END CERTIFICATE-----
复制最后一个证书项分隔条目到一个文件中(ldapca.crt)
然后,将它添加到$ JRE_HOME/lib/security中的java密钥库中
$ cd $JRE_HOME/lib/security
$ keytool -import -alias ldapca_self_sign -keystore cacerts -storepass changeit -file ldapca.crt
这意味着,您将信任LDAP服务器上的证书,并在您的测试环境中正确使用SSL(而不是使用一些自定义代码来关闭部分SSL检查)。
一旦你完成了(一次),你的代码应该运行而不做任何修改。
感谢您的回答。问题在于:我使用maven和svn与一个团队合作。我想避免每个开发者都这样做。有没有简单的方法来使用弹簧配置? – 2012-03-28 08:38:24
您可以创建一个单独的信任库文件(实际上使用具有不同文件名的相同'keytool'命令,将该文件添加到SVN,然后按照以下步骤操作:http://stackoverflow.com/questions/6431383/using-spring- ldap-with-ssl然而,我个人会给每个开发者发送一封电子邮件,附上'ldapca.crt'文件并让他们运行命令,因为我认为不具备测试特定代码的好处 - in-your-codebase比一个开发人员只需运行一次命令的便利性更好。 – beny23 2012-03-28 08:47:45
谢谢,这看起来不错,我会试试看 – 2012-03-28 08:53:25