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
java -jar pdfbox-sign.jar JohnSmith.pem <PASSWORD> minimal.pdf
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:
Adobe lineariza o arquivo antes de iniciar (alterando também a versão em PDF)
Os atributos PKCS7 assinados ( signedAttrs ) incluídos em cada caso são diferentes (e estão incluídos no cálculo)
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:
AdobenãoincluiosigningTime(1.2.840.113549.1.9.5)
pdfboxespecifiqueoatributoextraassinado
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