我正在尝试从 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.
使我对某种安全保护感兴趣的是:
- key != null 和 key.getAlgorithm() != null
- key.getEncode() == null 和 key.getFormat() == null
- 如果我从文件中读取密钥,然后将其写入另一个文件,则代码有效,并且没有任何方法返回 null
如何在文件 .pem 上写入密钥?谢谢丹尼尔