gpt4 book ai didi

java - 如何以编程方式将私钥添加到 Windows 证书存储

转载 作者:行者123 更新时间:2023-12-01 21:41:18 25 4
gpt4 key购买 nike

我从 JKS 中提取了 key 及其证书链,现在我尝试使用 Java 将此 key 添加到 Windows keystore 中。

为了加载我的 JKS,我执行了以下操作:

    String jksPath = "D:\\mykeystore.jks";
KeyStore keystore = KeyStore.getInstance("JKS");
FileInputStream fIn = new FileInputStream(jksPath);
keystore.load(fIn, "12345678".toCharArray());

然后我得到 key 和认证链:

    Key key = keystore.getKey("res1", "12345678".toCharArray());
Certificate[] cchain = keystore.getCertificateChain("res1");

到目前为止一切顺利,然后我尝试将此 key 添加到我的 Windows keystore 中:

    KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null);
ks.setKeyEntry("myKey", key, "12345678".toCharArray(), cchain);

繁荣:

Exception in thread "main" java.lang.ClassCastException: [Ljava.security.cert.Certificate; cannot be cast to [Ljava.security.cert.X509Certificate; at sun.security.mscapi.KeyStore.engineSetKeyEntry(KeyStore.java:402) at sun.security.mscapi.KeyStore$MY.engineSetKeyEntry(KeyStore.java:62) at java.security.KeyStore.setKeyEntry(KeyStore.java:909)

由于 setKeyEntry 调用而引发异常。

P.S:当我在 JKS 类型的 keystore 上使用相同的语法时,不会引发异常。

最佳答案

sun.security.mcapi.KeyStore.engineSetKeyEntry() 的实现中似乎有一些笨拙的 java 代码。它尝试将证书的数组(“[Ljava.security.cert.Certificate”,注意类名中的前缀)转换为X509Certificates的数组(“[ Ljava.security.cert.X509Certificate"),这不是 java 允许您使用简单的强制转换表达式执行的操作(例如,请参阅 discussion 类似的错误)。

在类似情况下,我所做的就是将证书数组作为 X509Certificate 数组而不是简单的证书数组传递给 keyStore.setKeyEntry() 方法调用。

关于java - 如何以编程方式将私钥添加到 Windows 证书存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36406281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com