まず第一に、私は Java に比較的慣れていません (そして、一般的なプログラミングもあまり進んでいません)。
Firefoxの証明書ストアにアクセスするアプレットを作成しようとしています。混乱しているのは、私がこのコードを書いて最初にテストしたときに、このコードが機能したことを誓うということです。それから私はPCを休止状態にし、再起動するとそれ以降は機能しなくなりました。
それは常に最初に失敗します-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
に置き換えれば問題なく動作するので、PKCS11/Firefox 特有の問題だと思います。"Windows-MY", "SunMSCAPI"
null
それで、私は本当にこれでいくつかの助けを使うことができました. 検索結果の最初の数ページに表示される Google のヒットは文字通りすべて読んでいますが、私が環境に配慮しすぎて役に立たなかったか、まったく役に立たなかったかのどちらかです。
あなたが私を助けるのに役立つ重要な情報を追加するのを忘れた場合は、お知らせください.
ありがとう!ベン