首先,我对Java相对较新(并且在编程方面也不是很先进),所以如果我错过了一些明显的东西,我会提前道歉,浪费你的时间。
我正在尝试创建一个可以访问 Firefox '证书存储区的applet。 什么搞砸了,我会发誓这个代码在我编写它并首次测试时有效;然后我休眠了电脑,重新启动它后再也无法工作了。
一开始总是失败 - 在KeyStore ks = KeyStore.getInstance("PKCS11");
java.security.KeyStoreException: PKCS11 not found
at java.security.KeyStore.getInstance(Unknown Source)
和
Caused by: java.security.NoSuchAlgorithmException: PKCS11 KeyStore not available
at sun.security.jca.GetInstance.getInstance(Unknown Source)
我认为代码中没有任何相关内容,但仍然存在失败的功能:
/* Process PDF with Firefox */
private static byte[] processFirefox() throws GeneralSecurityException, IOException, DocumentException {
KeyStore ks = KeyStore.getInstance("PKCS11");
ks.load(null, "myPassword".toCharArray());
String alias = (String) ks.aliases().nextElement();
PrivateKey pk = (PrivateKey) ks.getKey(alias, null);
Certificate[] chain = ks.getCertificateChain(alias);
@SuppressWarnings("unused")
TSAClient tsaClient = null;
for (int i = 0; i < chain.length; i++) {
X509Certificate cert = (X509Certificate)chain[i];
String tsaUrl = CertificateUtil.getTSAURL(cert);
if (tsaUrl != null) {
tsaClient = new TSAClientBouncyCastle(tsaUrl);
break;
}
}
List<CrlClient> crlList = new ArrayList<CrlClient>();
crlList.add(new CrlClientOnline(chain));
return SignPDF.sign(chain, pk, DigestAlgorithms.SHA256, "PKCS11", CryptoStandard.CMS, "A Reason", "A Location", null, null, null, 0);
}
起初我以为是因为我没有指定提供者。然后我做了,没有任何改变。
有趣的是,我还尝试在Chrome中运行相同的applet,它给了我完全相同的错误。所以我猜测applet无法访问/读取Firefox的证书存储区,或者还有其他一些东西正在进行中。
如果我将PKCS11
替换为"Windows-MY", "SunMSCAPI"
并使用null
的密码条目,则相同的代码可以正常运行,因此我认为这是PKCS11 / Firefox特有的问题。
所以,我真的可以使用一些帮助。我已经在搜索结果的前几页中读到了每一个谷歌搜索结果,但要么我太绿了以至于无法提供帮助,要么他们真的没有足够的帮助。
如果我忘记添加任何可以帮助您的重要信息,请告知我们。
谢谢! 本
答案 0 :(得分:0)
也许您的安全设置已更改?
查看以下链接:
http://docs.oracle.com/javase/tutorial/deployment/applet/security.html
http://docs.oracle.com/javase/6/docs/technotes/guides/plugin/developer_guide/security.html
您可以使用简单的FileReader访问商店位置吗?