3

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

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

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

谢谢!本

4

1 回答 1

0

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

查看这些链接:

您可以使用简单的 FileReader 访问存储位置吗?

于 2013-06-12T18:19:42.823 回答