java - 认证链只包含一个位置——Java & PKCS11

标签 java certificate pkcs#11

我正在尝试使用我的智能卡签署我的文件。我像这样初始化我的 keystore :

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),看起来它已被弃用。是否有任何其他库可以进入卡片的内部?

最佳答案

实际上这张卡只包含一个证书,所以我的代码可以正常工作。我手动添加了丢失的证书并将它们连接到链中。有了那个链,我可以签署我的文件。我通过从另一个应用程序(proCertum 智能卡)中保存丢失的证书,该应用程序正式用于使用此类证书来播放文件。

关于java - 认证链只包含一个位置——Java & PKCS11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368775/

相关文章:

java - Spring安全permitall()适用于@RestController但不适用于@Controller

ios - 找不到 iOS 分发证书

在 C 中创建自己的证书结构

java - 世界上有更多的 body 时 FPS 速度较慢

java - Android - 将数据填充到 ListView 中

java - 如何在 Linux 上使用 Java 访问智能卡?

通过 PKCS#11 使用智能卡的 Android SSL

encryption - PKCS11 中采用 ISO/IEC 9796-2 方案 2 的 RSA

java - 使用 Java 托管 HTTP 端点

python - 如何在 Python 2.7.10+ 中使用 SSL 连接到 HTTPS 服务器并使证书可信?