首先,我对 Java 比较陌生(一般编程也不是很先进),所以如果我错过了一些明显的东西,我提前为浪费你的时间道歉。
我正在尝试创建一个可以访问Firefox证书存储的小程序。搞砸的是,我发誓这段代码在我编写和第一次测试时可以工作。然后我让电脑休眠,重新启动后它就不再工作了。
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 中运行相同的小程序,它给了我完全相同的错误。所以我猜小程序要么无法访问/读取 Firefox 的证书存储,要么完全发生了其他事情。PKCS11
相同的代码,如果我替换"Windows-MY", "SunMSCAPI"
和密码输入,则可以完美运行null
,所以我认为这是 PKCS11/Firefox 特有的问题。
所以在那里,我真的可以使用一些帮助。我已经阅读了搜索结果前几页上的每一个谷歌点击,但要么我太绿了,他们无法提供帮助,要么他们真的没有足够的帮助。
如果我忘记添加任何可以帮助您帮助我的重要信息,请告诉我。
谢谢!本