2011-09-26 70 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