Visualizar Assinatura Digital
12/07/2012
0
Pessoal estou assinando um arquivo com c# da seguinte forma:
try { ContentInfo content = new ContentInfo(data); SignedCms signedCms = new SignedCms(content, false); if (VerifySign(data)) { signedCms.Decode(data); } foreach (X509Certificate2 cert in certs) { CmsSigner signer = new CmsSigner(cert); signer.IncludeOption = X509IncludeOption.WholeChain; signedCms.ComputeSignature(signer); } return signedCms.Encode(); } catch(Exception ex) { throw new Exception(Erro ao assinar arquivo. A mensagem retornada foi: + ex.Message); }
Até aqui tudo bem, o problema esta sendo na hora de visualizar a assinatura, estou precisando de algumas informações que não estou conseguindo identificar, como Data e hora que o arquivo foi assinado, para extrair as informações estou usando o seguinte código:
SignedCms signed = new SignedCms(); signed.Decode(data); signed.CheckSignature(true);
no objeto SignedCms existe uma serie de informações como o Nome, CPF/CNPJ, mas não consegui extrair de jeito nenhum a data e a hora em que o arquivo foi assinado, alguém já passou por isso ou tem alguma dica ?
Desde já agradeço.
Ricardo Lira
Siplancontrol-m
Posts
13/07/2012
Regis Antunes
Você tem certeza que existe essa informação na assinatura do arquivo? Não sei como você fez, mas eu, pela assinatura eu obtenho o certificado e pelo certificado consigo pegar o nome e o CNPJ do assinador, porém mesmo assim tenho que escovar bits para encontrar essa informação. Porém data e hora da assinatura não deve estar no certificado e sim na assinatura mesmo.
Outra coisa, o arquivo é um Xml? se for tente usar a classe SignedXml do namespace System.Security.Cryptography.Xml, talves ele te dê mais recursos.
13/07/2012
Siplancontrol-m
Ricardo Lira
14/07/2012
Siplancontrol-m
CmsSigner signer = new CmsSigner(certificado); signer.SignerIdentifierType = SubjectIdentifierType.IssuerAndSerialNumber; signer.SignedAttributes.Add(new Pkcs9SigningTime()); // Aqui mora o segredo, e possível adicionar outros atributos importantes. signer.IncludeOption = X509IncludeOption.WholeChain; signedCms.ComputeSignature(signer, Silencioso); ArquivoAssinado = signedCms.Encode();
Valew Galera.
Clique aqui para fazer login e interagir na Comunidade :)