【问题标题】:Java Webapp and KeyStoreJava Webapp 和 KeyStore
【发布时间】:2011-09-26 12:41:50
【问题描述】:

我正在设计一个小工具(Web 界面和 Web 服务),用于使用 RSA 私钥对一些 blob 数据进行签名。应用程序将拥有多个私钥(即,用于不同类型的 blob),将来我们可能会弃用其中的一些密钥(并添加新的)。

问题是我应该将 KeyStore 文件存储在哪里?将它添加到 META-INF 似乎不是一个好主意,因为它会被软件更新覆盖。其他选项是存储到 /etc/myapp/keys.keystore 之类的东西或存储到 blob 列中的表中。

那么,存储密钥库的“规范”方式是什么?

【问题讨论】:

    标签: java keystore


    【解决方案1】:

    我认为没有规范的方法。也许最好的选择是将密钥库放在应用程序外部,并配置它的位置(例如通过-Dkeystore.location=/home/..(类似于this)。

    【讨论】:

    • 我认为这可能是最好的解决方案。会试一试。谢谢
    【解决方案2】:

    过去,我将密钥库存储在文件系统中,作为扩展名为.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...
    

    我认为没有规范的方法可以做到这一点(尽管我可能错了)。这种方式非常适合我们的用例。

    【讨论】:

      【解决方案3】:

      我没有尝试过,但看起来推荐的方法是使用 context.xml 中的环境条目。

      Tomcat docs here

      Related stackoverflow question here

      此外,您如何描述您将如何实施加密听起来可能存在一些问题。阅读用户 erickson 在各种答案中的建议,了解如何正确执行此操作。这是一个开始的问题:Java 256-bit AES Password-Based Encryption

      【讨论】:

      • Erickson 的建议真的很好,如果接收加密数据的对方是 JVM。在我的例子中,它是一个具有简单 RSA 实现的 FPGA,所以我没有资源来获取密钥。
      • 另外,这仅适用于您有用户输入密码的情况,听起来您没有输入密码。他还有其他建议,例如为您加密的每个文件或 BLOB 使用唯一的初始化向量。
      • 每个 blob 都有一个 salt 和一个唯一的 53 位字段(FPGA“DNA”),它只匹配一个 FPGA,所以只要我保留我的私钥'安全'(我知道,没有什么是真正安全的)应该可以正常工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 2015-09-09
      • 2021-09-15
      • 2018-06-22
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      相关资源
      最近更新 更多