2011-12-02 232 views
16

我有一個java的屬性對象與Web服務的身份驗證信息。 我需要加密該數據,但我不知道需要存儲加密密鑰的位置才能保持安全。如何在java中安全地存儲加密密鑰?

加密這些數據並以安全的方式檢索它的最佳做法是什麼?

使用密鑰庫有什麼好處嗎?

ws_user=username 
ws_password=password 
ws_url=https://www.whatever.com/myservice 
+0

好像我的應用程序需要訪問密鑰,沒有辦法「保護」它。如果我將它存儲在密鑰庫中會更加模糊,但它似乎並不安全。我希望我錯了:) – ScArcher2

+0

這聽起來最終像一個引導問題。在鏈中的某一點,你必須有一個密鑰來解密某些東西。即使您使用密鑰庫,您也需要該密鑰庫的密碼。你有沒有辦法改變你的認證方案? 另外,如果你問那裏,你可能會在http://security.stackexchange.com/上得到一些非常有見識的回覆。 – mcfinnigan

+0

@mcfinnigan這就是我的想法。我只是想看看是否有解決問題的辦法。 – ScArcher2

回答

5

您的問題是常見的問題。在Linux中,用戶密碼存儲在純文本文件中。儘管只存儲了密碼哈希值,但如果攻擊者能夠訪問該文件,他將不會花費很長時間才能使用脫機字典攻擊發現某個密碼。在這種情況下,操作系統依賴文件權限拒絕未經授權的用戶訪問。在你的情況下,它沒有太大的不同。您必須正確配置密碼文件權限並確保服務器的物理安全性。

+0

我遇到了客戶的安全策略需要在配置文件中加密用戶名/密碼的情況。這看起來很愚蠢,但我想我會在這裏檢查一下,看看我是否錯過了一些東西。 – ScArcher2

4

這是一個雞蛋問題。
然後,您將需要找到在哪裏存儲的密碼和密鑰庫等等.....

根據您的安全要求和需要,你可以使用對稱加密enrypt數據和找回密碼通過遠程服務器(您的服務器)使用客戶端證書認證。

或者您可以使用對稱加密來加密數據,並在您的jar中將密碼硬編碼,這是不安全的,但需要一些努力才能找到它,您可以將責任委派給文件系統權限誰可以訪問您的文件。

0

我已經成功使用JasyptStringEncrytor來加密屬性文件中的敏感信息和一些內部生成鹽和檢索密碼的內部程序。由於您使用的是Web服務,因此您可以使用Jasypt的Web PBE Configuration在部署時手動輸入密碼,甚至可以推出自己的類似解決方案。

+0

你好,你使用過Web PBE配置嗎?我認爲它可以解決egg-egg問題(總是需要一個主密鑰來加密文本)。它是如何設置的?我有點困惑。謝謝您的幫助! V. – Viktor

4

底線是某處需要以未加密的形式擁有「root-of-the-chain」密碼。受OS保護的本地文件,在源代碼中硬編碼的受OS保護的遠程文件等。

唯一的解決方法是要求人在應用程序啓動時鍵入初始密碼,這顯然是不可能的用於需要自動啓動的應用程序。