我不想将证书导入到keytool
的密钥库中。我想要的是将java.security.cert.Certificate
对象添加到java.security.KeyStore
对象中。
我的应用程序使用FireFox用户证书和智能卡中的NSS + JSS。 APP首先通过NSS加载所有用户证书并将它们存储到KeyStore
对象中,然后存储它们的SN,DN等。然后,使用org.mozilla.jss.CryptoManager
我加载所有外部模块,然后加载模块的每个标记最后,通过这一行,我得到一个CryptoStore
,其中包含令牌的所有证书:
CryptoStore store = null;
store = token.getCryptoStore();
org.mozilla.jss.crypto.X509Certificate[] certs = store.getCertificates();
然后,我阅读这些证书并存储他们的SN,DN等,以及用户证书的数据,以便显示UI部分。
进行身份验证时,系统会提示用户选择要包含所有证书的对话框。此窗口有一个表,其中包含每个证书alias
的行,用户的+卡。然后,我使用选定的keyStore
从alias
中选择证书。
问题出现了:keyStore
只有来自FireFox的用户证书条目,而不是卡片中的用户证书条目。如果我从卡中选择一个,并执行此操作:
certificate = keyStore.getCertificate(alias);
返回null
。这是有道理的,因为卡中的那些存储在CryptoStore
中。现在,如果我这样做:
keyStore.setCertificateEntry(alias, cert); //cert is a certificate from card
没有异常发生。然后,当我再次这样做时:
certificate = keyStore.getCertificate(alias);
来自NullPointerException
的{{1}}发生。
我的方法可以将智能卡中的证书添加到sun.security.pkcs11.p11keyStore.P11KeyStore.getID()
吗?
为什么例外?