Assinar arquivo PDF - CADES Enveloped PKCS7 com CSharp

.NET

C#

Certificado Digital

31/07/2019

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

Curtidas 0

Melhor post

Marcelo Stefaniak

Marcelo Stefaniak

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.
GOSTEI 1

Mais Respostas

Claudiney Cogo

Claudiney Cogo

31/07/2019

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.
GOSTEI 0
POSTAR