2011-09-26 39 views
3

我正在設計一個小工具(Web界面和Web服務),用於使用私有RSA密鑰對某些blob的數據進行簽名。應用程序將擁有多個私鑰(即針對不同類型的BLOB),並且將來我們可能會棄用一些密鑰(並添加新密鑰)。Java Webapp和KeyStore

問題是我應該在哪裏存儲KeyStore文件?將它添加到META-INF似乎不是一個好主意,因爲它會被軟件更新覆蓋。其他選項將存儲到/etc/myapp/keys.keystore或blob列中的表中。

那麼,存儲密鑰庫的「規範」方式是什麼?

回答

3

我不認爲有一個規範的方法。也許最好的選擇是讓應用程序外部的密鑰存儲庫以及配置它的位置(例如通過-Dkeystore.location=/home/..(類似於this

+0

我認爲這可能是最好的解決方案。會試試看。謝謝 – pedrokiefer

0

在過去,我將密鑰庫存儲在文件系統中,如與.jks擴展名的文件,有問題的應用始終運行作爲一個特定的用戶,所以我們把文件(的子目錄)用戶的主目錄。然後,我們不得不沿着

String keystorePath = System.getProperty("ourapp.keystore.path"); 
File keystoreFile; 
if (keystorePath!=null) 
    keystoreFile = new File(keystorePath); 
else 
    keystoreFile = new File(System.getProperty("user.home"), "ourapp.jks"); 
if (!f.exists()) { 
    // Some sort of whining, return 
} 
// ...load and deal with keystore... 

行一些代碼我不認爲有這樣一個規範的方法(儘管我可能是錯的)。這種方式對我們的用例來說很好。

0

我沒有試過這個,但看起來像這樣做的推薦方法是在context.xml中使用環境條目。

Tomcat docs here

Related stackoverflow question here

而且,你如何描述你將如何實現加密聽起來像有可能會有問題了。閱讀用戶erickson的各種答案的建議,看看如何做到這一點。這裏是一個問題開始:Java 256-bit AES Password-Based Encryption

+0

如果接收加密數據的另一方是JVM,那麼Erickson的建議非常好。在我的情況下,它是一個具有簡單的RSA實現的FPGA,所以我沒有用於派生密鑰的資源。 – pedrokiefer

+0

此外,這隻適用於你有用戶輸入密碼,這聽起來像你沒有。他還提供了其他建議,例如爲每個文件或BLOB加密使用唯一的初始化向量。 –

+0

每個blob都有一個鹽和一個獨特的53位字段(FPGA「DNA」),只匹配一個FPGA,所以只要我保留我應該工作的私鑰'_safe_'(我知道,沒有什麼是真正安全的)正好。 – pedrokiefer