2014-05-13 3 views
1

J'essaie de développer une application Java capable de faire la signature numérique sur un fichier avec une carte à puce.CKR_DEVICE_ERROR en utilisant iaik pour la signature numérique

J'ai mis le PKCS fournisseur n ° 11 de cette façon:

Security.addProvider(new IAIK()); 
Properties providerProperties = new Properties(); 
providerProperties.put("PKCS11_NATIVE_MODULE","path\\asepkcs.dll"); 
IAIKPkcs11 pkcs11Provider = new IAIKPkcs11(providerProperties); 
Security.addProvider(pkcs11Provider); 
Module module = Module.getInstance("path\\asepkcs.dll"); 

Après avoir lu le KeyStore que je charge pour carte à puce avant, mais lorsque je tente d'utiliser la méthode pour créer le signe numérique de la l'application Intercepter l'exception de suivi:

java.security.SignatureException: iaik.pkcs.pkcs11.wrapper.PKCS11Exception: CKR_DEVICE_ERROR      
at iaik.pkcs.pkcs11.provider.signatures.ExternalHashSignature.pkcs11Sign(ExternalHashSignature.java:294) 
at iaik.pkcs.pkcs11.provider.signatures.PKCS11Signature.engineSign(PKCS11Signature.java:638) 
at java.security.Signature$Delegate.engineSign(Unknown Source) 
at java.security.Signature.sign(Unknown Source) 
at sii.tesi.firma.provasc.FirmaScK.main(FirmaScK.java:288) 

Je ne suis pas en mesure de comprendre comment je pouvais résoudre le CKR_DEVICE_ERROR. J'utilise le signe des méthodes de suivi:

Signature signAlg = Signature.getInstance("SHA1withRSA"); 
signAlg.initSign(privateKey); 
signAlg.update(toBeEncrypted); 
byte[] signatureValue = signAlg.sign(); 

Répondre

0

vous a bien utilisé le Pkcs11Wrapper ainsi? Si oui, avez-vous spécifié le java.library.path? La version Wrapper doit correspondre à la version du fournisseur ou consultez le fichier Readme pour plus de détails.

En ce qui concerne votre code, spécifiez le fournisseur IAIK:

Signature.getInstance("SHA1withRSA", iaikProvider) 

et essayez d'ajouter le fournisseur comme ceci:

IAIK.addAsProvider(false); 

Si cela ne vous aide pas vérifier le journal d'erreur généré par le pkcs11 module.

0

J'ai corrigé CKR_DEVICE_ERROR. Le problème était simplement que la carte à puce faisait une mauvaise connexion (Omnikey 6121 sont mal construit)

un trombone pour bloquer la puce plus fermement sur la carte a résolu ce problème pour moi.