2

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

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

这是我的代码片段:

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());
}
4

1 回答 1

3

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

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

properties.load(new FileInputStream(readerForProperties));

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

您正在使用该path变量来创建FileInputStream用于加载KeyStore. 在这种情况下,路径需要是您的密钥库的路径。

好像您复制/粘贴了我在未阅读(或至少:未理解)文档的情况下编写的示例。

在我的示例中,我用作"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");

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

于 2013-08-19T10:43:59.190 回答