chỉ định các thuộc tính đã ký với OpenSSL trong chữ ký PKCS7


2

Tôi đang đánh giá khả năng của openssl để tạo chữ ký PDF . Tôi thấy một số khác biệt giữa các trường chữ ký PKCS7 được tạo bởi openssl và các chương trình khác.

Làm cách nào tôi có thể chỉ định chính xác các trường SignAttr sẽ được bao gồm trong chữ ký?

Ví dụ, đây là so sánh ba chiều thông qua meld :

$ 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)

nhập mô tả hình ảnh ở đây

Phía bên trái : minim_sign_pdfbox.pkcs7 được tạo bởi pdfbox (nó sử dụng Bouncy Castle ) theo cách này:

java -jar pdfbox-sign.jar JohnSmith.pem <PASSWORD> minimal.pdf
  • trích xuất PKCS7 thành Minimal_sign_pdfbox.pkcs7

Center : PKCS7 được tạo bởi Adobe Reader DC (nó sử dụng Adobe PubSec ) theo cách này:

  • Tạo ID kỹ thuật số từ tệp JohnSmith.pfx

  • Ký tài liệu với ID kỹ thuật số đó

  • Lưu kết quả như trong Minimal_sign_adobe.pdf

  • trích xuất PKCS7 thành Minimal_sign_adobe.pkcs7

Phải : PKCS7 được tạo bởi OpenSSL này thông qua dòng lệnh :

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

Trong hai trường hợp đầu tiên, pkcs7 đã được trích xuất từ pdf bằng công cụ peepdf .

Tệp Minimal.pdf đang được ký là tệp được mô tả trong tiêu chuẩn ISO-32000 trong Phụ lục H.2: Tệp PDF tối thiểu .

Phần còn lại của các tệp được sử dụng và chứng chỉ được nén ở đây: so.zip .

Các trường chữ kýmessageDigest khác nhau vì:

  1. Adobe tuyến tính hóa tệp trước khi bắt đầu (cũng thay đổi phiên bản PDF)

  2. Các thuộc tính PKCS7 đã ký ( SignAttrs ) được bao gồm trong mọi trường hợp là khác nhau (và chúng được bao gồm trong tính toán)

  3. Trong kịch bản thực, PDF cần thêm các đối tượng để bao gồm chữ ký, không có trong trường hợp này, để đơn giản hóa.

Việc ký một bản PDF không chỉ để tạo chữ ký mà còn để nhúng nó vào tập tin. Nhưng bây giờ tôi tập trung vào định dạng chữ ký (2)

Khi các khả năng của khói được loại trừ:

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

Sự khác biệt rõ ràng hơn:

nhập mô tả hình ảnh ở đây

Sự khác biệt còn lại là:

  1. Adobe không bao gồm SignTime (1.2.840.113549.1.9.5)

  2. pdfbox chỉ định thuộc tính đã ký thêm 1.2.840.113549.1.9.52 không được nhận dạng bởi ( openssl asn1parse ) để chỉ định mã hóa sha256 thay vì chỉ định thuật toán / thuật toán chữ ký là sha256WithRSAEncoding ( 1.2.840.113549.1.1.11 )

Làm thế nào tôi có thể quản lý các thuộc tính đã ký? Thông qua dòng lệnh tôi chỉ có tham số liên quan này:

-noattr        don't include any signed attributes

tham số -nosmimecap không xuất hiện thông qua:

openssl cms --help

Nhưng nó hoạt động , có các tham số ẩn khác để kiểm soát điều đó?

Tôi đang sử dụng:

$ openssl version
OpenSSL 1.0.2g  1 Mar 2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.