【问题标题】:How to store & get own screct key in Java 8 PKCS12 keystore如何在 Java 8 PKCS12 密钥库中存储和获取自己的密钥
【发布时间】:2019-03-12 06:30:49
【问题描述】:

我正在尝试将我自己的密钥存储在 PKCS12 密钥库中。我尝试使用以下代码:

char[] passArray = "password".toCharArray();// this is key store pass

String key  = "test123"; // this is my own secret key

// Loading a Keystore
KeyStore p12KeyStore = KeyStore.getInstance("PKCS12");
p12KeyStore.load(new FileInputStream("testKeyStore.p12"), passArray);

存储我自己的密钥,如下所示:

byte [] byteKey = key.getBytes();

SecretKeySpec keySpec = new SecretKeySpec(byteKey, "DSA");

KeyStore.SecretKeyEntry secret = new KeyStore.SecretKeyEntry(keySpec);

KeyStore.ProtectionParameter password = new KeyStore.PasswordProtection(passArray);

p12KeyStore.setEntry("secret-key", secret, password);

但我不确定是否按照最佳实践存储我自己的密钥。以及尝试从密钥库获取我自己的密钥时,因为它不像我原来的密钥。

Key eKey = p12KeyStore.getKey("secret-key", passArray);

谁能帮我在 PKCS12 密钥库中存储和获取我自己的秘密?

【问题讨论】:

    标签: java keystore pkcs#12


    【解决方案1】:

    您确定上面的代码有效吗?因为DSA是非对称算法,不是对称算法。如果您确定它是密钥,则它必须是 AESDESDESede(三重 DES)。你上面的代码应该失败了。

    并回答您的问题:

    • 就像数据库存储数据一样,密钥(秘密密钥和密钥对)和证书应该存储在密钥库中,它们应该驻留在您的应用程序中。您应该从密钥库中引用/检索它们。
    • 根据您在其中一个陈述中所说的,密钥与您最初存储然后检索时的密钥不同,据此判断,我认为您拥有的密钥是 Triple DES 或 @987654327 @ 钥匙。 DES/TripleDES 使用奇偶校验位,奇偶校验位由 Java API SecretKeySpec 纠正。这导致密钥看起来与原始密钥不同,但实际上是相同的。您可以阅读有关奇偶校验位的更多信息here

    作为最佳实践,您不应将密钥存储在 PKCS12 密钥库中。 Internet 标准定义PKCS12 密钥库应仅包含一个与其证书链关联的KeyPair 条目。尽管它可以包含多个条目,但最好只有一个条目,key passwordkeystore password 相同。它们也可以存储密钥,但最好以JCEKS 密钥库格式存储它们。

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 2011-09-03
      • 2016-06-25
      • 2014-11-16
      • 1970-01-01
      相关资源
      最近更新 更多