2012-10-08 10 views
15

मेरे पास एक प्रमाणपत्र C.pfx है जो मुझे ओपनएसएसएल के साथ काम करने के लिए दिया गया था। प्रमाण पत्र C.pfx निम्नलिखित प्रमाणन पथ है: सी> बी> एकओपनएसएसएल: स्थानीय जारीकर्ता प्रमाणपत्र प्राप्त करने में असमर्थ

मैं निम्न आदेश का उपयोग कर पीईएम को C.pfx परिवर्तित: openssl PKCS12 -इन C.pfx आउट C.pem -nodes - - ठीक है

मैंने फ़ाइल संपादक में प्रमाणपत्र C.pem खोला और देखा कि इसमें आरएसए निजी कुंजी और प्रमाण पत्र दोनों हैं।

मैं विंडोज एक्सपी में विश्वसनीय रू प्रमाणन अथॉरिटीज स्टोर के तहत स्थापित ए और बी प्रमाणपत्र दोनों भी देखता हूं।

लक्ष्य है, पर हस्ताक्षर करने के एन्क्रिप्ट, डिक्रिप्ट और एक परीक्षण फ़ाइल Windows संस्करण 1.0.1c के लिए OpenSSL का उपयोग कर यह सत्यापित (यह वर्तमान में नवीनतम संस्करण है)

मैं निम्न कमांड का उपयोग करें:

--TO SIGN--

openssl smime -sign -signer C.pem -in test.txt -out test.tmp -- WORKS OK 

--TO ENCRYPT--

openssl smime -encrypt -in test.tmp -out test.enc C.pem  -- WORKS OK 

--TO डिक्रिप्ट -

openssl smime -decrypt -in test.enc -recip C.pem -inkey C.pem -out test1.tmp -- WORKS OK 

--TO VERIFY--

openssl smime -verify -in test1.tmp -CAfile "C.pem" -out notes1.txt -- FAILS 

मैं एमएमसी कंसोल इस्तेमाल किया बी और एक प्रमाण पत्र फ़ाइलों Cer को निर्यात करने के लिए और फिर OpenSSL का उपयोग कर पीईएम करने के लिए उन्हें बदल दिया।

openssl smime -verify -in test1.tmp -CAfile "A.pem" -out notes1.txt -- FAILS 

openssl smime -verify -in test1.tmp -CAfile "B.pem" -out notes1.txt -- FAILS 

सभी 3 सत्यापित करने के लिए प्रयास करता है निम्नलिखित त्रुटि के साथ विफल: उसके बाद मैं निम्नलिखित 2 की कोशिश की

Verification failure 
3672:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:.\crypt 
o\pkcs7\pk7_smime.c:342:Verify error:unable to get local issuer certificate 

क्या मैं गलत कर रहा हूँ?

उत्तर

18

जब आप openssl smime verify का उपयोग करते हैं तो ओपनएसएल यह सत्यापित करने का प्रयास करता है कि इसका उपयोग करने के लिए प्रमाण पत्र अपने हस्ताक्षर की जांच करके विश्वसनीय है (यह प्रमाण पत्र में हस्ताक्षर है, हस्ताक्षर किए गए संदेश में हस्ताक्षर नहीं जिसे आपने सत्यापित करने के लिए कहा था)। ऐसा करने के लिए प्रमाण पत्र जारी करने वाले सीए की कुंजी के लिए प्रमाण पत्र की एक प्रति होना आवश्यक है।

-CAfile पैरामीटर का उपयोग उस सीए प्रमाणपत्र वाले फ़ाइल के नाम को पास करने के लिए किया जाता है, संदेश पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कुंजी का प्रमाणपत्र नहीं। आप -certfile पैरामीटर के साथ संदेश पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कुंजी का प्रमाण पत्र निर्दिष्ट करेंगे ... लेकिन आपके मामले में प्रमाणपत्र test.tmp फ़ाइल में होगा (जब आप संदेश पर हस्ताक्षर करते हैं तो -nocerts निर्दिष्ट करके आप इसे दबा सकते हैं)। जब की पुष्टि करने के संदेश आपको यह सत्यापित करने के लिए आदेश -noverify पैरामीटर आपूर्ति कर सकते हैं (openssl smime verify -noverify करता है, हालांकि थोड़ा अजीब लग रही है)

कुंजी प्रमाणपत्र की जांच को दबाने के लिए।

+0

+1 'openssl smime -verify -noverify' के लिए +1 जो मुझे चाहिए! – PassKit

+2

@PassKit हालांकि कमांड सबसे आत्म-विरोधाभासी दिखता है। –

संबंधित मुद्दे