我正在尝试用我的智能卡签署我的文件。我像这样初始化我的密钥库:
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);
(...)
}
但不幸的是,我的链中只有一个证书(这张卡所有者的证书)。我没有任何受信任的根证书,因此在验证期间我收到一个错误,即文件是使用不受信任的证书签名的。
你有什么主意吗?我应该使用 SunPKSC11 类吗?它不适用于 java 7(我使用 java 6),看起来它已被弃用。有没有其他图书馆可以进入卡片的内脏?