Assinar arquivo PDF - CADES Enveloped PKCS7 com CSharp

31/07/2019

0

Olá,

Estou trabalhando em um projeto onde é necessário assinar um arquivo PDF utilizando CADES enveloped PKCS7.

Até um ponto tudo correu bem. Consegui gerar o arquivo .p7s assinado e apresentando o arquivo original de forma relativamente simples. Porém preciso que a assinatura siga a política de assinatura da ICP Brasil (PA_AD_RB). Para isso preciso de dois passos que não estou conseguindo encontrar a forma correta de fazer:

1-inserir na assinatura a política de assinatura (SigPolicyIdAttribute)

2-inserir o atributo SigningCertificateV2

O código usado hoje para assinatura é o seguinte:
byte[] data = File.ReadAllBytes(inputPDF);
ContentInfo content = new ContentInfo(data);
SignedCms signedCms = new SignedCms(content, false);
CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, myCert);
signer.IncludeOption = X509IncludeOption.WholeChain;
signer.SignedAttributes.Add(new Pkcs9SigningTime());
signedCms.ComputeSignature(signer);
byte[] signeddata = signedCms.Encode();
File.WriteAllBytes(outputPDF + ".p7s", signeddata);

onde:
inputPDF é uma string com o caminho para o arquivo a ser assinado
outputPDF é uma string com o caminho onde será gerado o arquivo assinado
myCert é um x509Certificate2 com o certificado usado para assinatura, selecionado a partir do repositório do windows.

A Oid da política de assinatura é 2.16.76.1.7.1.1.2.3 e a URL http://politicas.icpbrasil.gov.br/PA_AD_RB_v2_3.der.

Alguém já fez algo parecido? Ou tem informação de algum material onde eu possa encontrar alguma referência sobre o assunto? Qualquer ajuda será muito bem vinda.

Agradeço desde já.

Claudiney
Claudiney Cogo

Claudiney Cogo

Responder

Post mais votado

27/10/2019

boa tarde Claudiney,
conseguiu resolver? também preciso gerar o arquivo p7s padrão CADES. Se puder me indicar uma solução agradeço sua colaboração.

Marcelo Stefaniak

Marcelo Stefaniak
Responder

Mais Posts

20/02/2020

Claudiney Cogo

Olá Marcelo,

desculpe por tanto tempo sem retornar.

No final do nosso projeto definiram deixar de fora a questão da política de assinatura que eu questionei aqui. Mas o código que postei no ínicio está gerando o arquivo corretamente. Segue aqui novamente:

byte[] data = File.ReadAllBytes(inputPDF);
ContentInfo content = new ContentInfo(data);
SignedCms signedCms = new SignedCms(content, false);
CmsSigner signer = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, myCert);
signer.IncludeOption = X509IncludeOption.WholeChain;
signer.SignedAttributes.Add(new Pkcs9SigningTime());
signedCms.ComputeSignature(signer);
byte[] signeddata = signedCms.Encode();
File.WriteAllBytes(outputPDF + ".p7s", signeddata);

onde:
inputPDF é uma string com o caminho para o arquivo a ser assinado
outputPDF é uma string com o caminho onde será gerado o arquivo assinado
myCert é um x509Certificate2 com o certificado usado para assinatura, selecionado a partir do repositório do windows.

Espero que ajude, caso ainda não tenha feito. Se precisar de qualquer coisa estou a disposição, ok.

Abraço.

Claudiney

boa tarde Claudiney,
conseguiu resolver? também preciso gerar o arquivo p7s padrão CADES. Se puder me indicar uma solução agradeço sua colaboração.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar