java的SunPKCS11多个电子令牌(智能卡)同时,供应商未找到错误(java SunPKCS1

2019-10-18 13:43发布

我使用从智能卡提供的X509证书的SSL连接。 我已经从雅典娜2点相同的标记。 我初始化密钥库我读证书后,但是当我试图做的,我没有得到发现我使用的第一个标记它不影响私人key.Connecting提供第二代币的实际连接,它的工作原理。 我试图通过specifing的slotIndexList 1加入不同SunPCKS11提供商,对于由下式给出的第二令牌的数目“个时隙= p11.C_GetSlotList(真)”,但仍然是相同的错误。 当我列出了供应商:我看到第二个供应商,但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

以及使用所述第二的第二令牌当误差:

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

谢谢

PS:我需要同一台机器上的两个标记

Answer 1:

在看看后, 这些文档是说,SunPKCS11的实例可以在配置的插槽。

因此,也许你可以试试

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


Answer 2:

即使你加2个供应商供应商名单中, SunPKCS11级缓存的第一个实例。 好像它总是使用这种情况下所有的时间。 这是你的第二个供应商没有拿起/标识的原因。

您可能需要编写一些代码偷偷摸摸接近你的使用情况。 你用你的第二个供应商的权利之前,你必须清除缓存实例。 您可以参考这个职位在这里。 这是没有答案,但你应该寻找代码

Field moduleMapField = PKCS11.class.getDeclaredField("moduleMap");  
moduleMapField.setAccessible(true);  
Map<?, ?> moduleMap = (Map<?, ?>) moduleMapField.get(<YOUR_FIRST_PROVIDER_INSTANCE>);  
moduleMap.clear(); // force re-execution of C_Initialize next time  

这是什么通常做的就是清除缓存实例。 现在你可以继续添加你的第二个提供程序实例与你的第二个令牌互动。



文章来源: java SunPKCS11 multiple etokens(smartcards) same time , provider not found error