Array
(
)

Visualizar Assinatura Digital

Siplancontrol-m
   - 12 jul 2012

Boa Noite Galera!
Pessoal estou assinando um arquivo com c# da seguinte forma:
#Código

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:
#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

Regis Antunes
   - 13 jul 2012

Bom dia Ricardo,

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.

Siplancontrol-m
   - 13 jul 2012

As informações referente ao certificado eu pego tranquilo, mas preciso saber quando o arquivo foi assinado e a hora, e não sei onde essa informação esta, estou assinando um arquivo.tif, você saberia me dizer onde posso obter essa informação ?

Ricardo Lira

Siplancontrol-m
   - 14 jul 2012

Galera já consegui resolver, basta adicionar um SignedAttributes antes de assinar o arquivo vejam o exemplo.

#Código

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.