3

我正在尝试从 Windows-MY 密钥库获取证书和私钥并将它们写入文件,但我有一些问题使我认为 Java 不允许将 PrivateKey 从 Windows 密钥库写入文件:

try {
  KeyStore ks = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
  ks.load(null, null) ;
  java.util.Enumeration en = ks.aliases() ;

while (en.hasMoreElements()) {
    String aliasKey = (String)en.nextElement() ;
    Certificate c = ks.getCertificate(aliasKey) ;       

    if (aliasKey.equals("myKey") ) {
          PrivateKey key = (PrivateKey)ks.getKey(aliasKey, "monPassword".toCharArray());
          Certificate[] chain = ks.getCertificateChain(aliasKey);

          //write key on PEM file
          wr1 = new FileWriter(directory.getPath() + "\\" + "key.pem");
          PemWriter pWr = new PemWriter(wr1);

          pemWr = new PEMWriter(wr1);           
        try {
             pemWr.writeObject(key);

        } catch (Exception e) {
            e.printStackTrace();
        }
        pemWr.flush();
        pemWr.close();

    }
}

 } catch (Exception ioe) {
System.err.println(ioe.getMessage());
 }

我在文件中写入密钥时遇到异常:

org.bouncycastle.util.io.pem.PemGenerationException: unknown object passed - can't encode.

使我对某种安全保护感兴趣的是:

  1. key != null 和 key.getAlgorithm() != null
  2. key.getEncode() == null 和 key.getFormat() == null
  3. 如果我从文件中读取密钥,然后将其写入另一个文件,则代码有效,并且没有任何方法返回 null

如何在文件 .pem 上写入密钥?谢谢丹尼尔

4

0 回答 0