如何使用 Java 以编程方式将证书安装到 windows 个人证书存储区?

How do I programmatically install a certificate to the windows personal certificate store using Java?

在 windows 个人证书存储中,我尝试使用 Java 以编程方式安装带有私钥的证书(使用方法 setKeyEntry)。但是当我这样做时出现异常。

Caused by: java.lang.UnsupportedOperationException: Cannot assign the key to the given alias.
    at jdk.crypto.mscapi/sun.security.mscapi.CKeyStore.engineSetKeyEntry(CKeyStore.java:405)
    at jdk.crypto.mscapi/sun.security.mscapi.CKeyStore$MY.engineSetKeyEntry(CKeyStore.java:57)

代码片段:

    KeyStore userCertStore = KeyStore.getInstance(getValue(CERTIFICATE_STORE_TYPE));
    userCertStore.load(null,null);
    for (iaik.x509.X509Certificate cert : user.getUserCertificates()) {
        userCertStore.setCertificateEntry(cert.getSubjectDN().toString(), cert);
        userCertStore.setKeyEntry(cert.getSubjectDN().toString(),user.getUserPrivateKey(cert),new 
        SecureStringBuffer(new StringBuffer(password)).toCharArray(),user.getUserCertificates());
    }

证书已在 setKeyEntry 期间设置 - 不要使用 setCertificateEntry 存储证书。

setCertificateEntry用于设置可信证书(对方的),setKeyEntry用于存储私钥和完整的证书链属于那个私钥。

因此,当您设置私钥时,别名已被“可信证书”使用。