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
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
Curtir tópico
+ 0
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.
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
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
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.
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
Clique aqui para fazer login e interagir na Comunidade :)