especifica atributos assinados com o OpenSSL na assinatura PKCS7

2

Estou avaliando a capacidade de openssl para gerar assinaturas de PDF . Eu vejo algumas diferenças entre os campos de assinatura PKCS7 gerados por openssl e outros programas.

Como posso especificar exatamente quais campos signedAttr seriam incluídos na assinatura?

Por exemplo, aqui está uma comparação de três vias por mesd :

$ meld <(openssl cms -inform DER -cmsout -print -in minimal_signed_pdfbox.pkcs7) \
       <(openssl cms -inform DER -cmsout -print -in minimal_signed_adobe.pkcs7)  \
       <(openssl cms -inform DER -cmsout -print -in minimal.pkcs7)

Ladoesquerdo:minimal_signed_pdfbox.pkcs7geradopor pdfbox (ele usa Castelo Bouncy ) desta forma:

java -jar pdfbox-sign.jar JohnSmith.pem <PASSWORD> minimal.pdf
  • extrai o PKCS7 para minimal_signed_pdfbox.pkcs7

Centro : PKCS7 gerado pelo Adobe Reader DC (Ele usa Adobe PubSec ) desta maneira:

  • Crie um ID digital no arquivo JohnSmith.pfx

  • Assine o documento com essa ID digital

  • Salve o resultado como minimal_signed_adobe.pdf

  • extraia o PKCS7 para minimal_signed_adobe.pkcs7

Direito : PKCS7 gerado pelo OpenSSL através da linha de comandos :

openssl cms -sign -signer JohnSmith.pem -binary -in minimal.pdf -outform der -out minimal.pkcs7

Nos dois primeiros casos o pkcs7 foi extraído do pdf usando o ferramenta peepdf .

O arquivo minimal.pdf que está sendo assinado é o descrito na norma ISO -32000 em Anexo H.2: Arquivo PDF Mínimo .

O restante dos arquivos usados e os certificados são compactados aqui: so.zip .

Os campos assinatura e messageDigest são diferentes porque:

  1. Adobe lineariza o arquivo antes de iniciar (alterando também a versão em PDF)

  2. Os atributos PKCS7 assinados ( signedAttrs ) incluídos em cada caso são diferentes (e estão incluídos no cálculo)

  3. No cenário real, o PDF precisa de objetos extras para incluir a assinatura, que não estão presentes neste caso, para simplificação.

Assinar um PDF não é apenas para gerar a assinatura, mas também para incorporá-la ao arquivo. Mas agora estou focado no formato de assinatura (2)

Depois que os recursos do smime forem excluídos:

openssl cms -nosmimecap -sign -signer JohnSmith.pem -binary -in minimal.pdf -outform der -out minimal_nosmimecap.pkcs7

As diferenças são mais claras:

Asdiferençasrestantessão:

  1. AdobenãoincluiosigningTime(1.2.840.113549.1.9.5)

  2. pdfboxespecifiqueoatributoextraassinado 1.2.840.113549.1.9 .52 não reconhecido por ( openssl asn1parse ) para especificar a encriptação sha256 em vez de especificar o signatureAlgorithm / algorithm como sha256WithRSAEncryption ( 1.2.840.113549.1.1.11 )

Como posso gerenciar esses atributos assinados? Via linha de comando eu tenho apenas este parâmetro relacionado:

-noattr        don't include any signed attributes

o parâmetro -nosmimecap não aparece via:

openssl cms --help

mas funciona , existem outros parâmetros ocultos para controlar isso?

Estou usando:

$ openssl version
OpenSSL 1.0.2g  1 Mar 2016
    
por yucer 23.05.2017 / 17:30

0 respostas

Tags