Leitura de certificado digital

418 views
Skip to first unread message

Daniele

unread,
Feb 24, 2009, 6:44:53 AM2/24/09
to SPED - Sistema Público de Escrituração Digital
Alguem poderia me ajudar a fazer a leitura de um certificado digital
com C# ???
O q eu preciso é ler o CNPJ desse certificado, pois quero fazer um
comparativo
do CNPJ da NF-e com o CNPJ do certificado que vou utilizar para assina
a NF-e

Tenho esse problema pq o meu sistema de NF-e ira ler XMLs de vários
CNPJ, ou seja, tenho várias empresas com CNPJ diferentes dentro da
mesma base de dados....
então...
Digamos tenho três CNPJ para emissão de NF-e, na hora q vou assinar eu
tenho três certificado, quero q o meu sistema faça essa
comparação com o CNPJ do certificado com a da NF-e para q assinatura
gerada seja a correta....
Pois, se eu não fizer isso a NF-e pode ser assinada com certificado
errado, e o SEFAZ me retorna
“213 Rejeição: CNPJ-Base do Emitente difere do CNPJ-Base do
Certificado Digital”


Entao, alguem poderia me da uma luzzzz !!!!! (em C#)

Lafayette Duarte

unread,
Feb 24, 2009, 8:30:22 AM2/24/09
to sped...@googlegroups.com
Ola Daniele,
 
tente usar este metodo:
Até onde eu ja vi, o subjectname tem as informações que você precisa.
 
esse metodo vai abrir a store, listar todos os certificados com o proposito de assinatura digital e pegar o subject do primeiro que encontrar.
o subject é uma string parecia com:
 
CN=XXXXXXXXX-CNPJ , S=UF, L=DESC-UF, OU=XXXXX, OU=CONTRIBUINTE, OU=Secretaria da Receita Federal-SRF, O=ICP-Brasil, C=BR
 
as marcadas acima eu removi.
mas o que interessa é que a primeira posicao do array que o metodo vai rtornar é CN=XXXXX onde XXXX é uma string que contem o cnpj que você quer.
 
não sei se existe uma forma  melhor de obter a informação.
se alguem souber ....
 
espero que ajude.
 

using

System.Security.Cryptography.X509Certificates;

 

......

 

 

public string[] getDadosCertificado()

{

string[] resultados = null;

//abre a store do usuario corrente

X509Store store = new X509Store("MY", StoreLocation.CurrentUser);

store.Open(

OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;

X509Certificate2Collection listaCertificados = collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, true);

if(listaCertificados.Count > 0){

resultados = listaCertificados[0].Subject.Split(

',');

}

return resultados;

}



 
2009/2/24 Daniele <dic.c...@gmail.com>

Lafayette

unread,
Feb 24, 2009, 9:03:58 AM2/24/09
to SPED - Sistema Público de Escrituração Digital

encaminhando pelo site do grupo... as mensagens estã voltando.. alguém
já viu isso?

-----------------------
Ola Daniele,

tente usar este metodo:
Até onde eu ja vi, o subjectname tem as informações que você precisa.

esse metodo vai abrir a store, listar todos os certificados com o
proposito de assinatura digital e pegar o subject do primeiro que
encontrar.
o subject é uma string parecia com:

CN=XXXXXXXXX-CNPJ , S=UF, L=DESC-UF, OU=XXXXX, OU=CONTRIBUINTE,
OU=Secretaria da Receita Federal-SRF, O=ICP-Brasil, C=BR

as com XXX ou UF ou DES-CUF acima eu removi.
mas o que interessa é que a primeira posicao do array que o metodo vai
rtornar é CN=XXXXX onde XXXX é uma string que contem o cnpj que você
quer.

não sei se existe uma forma melhor de obter a informação.
se alguem souber ....

espero que ajude.

using

System.Security.Cryptography.X509Certificates;


......





public string[] getDadosCertificado()
{


string[] resultados = null;

//abre a store do usuario corrente

X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(

OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

X509Certificate2Collection collection = (X509Certificate2Collection)
store.Certificates;

X509Certificate2Collection listaCertificados = collection.Find
(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature,
true);

if(listaCertificados.Count > 0){
resultados = listaCertificados[0].Subject.Split(',');
}


return resultados;
}




Reply all
Reply to author
Forward
0 new messages