2011-05-17 53 views
0

所以,這是我拍攝的場景。是否有可能從無簽名的java代碼訪問密鑰庫中的密鑰?

我有一個應用程序服務器。在該應用程序服務器上是受密碼保護的密鑰庫文件。密鑰庫文件內部是一個私鑰,必須通過編程方式從已部署的戰爭文件中訪問。

我不想在我的代碼中存儲密碼。

戰爭文件是建立在一個單獨的開發機器上。在構建時,提供一個開發人員私鑰,簽署戰爭文件。

說開發者的公共證書已被導入到應用程序服務器的密鑰庫信任證書中。

從代碼中,我希望能夠加載密鑰庫並檢索私鑰,而不必爲密鑰提供密碼。我希望讓由可信證書籤名的代碼具有足夠的身份驗證能夠成功檢索密鑰。

如果惡意用戶訪問應用程序服務器,他們將無法修改簽名代碼,因爲這會破壞簽名。他們也不能部署他們自己的代碼,因爲他們沒有可信的私鑰。最後,他們將無法將自己的證書作爲可信證書導入密鑰庫,因爲他們沒有密鑰庫密碼。

這可能嗎?如果不是,那爲什麼不呢?

+0

我沒有得到你的問題,但是這似乎涉及: [鏈接](http://stackoverflow.com/questions/4926290/java-keystore-and-password-settings) 很抱歉,如果我錯了這裏。 – Sid 2011-05-17 22:11:29

+0

從我的評論中收集到的另一個解決方案是將JNDI與您的應用服務器結合使用。因此,您不必在代碼中保存密碼。 – Sid 2011-05-17 22:15:14

回答

1

您無法在沒有密碼的情況下以「Java密鑰庫」格式密鑰存儲區檢索您的私鑰。

它與「身份驗證」無關。在JKS文件中,私鑰是加密的,密碼是密鑰。沒有這個密鑰,就沒有辦法恢復私鑰。

儘管您不需要將私鑰存儲在Java密鑰庫中。例如,您可以將其存儲在未加密的文件中。或者,如果您需要與現有代碼兼容,則可以實施您自己的Provider並創建不使用加密的KeyStore實現。大多數需要KeyStore支持選項的應用程序可以控制提供程序和實例化的密鑰存儲的類型。

在上述任何一種方法中,您都完全依賴操作系統的文件權限來限制對私鑰的訪問。

更安全的方法是讓應用程序在啓動時提示輸入密碼。

+1

這就是我所害怕的。我不想將密碼存儲在文件系統的任何物理位置,因爲如果它位於文件系統上,它很容易受到攻擊。我只是希望有另一種方式。 – 2011-05-18 01:15:31

0

沒有辦法將應用程序由特定證書密鑰簽名的事實轉換爲能夠訪問密鑰庫文件。您可以做的最好的方式是以其他方式將密鑰庫的密碼提供給應用程序 - 使用屬性或JNDI或配置文件或類似的東西。