web-dev-qa-db-fra.com

Erreurs de carte à puce

J'ai une carte à puce CAC , et un lecteur de carte USB SCM Microsystems SCR331 . J'utilise Windows 7 Ultimate avec SP1.

Cette configuration fonctionnait très bien. Lorsque j'inscrivais mon CAC, mes certificats se propageaient immédiatement dans le magasin de certificats (comme en témoigne le Gestionnaire de certificats, certmgr.msc), et je pouvais me connecter aux sites Web nécessitant un CAC pour y accéder.

Récemment, j'ai cessé d'accéder aux sites Web. En regardant dans Certificate Manager, je constate qu’un seul, voire parfois deux de mes certificats sont présents. Si je les supprime et que je réinsère ma carte, un autre certificat peut apparaître.

Je viens de rentrer et j'ai remplacé le lecteur par le même modèle, donc je sais que ce n'est pas le coupable.

J'ai finalement pensé à consulter le journal système et j'ai remarqué les erreurs suivantes lors de l'insertion de la carte à puce:

enter image description here


Les erreurs, dans l'ordre chronologique:

Smart Card Service    Event ID: 610
   Smart Card Reader 'SCM Microsystems SCR33xx v2.0 USB SC Reader 0' rejected
   IOCTL TRANSMIT: Incorrect function.  If this error persists, your smart card
   or reader may not be functioning correctly.

   Command Header: 00 c0 00 00

WudfUsbccidDrv        Event ID: 11
   A Request has returned failure.
   MsgType: 0x80
   ICCStatus: 0x0
   CmdStatus: 0x1
   Error: 0xf6               // ICC_PROTOCOL_NOT_SUPPORTED
   SW1: 0x0
   SW2: 0x0

WudfUsbccidDrv        Event ID: 11
   An operation has failed (0x0, 0x0, 0x0, 0x0).
   ScT0Transmit: Failed to send request at TPDU level.
   HResult: The specified request is not a valid operation for the target device.
   // Note: this one comes from WUDFUsbccidDriver.dll CMyDevice::UsbScT0Transmit+7D0h

WudfUsbccidDrv        Event ID: 10
   Request[0](CLS=0x0,INS=0xc0,P1=0x0,P2=0x0,Lc=0,Le=256,.NETServiceMethod=0x0)

Il semble que le matériel ait indiqué une défaillance lors de IOCTL TRANSMIT, ce qui s'est répercuté sur l'infrastructure du pilote en mode utilisateur.

Edit: En consultant la spécification CCID, il semble que la carte réponde avec bmCommandStatus = 1 - Failed (error code provided by the error register). Et Error = ICC_PROTOCOL_NOT_SUPPORTED -10 (F6h). Je suppose que le pilote traduit cette erreur en "HResult: la demande spécifiée n'est pas une opération valide pour le périphérique cible". message.

En outre, la commande envoyée était INS = 0xC0, ce qui est GET RESPONSE .

Comment peut-il dire protocole non pris en charge? Qu'est-ce que le pilote fait différemment que lorsqu'il fonctionnait? Notez également que je viens d’essayer cela avec un nouveau CAC et que je constate un comportement similaire. Un problème avec le lecteur de carte ou le pilote?


Considérant que je viens de remplacer le lecteur (et les pilotes réinstallés, redémarré, etc.), y a-t-il un problème avec ma carte à puce? Je suppose que non, car fonctionne avec un autre lecteur sur un autre système. Je n'ai pas essayé un lecteur différent sur le même système.

En fait, le même lecteur connecté à un ordinateur Windows 7 VM sur la même machine physique fonctionne parfaitement! Quelque chose est clairement cassé, et ça me rend fou d'essayer de trouver quoi.

Alors quel est le problème?

8
Jonathon Reinhart

Juste au cas où quelqu'un resterait coincé avec ce problème - j'essaie de le résoudre depuis environ une journée.

Voici la solution:

  1. Pour Windows 64 bits, passez à la clé de registre à l'adresse

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers
    

Il devrait déjà y avoir des lecteurs. Et si ce n’est pas le cas, c’est la raison pour laquelle tous les pilotes sont installés mais ne fonctionnent toujours pas du tout.

  1. Allez à Device Manager, trouvez le lecteur en question, puis cherchez cette chaîne dans l’onglet Détails: Bus reported device description.

  2. Créez une sous-clé pour la clé ci-dessus. Le nom doit être exactement identique à celui Bus reported device description. Ensuite, ajoutez un compteur à la fin. Donc, la clé devrait être comme celle-ci:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers\O2Micro CCID SC Reader 0
    
  3. Créez maintenant deux valeurs de chaîne: la première avec le nom de l’appareil et la seconde pour les groupes. Voici mon exemple:

    Device = O2Micro CCID SC Reader 0
    
    Groups = SCard$DefaultReaders
    

C'est tout. Pour que cela fonctionne, déconnectez le lecteur et reconnectez-le. Dans le cas de périphériques internes, vous devrez peut-être redémarrer la machine. Et voici l'exemple de fichier .reg (remplacez le nom et le numéro du périphérique par vos propres valeurs):

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers\O2Micro CCID SC Reader 0]
"Device"="O2Micro CCID SC Reader 0"
"Groups"=hex(7):53,00,43,00,61,00,72,00,64,00,24,00,44,00,65,00,66,00,61,00,75,\
00,6c,00,74,00,52,00,65,00,61,00,64,00,65,00,72,00,73,00,00,00,00,00
1
Vladimir Molodnyakov