如何使用 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
用于存储私钥和完整的证书链属于那个私钥。
因此,当您设置私钥时,别名已被“可信证书”使用。
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
用于存储私钥和完整的证书链属于那个私钥。
因此,当您设置私钥时,别名已被“可信证书”使用。