java SunPKCS11 多个 etokens(智能卡)同时,找不到提供者错误

标签 java ssl keystore smartcard pkcs#11

我正在使用 SSL 连接和智能卡提供的 X509 证书。 我有 2 个来自 athena 的相同 token 。我在读取证书后初始化 keystore ,但是当我尝试为第二个 token 进行实际连接时,我没有找到我的私钥的提供者。使用第一个 token 连接它不受影响,它可以工作。 我尝试通过将 slotIndexList 指定为 1 来添加不同的 SunPCKS11 提供程序,这是由“slots = p11.C_GetSlotList(true)”给出的第二个 token 的编号,但仍然出现相同的错误。 当我列出提供程序时:我看到第二个提供程序,但 java 不使用它(我不知道为什么)。

Provider _etpkcs11;
slots = p11.C_GetSlotList(true);

if(slot ==0) 
{
String pkcs11config = "name=Athena\nlibrary=C:\WINDOWS\system32\asepkcs.dll";
byte[] pkcs11configBytes =pkcs11config.getBytes();
 ByteArrayInputStream configStream = new ByteArrayInputStream(pkcs11configBytes);
etpkcs11 = new SunPKCS11(configStream);
Security.addProvider(etpkcs11);

}

以上作品 以下不起作用

if(slot ==1) 
{
String pkcs11config1 = "name=Athenaslot1\nlibrary=C:\WINDOWS\system32\asepkcs.dll";
byte[] pkcs11configBytes1 =pkcs11config1.getBytes();
ByteArrayInputStream configStream1 = new ByteArrayInputStream(pkcs11configBytes1);
etpkcs11 = new SunPKCS11(configStream1);
Security.addProvider(etpkcs11);
}

以下

for(int j=0;j<Security.getProviders().length;j++)
        {
            System.out.println(Security.getProviders()[j].getName());   
        }

返回:

SunPKCS11-Athena
SunPKCS11-Athenaslot1
SUN
SunRsaSign
SunEC
SunJSSE
SunJCE
SunJGSS
SunSASL
XMLDSig
SunPCSC

以及使用第二个第二个 token 时的错误:

 No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey

谢谢

PS:我需要在同一台机器上使用这两个 token

最佳答案

看了these docs之后它是说 SunPKCS11 的实例化可以在配置中占用一个插槽。

也许你可以试试

String pkcs11config1 = "name=Athenaslot1\nslot=1\nlibrary=C:\WINDOWS\system32\asepkcs.dll";

关于java SunPKCS11 多个 etokens(智能卡)同时,找不到提供者错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18438537/

相关文章:

ruby-on-rails - 配置 WEBrick 以使用自动生成的自签名 SSL/HTTPS 证书

android - 使用 keystore 确认 APK 身份

java - 写入 CSV 文件,然后在 Appengine (Java) 中将其压缩

python - 在 flask 本地开发上使用 https?

java - 是否可以修改一个非 volatile 变量,使另一个线程能够 "see"更新?

ssl - 读取文件 cert=REMOTE_SMTP_/etc/exim4/exim.crt 时出现 Exim TLS 错误

java - 您是否需要显式关闭 Java KeyStore 输入流?

android - 如何在 Android 中存储安全字符串?

java - 如何显示旋转 180 度左右的 Android UI 元素

java -version 返回错误,但 bash 配置文件正确