【问题标题】:how to create a properties file for keystore?如何为密钥库创建属性文件?
【发布时间】:2013-08-20 20:45:10
【问题描述】:

我创建了一个密钥库并提取了公钥。为了使用密钥库,我创建了一个keyproperties.properties 文件,但我不确定名为“PRIVATE”的属性。我完全搞不懂这是路径密码还是私钥密码还是其他密码。

  1. 属性文件->带有.properties扩展名
  2. 数据不是来自任何地方,我使用的是静态数据。
  3. PRIVATE-> 用于获取私钥的密钥库路径

这是我的代码的 sn-p:

public static void main(String[] args)throws Exception {
   Properties properties = new Properties();
   String path = properties.getProperty("PRIVATE");
   KeyStore ks = KeyStore.getInstance("pkcs12", "BC");
   ks.load(new FileInputStream(path), keystore_password.toCharArray());
}

【问题讨论】:

  • 您是如何创建属性文件的?数据从何而来?对属性“PRIVATE”做一个愚蠢的“System.out.println”怎么样?

标签: java pdf-generation itext digital-signature


【解决方案1】:

当您使用new Properties() 创建Properties 对象时,该对象中还没有存储任何数据。所以properties.getProperty("PRIVATE") 没有意义,因为它总是会返回null

你声称你已经创建了一个 .properties 文件,但我没有看到你在任何地方加载到 Properties 对象中:

properties.load(new FileInputStream(readerForProperties));

您在.properties 文件中定义的任何属性(请参阅API documentation 以了解如何创建此类文件)使用可以读取该文件的Reader,现在可以使用getProperty() 访问方法。

您正在使用path 变量创建一个FileInputStream,用于加载KeyStore。在这种情况下,路径必须是您的密钥存储的路径。

似乎您复制/粘贴了一个我写的示例,但没有阅读(或至少:没有理解)documentation

在我的示例中,我使用 "Private" 作为属性名称,但这无关紧要。如果您更喜欢将其命名为 "pathToKS""keystore" 甚至 "banana",则可以这样做。

就我而言,我的.properties 文件如下所示:

PUBLIC      c:/examples/signatures/public.cer
ROOTCERT    c:/examples/signatures/CACertSigningAuthority.crt
PRIVATE     c:/examples/signatures/private.p12
PASSWORD    secret

所以在我的情况下,properties.getProperty("PRIVATE") 将返回我的密钥库,properties.getProperty("PUBLIC") 将返回我的公钥,properties.getProperty("ROOTCERT") 将返回证书颁发机构的公钥,properties.getProperty("PASSWORD") 将返回我的密钥库和密码存储在与我的公钥对应的密钥库中的私钥(这些密码不必相同)。

如果您喜欢这样存储密钥库的路径:

banana  c:/examples/signatures/private.p12

您需要这样做:

String path = properties.getProperty("banana");

在编写更多代码之前,请仔细阅读文档。阅读文档将为您节省大量时间。

【讨论】:

  • 非常感谢您的精彩回复。我已经使用 iText 5.3.4 生成了一个数字签名的 pdf 文档。我还有一个疑问。用于生成数字签名的 iText 的所有版本是什么?
  • 5.3.4 是新功能开发过程中发布的版本之一。在发布该版本时,签名功能的某些部分仍在开发中。还有:当时的BC版本有一个bug;与此同时,BC 也被更新了。
  • 嗨 bruno,我在下一页 *.com/questions/19441977/… 上发布了一个问题。请给我建议,这将是伟大的