Java applet无法访问Firefox证书存储

时间:2013-06-12 13:00:52

标签: java firefox applet pkcs#11

首先,我对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特有的问题。

所以,我真的可以使用一些帮助。我已经在搜索结果的前几页中读到了每一个谷歌搜索结果,但要么我太绿了以至于无法提供帮助,要么他们真的没有足够的帮助。

如果我忘记添加任何可以帮助您的重要信息,请告知我们。

谢谢! 本

1 个答案:

答案 0 :(得分:0)

也许您的安全设置已更改?

查看以下链接:

您可以使用简单的FileReader访问商店位置吗?