2012-03-28 165 views
1

我使用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。我怎樣才能做到這一點 ?

回答

11

聽起來像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檢查)。

一旦你完成了(一次),你的代碼應該運行而不做任何修改。

+1

感謝您的回答。問題在於:我使用maven和svn與一個團隊合作。我想避免每個開發者都這樣做。有沒有簡單的方法來使用彈簧配置? – 2012-03-28 08:38:24

+1

您可以創建一個單獨的信任庫文件(實際上使用具有不同文件名的相同'keytool'命令,將該文件添加到SVN,然後按照以下步驟操作:http://stackoverflow.com/questions/6431383/using-spring- ldap-with-ssl然而,我個人會給每個開發者發送一封電子郵件,附上'ldapca.crt'文件並讓他們運行命令,因爲我認爲不具備測試特定代碼的好處 - in-your-codebase比一個開發人員只需運行一次命令的便利性更好。 – beny23 2012-03-28 08:47:45

+0

謝謝,這看起來不錯,我會試試看 – 2012-03-28 08:53:25