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

如何使用Java以编程方式将证书安装到windows个人证书存储?,java,cryptography,jce,jca,Java,Cryptography,Jce,Jca,在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(CKeySt

在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
用于存储私钥和属于该私钥的完整证书链

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

因为我自己没有对此进行测试(只是应用了推理),如果这解决了您的问题,请在下面进行评论(我认为它是通过accept解决的,但是的,只是想确定一下)。