スマートカードから提供された X509 証明書で SSL 接続を使用しています。私は athena から 2 つの同一のトークンを持っています。証明書を読み取った後にキーストアを初期化しますが、2 番目のトークンの実際の接続を試みているときに、秘密鍵のプロバイダーが見つかりません。最初のトークンを使用して接続しても影響はなく、動作します。slotIndexList を「slots = p11.C_GetSlotList(true)」で指定された 2 番目のトークンの番号である 1 に指定して、別の SunPCKS11 プロバイダーを追加しようとしましたが、それでも同じエラーが発生します。プロバイダーをリストしているとき: 2 番目のプロバイダーが表示されますが、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
2番目の2番目のトークンを使用した場合のエラー:
No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey
ありがとう
PS: 同じマシンに両方のトークンが必要です