2012-07-18 224 views
0

使用load()方法創建後,將初始化密鑰庫(無論它用於「密鑰庫」還是「信任庫」)。一個版本需要對應於密鑰庫文件的InputStream以及解密該文件的密碼。以編程方式向方法提供密碼對我來說似乎很陌生。密鑰庫的密碼管理

例如,服務器使用密鑰庫來存儲其私鑰和相關證書。密鑰存儲中的信息是明智的,因此它受密碼保護。以編程方式將密碼傳遞給load()方法有什麼問題?最佳做法是什麼?

另一個例子,但現在關於信任庫。客戶端有一個存儲受信任CA證書的信任庫。據我瞭解,信任庫不包含服務器的證書,但僅包含允許驗證服務器證書的CA的證書。我看到的一個信任庫示例是JRE中的一個示例(位於security文件夾中 - cacerts)。通過查看配置,我可以看到它受默認密碼changeit的保護。我知道一個信任庫是使用密鑰庫實現的,因此它有(或可能是可選的)使用密碼進行加密。但是,由於信任庫通常將公共信息(受信任的CA證書)存儲在文件中,因此建議更改密碼?

感謝

回答

2

提供密碼的方法編程覺得奇怪, 我。

我不知道爲什麼這會很奇怪。應用程序需要能夠在某個點或另一個位置獲取密鑰庫的內容。不知何故,密碼需要傳遞給它。將它傳遞給load()方法並不比其他解決方案更不合理(當然,避免硬編碼)。或者,您也可以使用使用回調的方法。如果您認爲不合適,可以使用PKCS#11提供程序和硬件令牌(儘管您仍然需要在某處輸入密碼/ PIN)或使用Apple KeychainStore之類的東西(密碼不是使用,但操作系統鑰匙串服務負責)。

關於信任庫,實際上有兩個密碼在使用。使用JKS格式時,它們可以不同。一個保護密鑰庫本身,一個保護對私人條目的訪問(getKey)。在這種情況下,密鑰庫密碼用於防止未授權方更改信任庫(並添加自己的CA或服務器證書)。

+0

謝謝,我沒有想到對信任庫的修改,這很明顯。 – 2012-07-18 13:17:32

+0

我有另一個相關的問題。爲什麼在KeyManagerFactory執行時,TrustManagerFactory不需要密碼進行初始化?此外,密鑰庫和信任庫的密碼都在load()期間提供。 – 2012-07-18 13:51:44

+0

KMF密碼用於使用私鑰。在這兩種情況下,您都必須先將密鑰庫本身加載到工廠中。 – Bruno 2012-07-18 13:52:51