Erros de cartão inteligente

8

Eu tenho um cartão inteligente CAC e um leitor de cartão USB SCM Microsystems SCR3310 . Estou executando o Windows 7 Ultimate com SP1.

Essa configuração costumava funcionar muito bem. Quando eu inseria meu CAC, meus certificados se propagavam imediatamente para o armazenamento de certificados (conforme evidenciado pelo Gerenciador de Certificados certmgr.msc) e eu podia fazer logon em sites que exigiam um CAC para acesso.

Recentemente, parei de acessar os sites. Observando o Gerenciador de Certificados, vejo que apenas um ou, às vezes, dois dos meus certificados estão presentes. Se eu excluí-los e reinserir meu cartão, um certificado diferente pode aparecer.

Acabei de voltar e substituir o leitor pelo mesmo modelo, então sei que não é o culpado.

Finalmente pensei em examinar o log do sistema e notei os seguintes erros na inserção do cartão inteligente:

insira a descrição da imagem aqui


Os erros, em ordem cronológica:

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)

Parece que o hardware indicou uma falha durante o IOCTL TRANSMIT, que passou pela estrutura do driver no modo de usuário.

Edit: Consultando as especificações do CCID, parece que o cartão está respondendo novamente bmCommandStatus = 1 - Failed (error code provided by the error register). E Error = ICC_PROTOCOL_NOT_SUPPORTED -10 (F6h). Presumo que o driver traduza esse erro no "HResult: a solicitação especificada não é uma operação válida para o dispositivo de destino". mensagem.

Além disso, o comando enviado foi INS = 0xC0, que é GET RESPONSE .

Como se pode dizer que o protocolo não é suportado? O que o motorista está fazendo de maneira diferente do que quando funcionou? Observe que também tentei isso com um novo CAC e estou vendo um comportamento semelhante. Um problema com o leitor de cartão ou driver?


Considerando que acabei de substituir o leitor (e reinstalar drivers, reinicializados etc.), há algo errado com o meu cartão inteligente? Estou assumindo que não, porque ele faz o trabalho com outro leitor em outro sistema. Eu não tentei um leitor diferente no mesmo sistema.

De fato, o mesmo leitor conectado a uma VM do Windows 7 na mesma máquina física funciona muito bem! Algo está claramente quebrado, e isso está me deixando louco tentando descobrir o que.

Então qual é o problema?

Jonathon Reinhart
fonte
Acabei de ter uma adorável sessão de bate-papo com um Jasper V da Microsoft, que forneceu exatamente zero insight sobre o problema: pastebin.com/dvU3dNfa
Jonathon Reinhart
Eu tenho o mesmo problema, você encontra uma solução?
Tobia
Eu instalei o Linux.
Jonathon Reinhart
Olá, @JonathonReinhart, desculpe-me por seqüestrar este post, mas tenho exatamente o mesmo problema, você já encontrou uma solução?
Lankymart

Respostas:

2

Apenas para o caso de alguém ficar com esse problema - estou tentando corrigi-lo há um dia inteiro.

Aqui está a solução:

  1. Para Windows de 64 bits - vá para a chave do registro em

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

Já deve haver alguns leitores. Caso contrário, é por isso que você pode ter todos os drivers instalados, mas ainda não está funcionando.

  1. Ir para Device Manager, encontrar o leitor em questão, em seguida, olhar para esta corda no separador Detalhes: Bus reported device description.

  2. Crie uma subchave para a chave acima. O nome deve ser exatamente o mesmo Bus reported device description. Em seguida, adicione um contador no final. Portanto, a chave deve ser assim:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\Readers\O2Micro CCID SC Reader 0
    
  3. Agora crie alguns valores de sequência: primeiro com o nome do dispositivo e segundo para grupos. Aqui está o meu exemplo:

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

É isso aí. Para fazê-lo funcionar, desconecte o leitor e conecte-o novamente. No caso de dispositivos internos, pode ser necessário reiniciar a máquina. E aqui está o .regexemplo do arquivo (altere o nome e o número do dispositivo para seus próprios valores):

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
Vladimir Molodnyakov
fonte
Embora sua pergunta seja muito específica, obrigado por compartilhar suas idéias. +1
Davor Josipovic
Sinto muito, mas não entendo o que isso deve realizar. Meu dispositivo está claramente conectado e o driver está se comunicando com o leitor.
Jonathon Reinhart