Obter Certificado Digital para Nota Fiscal Eletrônica

Post rápido sobre Nota Fiscal Eletrônica... Caso esteja desenvolvendo a aplicação de NFe para um PF e/ou PJ e esteja utilizando certificados do tipo A3 (no A1 deve servir também, mas ainda não testei), utilize a função abaixo para capturar da leitora o certificado. Os dados são armazenados no objeto para posterior manipulação, exemplo, assinatura do XML para envio.

using System.Security.Cryptography.X509Certificates;

X509Certificate2 oX509Cert = new X509Certificate2();
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
X509Certificate2Collection collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
X509Certificate2Collection collection2 = (X509Certificate2Collection)collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false);
X509Certificate2Collection scollection = (X509Certificate2Collection)collection2.Find(X509FindType.FindBySubjectName, "NOME DA EMPRESA \ PESSOA", false);
if (scollection.Count == 0)
    oX509Cert = null;
else
    oX509Cert = scollection[0];
 
No objeto oX509Cert é o objeto representativo de seu certificado digital no seu sistema. Geralmente esse tipo de certificado fica armazenado temporariamente na pasta Pessoal do Gerenciador de Certificados do Windows. Caso deseje visualizar qual o nome correto do certificado e realizar demais operações, vá em Iniciar, Executar e digite certmgr.msc. Uma tela como essa irá surgir:
 

Se o seu certificado não aparecer aí, deve ser que o leitor não está reconhecendo o cartão, ou o software de leitura não foi corretamente instalado e outros fatores que agora não entrará em detalhes.

11 comentários:

Anônimo disse...

Pra que serve a variável collection1?

Thiago Marçal disse...

A collection1 guarde informações acerca da validade do certificado.

Anônimo disse...

Muito bom, funcionou sem problemas!

Fábio disse...

Olá Thiago, parabéns pelo artigo.
Esse exemplo só funciona para aplicativos Desktop correto?

Thiago Marçal disse...

Fábio, funciona para web também contudo o certificado tem que ficar espetado no servidor web.

Fábio disse...

Olá Thiago,

Obrigado pelo retorno, mas a minha situação seria necessário que o certificado estivesse na máquina do cliente e fosse acessado via browser.

Thiago Marçal disse...

Fábio, no caso você deve criar um ActiveX, por exemplo, (em C# pode ser feito usando essa função, inclusive) que irá acessar o computador cliente fazendo a autenticação e busca do certificado.

Anônimo disse...

Oi Thiago,
Não funcionou comigo, o servidor está com o token espetado, eu estou acessando-o pelo svn e não consigo obter o certificado. Ja tentei buscar pelo serial e pelo IssuerName, se vc tiver alguma dica eu agradeço
Artur
arturcostta@gmail.com

Thiago Marçal disse...

Artur,
Verifique se o sistema operacional está reconhecendo o token. Conforme especifiquei antes, vá em Iniciar, Executar e digite certmgr.msc. Veja se é listado o certificado e qual o nome correto.
Lembre-se que alguns certificados não funciona no Windows Server.

Blog da Ester disse...

Olá ... Como posso saber quando o certificado não funciona no windows server?

Thiago Marçal disse...

Ester, se você já adquiriu o certificado realize o processo abaixo:
Em Iniciar, Executar e digite certmgr.msc. Veja se é listado o certificado adquirido.
Ou pelo próprio software que vem junto com o certificado. Há um aplicativo que já faz leitura...
Se ainda não comprou, leia as instruções do certificado que eles especificam qual o SO é suportado por eles.

Postar um comentário