2011-10-18 124 views
24

所以,我遇到了LDAP問題。我有一個可以解決問題的集成測試用例,但它目前正在通過SSL握手運行到LDAPS安全問題。如何將現有Java密鑰庫(.jks)文件導入到Java安裝中?

我能夠通過Apache Directory Studio連接到LDAPS,並將密鑰庫下載到文件「permanent.jks」中。

沒關係,但我希望我的集成測試(駐留在使用JRE的Eclipse中)能夠使用此密鑰存儲庫連接到LDAP服務器。

如何取得這個密鑰庫並將其導入到JRE中以供自己使用?

回答

34

好了,這裏是我的過程:

keytool -list -v -keystore permanent.jks - 給我別名。

keytool -export -alias alias_name -file certificate_name -keystore permanent.jks - 拿到了我要導入的證書。

然後,我可以用keytool導入:

keytool -import -alias alias_name -file certificate_name -keystore keystore location

由於@Christian邦焦爾諾說,別名不能在你的密鑰庫已經存在。

+2

我得到它的工作,但有一個修正案(如果你想改變你的答案)。在導入過程中,具有「別名」的部分(順便說一下:不是帶有空格的很大變量名),這必須是目標存儲中尚不存在的別名。如果你沒有指定別名,它默認爲「1」 - 你可以使用步驟1在安裝前列出你目的地的別名 –

+2

在最後一步(導入)中,我得到了錯誤'keytool error:java.io. IOException:密鑰庫被篡改,或者密碼不正確,即使上一步(導出),我也可以成功完成密碼。你知道它爲什麼嗎? –

+0

@ThaiTran對於將來的讀者,在導入證書時,請確保使用目標證書文件的密碼,而不是首先用於創建證書的密碼。 另請注意,在許多系統上,JDK由root擁有。如果是這種情況,則需要以root身份執行keytool -import命令。 – BRasmussen

25

要加載KeyStore,您需要告訴它密鑰庫的類型(可能是jceks),提供輸入流和密碼。然後,你可以加載它像這樣:

KeyStore ks = KeyStore.getInstance(TYPE_OF_KEYSTORE); 
ks.load(new FileInputStream(PATH_TO_KEYSTORE), PASSWORD); 

這可以拋出一個KeyStoreException,這樣你就可以在一個try塊包圍,如果你喜歡,或重新拋出。請記住一個密鑰庫可以包含多個按鍵,所以你需要看看你的密鑰用別名,這裏是用對稱密鑰的例子:

SecretKeyEntry entry = (KeyStore.SecretKeyEntry)ks.getEntry(SOME_ALIAS,new KeyStore.PasswordProtection(SOME_PASSWORD)); 
SecretKey someKey = entry.getSecretKey(); 
+0

你救了我的命。沒有正確加載密鑰庫,直到我找到你的例子。可惜我不能給你10000分。非常感謝你!! – raspayu

+0

很高興幫助!你的感謝值得多於幾點:)。 –

12

您可以批量導入從一個密鑰庫的所有別名到另一個:

keytool -importkeystore -srckeystore source.jks -destkeystore dest.jks 
+0

這個命令可以工作嗎? – mike

+0

@mike你是什麼意思? – qwertzguy

+0

這個工作,並且非常好:D – Aspekt

相關問題