OpenSSL का उपयोग करके PEM में PKCS # 12 प्रमाणपत्र परिवर्तित करना


212

मेरे पास विंडोज 7 पर ओपनएसएसएल एक्स 64 है जिसे मैंने गूगल कोड पर ओपनएसएल-फॉर-विंडोज से डाउनलोड किया है । मैं चलाने का प्रयास कर रहा हूँ:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" 

लेकिन मुझे एक त्रुटि मिलती है।

unable to load private key

पीकेसीएस # 12 स्टोर में पीएसएससी से ओपनएसएसएल का उपयोग करके मैं प्रमाण पत्र कैसे निकालूं?


@jww मुझे लगता है कि यह प्रश्न 3 वर्ष से अधिक पुराना है कि ऑफ-टॉपिक ध्वज को इंगित करने के लिए थोड़ा देर हो चुकी है।
डीन मैकग्रेगर

बस एक औपचारिकता है ताकि लोग इसके ऑफ-टॉपिक को जान सकें। लोग एक ही ऑफ-टॉपिक प्रश्न पूछ रहे हैं, और इस प्रश्न का हवाला दे रहे हैं। अगर लोगों को इसका ऑफ-टॉपिक नहीं बताया जाता है, तो वे स्टैक ओवरफ्लो पर पूछना जारी रखेंगे।
23:27 पर jww

2
@jww पर आपके द्वारा लिंक किए गए मेटा प्रश्न पर सबसे अधिक मतदान किया गया जवाब "स्टैक ओवरफ्लो पर DevOps प्रश्नों की अनुमति दी जानी चाहिए।" मैं उत्थान करूंगा, क्योंकि उत्तर मेरी जरूरतों को पूरा करता था (हालांकि, मेरे लिए, मैं प्रोग्रामिंग नहीं कर रहा था, मैं आसानी से एक कार्यक्रम में उत्तर को शामिल कर सकता था अगर मैं चाहता हूं)
dcorking

जवाबों:


535

प्रयत्न:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys
openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes

उसके बाद आपके पास है:

  • newfile.crt.pem में प्रमाणपत्र
  • newfile.key.pem में निजी कुंजी

प्रमाणपत्र और कुंजी को एक ही फ़ाइल में रखने के लिए निम्नलिखित का उपयोग करें

openssl pkcs12 -in path.p12 -out newfile.pem

यदि आपको सीधे कमांड लाइन (जैसे एक स्क्रिप्ट) से PKCS # 12 पासवर्ड इनपुट करने की आवश्यकता है, तो बस जोड़ें -passin pass:${PASSWORD}:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin 'pass:P@s5w0rD'

2
क्या यह संभव है कि निजी कुंजी और प्रमाणपत्र उसी * .pem फ़ाइल में संग्रहीत किए जाएंगे?
रमीस

18
openssl pkcs12 -in path.p12 -out newfile.pem
जी

2
आयात पासवर्ड के लिए पूछ रहा है। वो क्या है ?
सौरभ चंद्र पटेल

4
@ सौरभचंद्रपेल आपको अपने प्रमाणपत्र के लिए पासवर्ड जानना होगा। यह एक भूल गए पासवर्ड को पुनर्प्राप्त करने का साधन नहीं है
डीन मैकग्रेगर

2
omitting -nodes, निजी कुंजी निकाली नहीं जाती है।
मीकनर

22

आपको बस एक पासवर्ड की आपूर्ति करने की आवश्यकता है। आप इसे निम्न सिंटैक्स के साथ एक ही कमांड लाइन में कर सकते हैं:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password]

फिर आपको अपनी आउटपुट फ़ाइल में निजी कुंजी को एन्क्रिप्ट करने के लिए पासवर्ड के लिए कहा जाएगा। यदि आप निजी कुंजी अनएन्क्रिप्टेड (प्लेनटेक्स्ट) को निर्यात करना चाहते हैं तो ऊपर की लाइन में "नोड्स" विकल्प शामिल करें:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password] -nodes

अधिक जानकारी: http://www.openssl.org/docs/apps/pkcs12.html


16

यदि आप पायथन का उपयोग कर सकते हैं, तो यदि आपके पास pyopensslमॉड्यूल है तो यह और भी आसान है । यह रहा:

from OpenSSL import crypto

# May require "" for empty password depending on version

with open("push.p12", "rb") as file:
    p12 = crypto.load_pkcs12(file.read(), "my_passphrase")

# PEM formatted private key
print crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())

# PEM formatted certificate
print crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate())

क्या फ़ाइल का उपयोग करके खोलने का कोई कारण है fileऔर नहीं open? मैं इसे समझना चाहता हूं क्योंकि मैं इसे भविष्य में उपयोग करने जा रहा हूं (कमांड के रूप में अपने समाधान कॉलिंग को सरल बनाने के लिए)
जनवरी Vlcinsky

नहीं, कोई फर्क नहीं है। आप बस कर सकते हैं open("push.p12", 'rb').read()
केविश

2
यदि अजगर 3 का उपयोग कर रहे हैं, तो आप शायद फ़ाइलों के लिए सामग्री लिखना चाहते हैं: with open("push.pem", "wb") as fobj: fobj.write(crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate()))प्रमाणपत्र लिखने के with open("push.key", "wb") as fobj: fobj.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey()))लिए और कुंजी के लिए।
एडम पार्किं

मैं python 3.7 का उपयोग कर रहा हूं, जब उपरोक्त उदाहरण चल रहा है, तो मुझे निम्न प्राप्त होता है: "TypeError: initializer for ctype 'char' को लंबाई 1 का बाइट्स होना चाहिए, str नहीं" मेरे पासवर्ड के साथ कुछ गड़बड़ है
getagran

फ़ाइल बनाना, कोड दर्ज करना, उसे सहेजना और उसे चलाना - केवल एक कमांड निष्पादित करने के बजाय "अधिक आसान" क्यों है?
तोरन गुंडोफ्टे-ब्रून

3

मेरे पास एक PFX फाइल थी और NGINX के लिए KEY फाइल बनाने की जरूरत थी, इसलिए मैंने यह किया:

openssl pkcs12 -in file.pfx -out file.key -nocerts -nodes

तब मुझे कुंजी फ़ाइल को संपादित करना था और सभी सामग्री को हटाना था -----BEGIN PRIVATE KEY-----। उसके बाद NGINX ने KEY फाइल को स्वीकार किया।


0

यदि आपको बिना किसी पासवर्ड के PEM फ़ाइल की आवश्यकता है तो आप इस समाधान का उपयोग कर सकते हैं।

बस निजी कुंजी और प्रमाणपत्र को उसी फ़ाइल में कॉपी और पेस्ट करें और .pem के रूप में सहेजें।

फ़ाइल की तरह दिखेगा:

-----BEGIN PRIVATE KEY-----
............................
............................
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...........................
...........................
-----END CERTIFICATE-----

यह एकमात्र तरीका है जो मैंने HTTPS के लिए सिस्को उपकरणों को प्रमाणपत्र अपलोड करने के लिए पाया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.