スマート カードでファイルに署名しようとしています。次のようにキーストアを初期化します。
String pkcs11config = "name = CertumSmartCard \n" + "library = "
+ new File(".").getAbsolutePath() + "/cryptoCertum3PKCS.dll";
Provider pkcs11Provider = new SunPKCS11(new ByteArrayInputStream(
pkcs11config.getBytes()));
Security.addProvider(pkcs11Provider);
KeyStore keyStore = KeyStore.getInstance("PKCS11", pkcs11Provider);
keyStore.load(null, pin.toCharArray());
次に、次を使用して証明書チェーンを読み取ろうとします。
Enumeration<String> aliasesEnum = keyStore.aliases();
String alias = null;
while (aliasesEnum.hasMoreElements()) {
alias = aliasesEnum.nextElement();
Certificate[] certChain = keyStore.getCertificateChain(alias);
(...)
}
残念ながら、チェーン内の証明書は 1 つしか取得できません (このカードの所有者の証明書)。信頼されたルート証明書を持っていないため、検証中に、信頼されていない証明書を使用してファイルが署名されたというエラーが表示されます。
何か考えはありますか?SunPKSC11 クラスを使用する必要がありますか? Java 7 では動作しません (私は Java 6 を使用しています)。非推奨のようです。カードの根性に入る他のライブラリはありますか?