2015-12-28 1 views
0

j'ai utilisé pour accéder à la chaîne de certificats pour la signature PDF sur un jeton USB avec ce code:Impossible d'accéder à tous les alias de KeyStore sur Token USB

this._keyStore = KeyStore.getInstance("PKCS11"); 
this._keyStore.load(null, myPassword); 
Enumeration<String> aliases = this._keyStore.aliases(); 
while (aliases.hasMoreElements()) { 
    String nextElement = (String) aliases.nextElement(); 
    System.out.println("Enumeration element : "+nextElement); 
try 
{ 
    this._privateKey = (PrivateKey) this._keyStore.getKey(nextElement, pass); 
    this._certificatesChain = (X509Certificate[]) this._keyStore.getCertificateChain(nextElement); 
    if (this._certificatesChain.length == 0) 
    { 
     //Let's try another 
     continue; 
    } 
    if (this._certificatesChain[0].getKeyUsage()[1]) 
    { 
     //I want to use this 
     break; 
    } 
} 
catch (Exception e){continue;} 

Je suis muni d'un nouveau jeton USB qui a gagné » t travailler avec ça. Il semble que l'utilisation de PKCS11 ne fera que lire l'un des deux certificats sur le Token, qui n'est pas celui que je suis censé utiliser pour la signature. La meilleure solution que j'ai trouvée est d'utiliser "Windows-MY" dans l'appel Keystore.getInstance(), qui peut accéder à tous les certificats (même ceux qui ne proviennent pas du Token, mais croisons-nous) . L'inconvénient majeur de ceci est que cela crée deux invites PIN pour l'ensemble du processus de signature: la première fois est l'invite que j'ai codé pour demander à l'utilisateur le code PIN; La deuxième fois, c'est quand j'essaye de signer - cette fois, avec une invite de Windows.

Existe-t-il un moyen d'accéder à tous les certificats avec une instance Keystore PKCS11 ou d'éviter l'invite Windows?

+0

S'agit-il d'une clé de stockage USB standard ou d'un périphérique cryptographique? Dans le second cas, les broches sont normales pour des problèmes de sécurité. –

+0

C'est un jeton de signature USB. – Lorenzo

Répondre

0

Je considère la suppression du poste parce qu'il y avait une erreur quelque part ailleurs dans mon code, mais je laisse ici si quelqu'un besoin:

le problème était que la dll que j'avais utilisé pour lire les certificats (incryptoki2.dll) ne fonctionnait plus avec les nouvelles clés du même fabricant. Passé à bit4ipki.dll et maintenant je peux lire les certificats.