我試圖讓運行在Tomcat 6之上的應用程序通過SSL連接到LDAP服務器。向Java密鑰庫,JVM導入證書會忽略新證書
我導入服務器證書使用至密鑰存儲:
C:\Program Files\Java\jdk1.6.0_32\jre\lib\security>keytool -importcert -trustcacerts -file mycert -alias ca_alias -keystore "c:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts"
當我啓動Tomcat與SSL調試開啓,根據Tomcat正在使用正確的證書文件日誌:
trustStore is: C:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts
然而,Tomcat不添加我剛剛導入的證書 - cacerts文件中的所有其他證書都打印到日誌中 - 連接失敗:
handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
重新啓動Tomcat並沒有幫助。我已經使用keytool -list命令驗證了新證書確實存在於文件中。
爲什麼Tomcat不斷忽略我的新證書?
編輯:
看來,這個問題是由Windows 7的VirtualStore引起的。 Keytool創建了一個cacert文件的新副本,而Tomcat使用了原始文件。
文件'mycert'是否包含整個證書鏈? Java希望整個信任路徑在商店中。 – Romain
只是一個簡單的建議,轉到你的'C:\ Users \ YourAccountName',一個文件名'.keystore'將會在那裏,打開它並從你的文件中刪除以前的文件,然後再次執行你的操作。希望這可以爲你解決問題:-) –
@Romain不,可信證書與鏈條無關。導入爲可信證書的任何證書都被視爲受信任的根證書。 – emboss