Java 更新/删除证书链:无法将密钥分配给给定别名

Java 更新/删除证书链:无法将密钥分配给给定别名,java,digital-signature,keystore,public-key-encryption,digital-certificate,Java,Digital Signature,Keystore,Public Key Encryption,Digital Certificate,我想用从测试CA返回(已签名CSR)的新证书更新我以前的自签名证书,例如:chains。我的默认密钥库是:Windows my 步骤1:我已经创建了一个自签名的私有公钥对 Certificate和CSR(私钥存储在Windows MY中 自签名证书) 步骤2:将CSR发送给CA 步骤3:CA返回该公钥的证书链 现在我想用CA返回的证书替换自签名证书。注意:我把私钥存储在我的商店里。 但我得到了这些错误: java.lang.UnsupportedOperationException:无法将

我想用从测试CA返回(已签名CSR)的新证书更新我以前的自签名证书,例如:chains。我的默认密钥库是:Windows my

  • 步骤1:我已经创建了一个自签名的私有公钥对 Certificate和CSR(私钥存储在Windows MY中 自签名证书)

  • 步骤2:将CSR发送给CA

  • 步骤3:CA返回该公钥的证书链

现在我想用CA返回的证书替换自签名证书。注意:我把私钥存储在我的商店里。

但我得到了这些错误:

java.lang.UnsupportedOperationException:无法将密钥分配给 给定别名。在 sun.security.mscapi.KeyStore.engineSetKeyEntry(KeyStore.java:415)位于 sun.security.mscapi.KeyStore$MY.engineSetKeyEntry(KeyStore.java:55) 位于java.security.KeyStore.setKeyEntry(未知源) keygenerator.KeyInstaller.InstallCertificateInWindowStore(KeyInstaller.java:284) 在keygenerator.KeyInstaller.doJob(KeyInstaller.java:167)的 keygenerator.KeyGeneration.installCertificate(KeyGeneration.java:171) 位于keygenerator.KeyGeneration.main(KeyGeneration.java:68)


Windows密钥库(从Java命名为Windows MY)不可直接写入。您需要将CA返回的私钥和证书链打包到PKCS#12文件(.p12)中,并使用Windows导入工具进行导入。

感谢您的关注。请检查更新我不确定我是否理解您的更新。答案是一样的:您不能以编程方式修改windows my keystore条目。当然,您可以将证书链添加到您自己的密钥库中,并将其保存为p12格式,以便稍后在Windows中导入。我已经按照您的建议进行了操作,这符合我的目的。谢谢
Key privKey = keyStore.getKey(commonName, keyPass);
System.out.println("invalid private key :" + (privKey == null));

// keyStore.deleteEntry(commonName);
// keyStore.load(null, keyPass);

if (isPrivateKeyAvailable) {
    System.out.println("name:" + commonName + " is updatded");
    keyStore.setKeyEntry(commonName, privKey, keyPass, chains);
} else {
    System.out.println("name:" + commonName + " does not exist");
}