मैं पीडीएफ हस्ताक्षर उत्पन्न करने के लिए ओपनसेल की क्षमता का मूल्यांकन कर रहा हूं । मुझे पीएससीएस 7 हस्ताक्षर क्षेत्रों के बीच कुछ अंतर दिखाई देता है जो ओपनसेल और अन्य कार्यक्रमों द्वारा उत्पन्न होता है ।
मैं वास्तव में कैसे निर्दिष्ट करूं कि signedAttr क्षेत्रों हस्ताक्षर में शामिल किया जाएगा?
उदाहरण के लिए, यहाँ के माध्यम से तीन तरह से तुलना है मिलकर एक हो जाना :
$ 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)
बाईं ओर : pdf_box द्वारा जेनरेट किया गया minimal_signed_pdfbox.pkcs7 (यह बाउंसी कैसल का उपयोग करता है ) इस तरह से:
java -jar pdfbox-sign.jar JohnSmith.pem <PASSWORD> minimal.pdf
- PKCS7 निकालने के लिए minimal_signed_pdfbox.pkcs7
केंद्र : Adobe Reader DC द्वारा निर्मित PKCS7 (यह Adobe PubSec का उपयोग करता है ) इस तरह से:
JohnSmith.pfx फ़ाइल से एक डिजिटल आईडी बनाएं
उस डिजिटल आईडी के साथ दस्तावेज़ पर हस्ताक्षर करें
परिणाम को minimal_signed_adobe.pdf के रूप में सहेजें
PKCS7 निकालने के लिए minimal_signed_adobe.pkcs7
अधिकार : PKCS7 कमांड लाइन के माध्यम से OpenSSL द्वारा उत्पन्न :
openssl cms -sign -signer JohnSmith.pem -binary -in minimal.pdf -outform der -out minimal.pkcs7
पहले दो मामलों में pkcs7 को peepdf टूल का उपयोग करके पीडीएफ से निकाला गया था ।
Minimal.pdf फ़ाइल पर हस्ताक्षर किए जा में मानक आईएसओ 32000 में वर्णित एक है कम से कम PDF फ़ाइल: अनुलग्नक H.2 ।
उपयोग की गई शेष फाइलें और प्रमाणपत्र यहां ज़िपित हैं: so.zip ।
हस्ताक्षर और messageDigest क्षेत्रों क्योंकि अलग हैं:
Adobe फ़ाइल को शुरू करने से पहले रैखिक करता है (पीडीएफ संस्करण भी बदल रहा है)
पर हस्ताक्षर किए PKCS7 विशेषताओं ( signedAttrs ) शामिल में हर मामला अलग होता है (और वे गणना में शामिल किए गए हैं)
वास्तविक परिदृश्य में, पीडीएफ में हस्ताक्षर शामिल करने के लिए अतिरिक्त वस्तुओं की आवश्यकता होती है, जो सरलीकरण के लिए इस मामले में मौजूद नहीं हैं।
एक पीडीएफ पर हस्ताक्षर करना न केवल हस्ताक्षर उत्पन्न करना है, बल्कि इसे फ़ाइल में एम्बेड करना भी है। लेकिन अब मैं हस्ताक्षर प्रारूप (2) पर केंद्रित हूं
एक बार जब स्माइली क्षमताओं को बाहर रखा गया है:
openssl cms -nosmimecap -sign -signer JohnSmith.pem -binary -in minimal.pdf -outform der -out minimal_nosmimecap.pkcs7
अंतर अधिक स्पष्ट हैं:
शेष अंतर हैं:
Adobe में साइनिंग टाइम (1.2.840.113549.1.9.5) शामिल नहीं है
pdfbox अतिरिक्त हस्ताक्षर किए विशेषता निर्दिष्ट 1.2.840.113549.1.9.52 (द्वारा मान्यता प्राप्त नहीं openssl asn1parse क्रम निर्दिष्ट करने के लिए) SHA256 एन्क्रिप्शन के बजाय निर्दिष्ट करने के signatureAlgorithm / एल्गोरिथ्म sha256WithRSAEncryption के रूप में ( 1.2.840.113549.1.1.11 )
मैं उन हस्ताक्षरित विशेषताओं को कैसे प्रबंधित कर सकता हूं? वाया कमांड लाइन मेरे पास केवल यह संबंधित पैरामीटर है:
-noattr don't include any signed attributes
पैरामीटर -nosmimecap के माध्यम से प्रकट नहीं होता है:
openssl cms --help
लेकिन यह काम करता है , क्या इसे नियंत्रित करने के लिए अन्य छिपे हुए पैरामीटर हैं?
मैं उपयोग कर रहा हूँ:
$ openssl version
OpenSSL 1.0.2g 1 Mar 2016