.Pem .crt और .key में कनवर्ट करें


371

क्या कोई मुझे प्रमाण पत्र .crtऔर निजी कुंजी .keyफ़ाइलों को .pemफ़ाइल से निकालने / परिवर्तित करने का सही तरीका / आदेश बता सकता है ? मैंने अभी पढ़ा है कि वे विनिमेय हैं, लेकिन कैसे नहीं।



जवाबों:


500

मैं इसे उपयोग करने के लिए पीटी को crt में बदलने में सक्षम था:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt

13
पाठ संपादक का उपयोग करना सबसे अच्छा तरीका नहीं है। PKCS8 फॉर्म में चाबी निकालने के लिए: openssl pkey -in mumble.pem -out mumble-key.pem यदि ओपनएसएसएल संस्करण 1.0.0 से अधिक पुराना है, तो कुंजी को RSA कुंजी के रूप में निकालने के लिए:openssl rsa -in mumble.pem -out mumble-key.pem
Andron

131
मैंने आपकी आज्ञा की कोशिश की, लेकिन मेरे पास:unable to load certificate 140584440387400:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
डेमियन कैरल

15
प्रमुख कमांड (ओपनस् पेक -in mumble.pem -out mumble-key.pem) यह देता है: कुंजी को लोड करने में असमर्थ 129051320116880: त्रुटि: 0906D06C: PEM दिनचर्या: PEM_read_bio: कोई प्रारंभ पंक्ति: pem_lib.c: 703: कुछ भी: निजी कुंजी
mylord

2
Opensl rsa -in में आपका cert.pem -outform pem -out your-key.pem
ट्रॉयफ्लोरर

3
@ और दोनों pkey और rsa मुझे Expecting: ANY PRIVATE KEYत्रुटि देते हैं।
एयरो वैंग

393

OpenSSL का उपयोग करके परिवर्तित करना

ये आदेश आपको विशिष्ट प्रकार के सर्वर या सॉफ़्टवेयर के साथ संगत बनाने के लिए प्रमाणपत्र और कुंजियों को विभिन्न प्रारूपों में बदलने की अनुमति देते हैं।

  • एक DER फ़ाइल (.crt .cer .der) को PEM में बदलें

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    
  • PEM फ़ाइल को DER में कनवर्ट करें

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • एक PKCS # 12 फ़ाइल (.pfx .p12) को निजी कुंजी और प्रमाणपत्र PEM में बदलें

    openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
    
    You can add -nocerts to only output the private key or add -nokeys to only output the certificates.
    
  • PEM प्रमाणपत्र फ़ाइल और PKCS # 12 (.pfx .p12) के लिए एक निजी कुंजी परिवर्तित करें।

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    
  • PEM को CRT में परिवर्तित करें (.CRT फ़ाइल)

    openssl x509 -outform der -in certificate.pem -out certificate.crt
    

ओपनएसएसएल पीईएम कन्वर्ट

  • PEM को DER में बदलें

    openssl x509 -outform der -in certificate.pem -out certificate.der
    
  • PEM को P7B में बदलें

    openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
    
  • PEM को PFX में कनवर्ट करें

    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
    

ओपनएसएसएल कन्वर्ट डीईआर

  • DER को PEM में बदलें

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    

OpenSSL कन्वर्ट P7B

  • P7B को PEM में बदलें

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
  • P7B को PFX में कनवर्ट करें

    openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
    
    openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
    

ओपनएसएसएल कन्वर्ट पीएफएक्स

  • PFX को PEM में कनवर्ट करें

    openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
    

OpenSSL द्वारा rsa कीज जनरेट करें

  • कमांड लाइन पर ओपनएसएसएल का उपयोग करते हुए आपको सबसे पहले एक सार्वजनिक और निजी कुंजी उत्पन्न करनी होगी, आपको इस फाइल को -पासआउट तर्क का उपयोग करके पासवर्ड की सुरक्षा करनी चाहिए, कई अलग-अलग रूप हैं जो इस तर्क के बारे में ओपनएसएसएल दस्तावेज से परामर्श कर सकते हैं।

    openssl genrsa -out private.pem 1024
    
  • यह Private.pem नामक एक मुख्य फ़ाइल बनाता है जो 1024 बिट्स का उपयोग करता है। इस फ़ाइल में वास्तव में निजी और सार्वजनिक दोनों कुंजियाँ हैं, इसलिए आपको इस फ़ाइल से जनता को निकालना चाहिए:

    openssl rsa -in private.pem -out public.pem -outform PEM -pubout
    
    or
    
    openssl rsa -in private.pem -pubout > public.pem
    
    or
    
    openssl rsa -in private.pem -pubout -out public.pem
    

    अब आपके पास public.pem होगा जिसमें केवल आपकी सार्वजनिक कुंजी है, आप इसे 3 पार्टियों के साथ स्वतंत्र रूप से साझा कर सकते हैं। आप इसे केवल अपनी सार्वजनिक कुंजी का उपयोग करके स्वयं को एन्क्रिप्ट करके और फिर अपनी निजी कुंजी का उपयोग करके डिक्रिप्ट कर सकते हैं, पहले हमें एन्क्रिप्ट करने के लिए थोड़ा डेटा चाहिए:

  • उदाहरण फ़ाइल:

    echo 'too many secrets' > file.txt
    
  • अब आपके पास file.txt में कुछ डेटा है, इसे OpenSSL और सार्वजनिक कुंजी का उपयोग करके एन्क्रिप्ट करने देता है:

    openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
    
  • यह फ़ाइल का एक एन्क्रिप्टेड संस्करण बनाता है। इसे कॉल करना file.ssl, यदि आप इस फाइल को देखते हैं तो यह केवल बाइनरी जंक है, किसी के लिए बहुत उपयोगी कुछ भी नहीं है। अब आप निजी कुंजी का उपयोग करके इसे अनएन्क्रिप्ट कर सकते हैं:

    openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
    
  • अब आपके पास decrypted.txt में एक अनएन्क्रिप्टेड फाइल होगी:

    cat decrypted.txt
    |output -> too many secrets
    

ओपनएसएसएल में आरएसए उपकरण विकल्प

  • नाम

    आरएसए - आरएसए कुंजी प्रसंस्करण उपकरण

  • SYNOPSIS

    खुलता है rsa [-help] [-इनफॉर्म पीईएम | नेट | डीईआर] [-आउटफॉर्म पीईएम | नेट | डीईआर] [-in फ़ाइल का नाम] [-passin arg] [-out फ़ाइल नाम] [-पास arg] [-aes128] [- aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-txt] [-moutulus] [-मॉडुलस] [-check] [-pubin] [-पाउट] [-RSAPublicKey_in] [-RSAPublicKey_out] [-भारत आईडी]

  • विवरण

    Rsa कमांड RSA कुंजियों को संसाधित करता है। उन्हें विभिन्न रूपों और उनके घटकों के बीच मुद्रित किया जा सकता है। ध्यान दें कि यह कमांड निजी कुंजी एन्क्रिप्शन के लिए पारंपरिक SSLeay संगत प्रारूप का उपयोग करता है: नए अनुप्रयोगों को pkcs8 उपयोगिता का उपयोग करके अधिक सुरक्षित PKCS # 8 प्रारूप का उपयोग करना चाहिए।

  • कमांड विकल्प

    -help
    

    एक उपयोग संदेश प्रिंट करें।

    -inform DER|NET|PEM
    

    यह इनपुट प्रारूप को निर्दिष्ट करता है। DER विकल्प PKCS # 1 RSAPStreetKey या SubjectPublicKeyInfo प्रारूप के साथ संगत ASN1 DER एन्कोडेड फ़ॉर्म का उपयोग करता है। PEM फ़ॉर्म डिफ़ॉल्ट स्वरूप है: इसमें DER प्रारूप का आधार 64 है जो अतिरिक्त शीर्ष लेख और पाद लेख लाइनों के साथ एन्कोडेड है। इनपुट पर PKCS # 8 प्रारूप निजी कुंजी भी स्वीकार किए जाते हैं। NET फॉर्म एक प्रारूप है जिसे NOTES अनुभाग में वर्णित किया गया है।

    -outform DER|NET|PEM
    

    यह आउटपुट प्रारूप को निर्दिष्ट करता है, विकल्पों का अर्थ -inform विकल्प के समान होता है।

    -in filename
    

    यदि यह विकल्प निर्दिष्ट नहीं है, तो यह इनपुट फ़ाइल नाम को मानक या मानक इनपुट से पढ़ने के लिए निर्दिष्ट करता है। यदि कुंजी एन्क्रिप्ट किया गया है तो एक पास वाक्यांश के लिए संकेत दिया जाएगा।

    -passin arg
    

    इनपुट फ़ाइल पासवर्ड स्रोत। आर्ग के प्रारूप के बारे में अधिक जानकारी के लिए ओपनस् में PASS PHRASE ARGUMENTS सेक्शन को देखें।

    -out filename
    

    यदि यह विकल्प निर्दिष्ट नहीं है, तो यह कुंजी या मानक आउटपुट लिखने के लिए आउटपुट फ़ाइल नाम निर्दिष्ट करता है। यदि कोई एन्क्रिप्शन विकल्प सेट है तो एक पास वाक्यांश के लिए संकेत दिया जाएगा। आउटपुट फ़ाइल नाम इनपुट फ़ाइल नाम के समान नहीं होना चाहिए।

    -passout password
    

    आउटपुट फ़ाइल पासवर्ड स्रोत। आर्ग के प्रारूप के बारे में अधिक जानकारी के लिए ओपनस् में PASS PHRASE ARGUMENTS सेक्शन को देखें।

    -aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea
    

    ये विकल्प आउटपुट करने से पहले निर्दिष्ट सिफर के साथ निजी कुंजी को एन्क्रिप्ट करते हैं। एक पास वाक्यांश के लिए संकेत दिया जाता है। यदि इन विकल्पों में से कोई भी निर्दिष्ट नहीं है, तो कुंजी सादे पाठ में लिखी गई है। इसका मतलब यह है कि बिना एन्क्रिप्शन विकल्प के साथ एन्क्रिप्टेड कुंजी में पढ़ने के लिए rsa यूटिलिटी का उपयोग करके कुंजी को पास वाक्यांश को हटाने के लिए उपयोग किया जा सकता है, या एन्क्रिप्शन विकल्पों को सेट करके इसका उपयोग पास वाक्यांश को जोड़ने या बदलने के लिए किया जा सकता है। इन विकल्पों का उपयोग केवल PEM प्रारूप आउटपुट फ़ाइलों के साथ किया जा सकता है।

    -text
    

    एन्कोडेड संस्करण के अलावा सादे पाठ में विभिन्न सार्वजनिक या निजी प्रमुख घटकों को प्रिंट करता है।

    -noout
    

    यह विकल्प कुंजी के एन्कोडेड संस्करण के आउटपुट को रोकता है।

    -modulus
    

    यह विकल्प कुंजी के मापांक के मूल्य को प्रिंट करता है।

    -check
    

    यह विकल्प RSA निजी कुंजी की संगति की जाँच करता है।

    -pubin
    

    डिफ़ॉल्ट रूप से एक निजी कुंजी इनपुट फ़ाइल से पढ़ी जाती है: इस विकल्प के साथ इसके बजाय एक सार्वजनिक कुंजी पढ़ी जाती है।

    -pubout
    

    डिफ़ॉल्ट रूप से एक निजी कुंजी आउटपुट है: इस विकल्प के साथ एक सार्वजनिक कुंजी इसके बजाय आउटपुट होगी। यदि इनपुट सार्वजनिक कुंजी है तो यह विकल्प स्वतः सेट हो जाता है।

    -RSAPublicKey_in, -RSAPublicKey_out
    

    इसके बजाय RSPublicKey प्रारूप को छोड़कर -pubin और -pubout का उपयोग किया जाता है।

    -engine id
    

    एक इंजन को निर्दिष्ट करना (इसकी विशिष्ट आईडी स्ट्रिंग द्वारा) निर्दिष्ट इंजन के लिए एक कार्यात्मक संदर्भ प्राप्त करने का प्रयास करने के लिए rsa का कारण होगा, इस प्रकार यदि आवश्यक हो तो प्रारंभ करना। इंजन को सभी उपलब्ध एल्गोरिदम के लिए डिफ़ॉल्ट के रूप में सेट किया जाएगा।

  • टिप्पणियाँ

    PEM निजी कुंजी प्रारूप शीर्ष लेख और पाद लेख लाइनों का उपयोग करता है:

    -----BEGIN RSA PRIVATE KEY-----
    
    -----END RSA PRIVATE KEY-----
    

    PEM सार्वजनिक कुंजी प्रारूप शीर्ष लेख और पाद लेख लाइनों का उपयोग करता है:

    -----BEGIN PUBLIC KEY-----
    
    -----END PUBLIC KEY-----
    

    PEM RSAPublicKey प्रारूप हैडर और पाद लेख लाइनों का उपयोग करता है:

    -----BEGIN RSA PUBLIC KEY-----
    
    -----END RSA PUBLIC KEY-----
    

    नेट फ़ॉर्म पुराने नेटस्केप सर्वर और Microsoft IIS .key फ़ाइलों के साथ संगत प्रारूप है, यह इसके एन्क्रिप्शन के लिए अनसाल्टेड RC4 का उपयोग करता है। यह बहुत सुरक्षित नहीं है और इसलिए केवल आवश्यक होने पर ही इसका उपयोग किया जाना चाहिए।

    IIS के कुछ नए संस्करण में निर्यात .key फ़ाइलों में अतिरिक्त डेटा है। उपयोगिता के साथ इनका उपयोग करने के लिए, द्विआधारी संपादक के साथ फाइल देखें और स्ट्रिंग "निजी-कुंजी" देखें, फिर बाइट अनुक्रम 0x30, 0x82 पर वापस जाएं (यह एक ASN1 दृश्य है)। इस बिंदु से सभी डेटा को दूसरी फ़ाइल में कॉपी करें और इन-रिन यूटिलिटी के साथ rsa यूटिलिटी के इनपुट के रूप में उपयोग करें।

    उदाहरण

    RSA निजी कुंजी पर पास वाक्यांश निकालने के लिए:

     openssl rsa -in key.pem -out keyout.pem
    

    ट्रिपल DES का उपयोग कर एक निजी कुंजी एन्क्रिप्ट करने के लिए:

     openssl rsa -in key.pem -des3 -out keyout.pem
    

    PEM से DER प्रारूप में एक निजी कुंजी परिवर्तित करने के लिए:

      openssl rsa -in key.pem -outform DER -out keyout.der
    

    मानक आउटपुट के लिए एक निजी कुंजी के घटकों को प्रिंट करने के लिए:

      openssl rsa -in key.pem -text -noout
    

    केवल एक निजी कुंजी के सार्वजनिक भाग का उत्पादन करने के लिए:

      openssl rsa -in key.pem -pubout -out pubkey.pem
    

    RSAPublicKey प्रारूप में एक निजी कुंजी के सार्वजनिक भाग का आउटपुट:

      openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
    

32
फिर भी यह इस सवाल का जवाब नहीं देता है कि द्विआधारी प्रमाणपत्र (निर्यात) से निजी कुंजी कैसे प्राप्त की जाए
bassassssiiee

धन्यवाद, अगर मैं एक निजी कुंजी और प्रमाण पत्र युक्त PEM है सोच रहा हूँ, मैं केवल प्रमाण पत्र कैसे प्राप्त कर सकते हैं? मुझे पता है कि मैं टेक्स्ट एडिटर का उपयोग करके प्रमाण पत्र के हिस्से को कॉपी कर सकता हूं, लेकिन मैं यह जानना चाहता हूं कि क्या कोई
ओपनसेल

46

एक pem फ़ाइल से कुंजी और प्रमाणपत्र निकालने के लिए:

कुंजी निकालें

openssl pkey -in foo.pem -out foo.key

चाबी निकालने का एक और तरीका ...

openssl rsa -in foo.pem -out foo.key

सीए चेन सहित सभी समारोहों को निकालें

openssl crl2pkcs7 -nocrl -certfile foo.pem | openssl pkcs7 -print_certs -out foo.cert

DER के रूप में पाठकीय रूप से पहला प्रमाणपत्र निकालें

openssl x509 -in foo.pem -outform DER -out first-cert.der

7
Opensl x509 -outform der -in C: \ Users \ Greg \ .ssh \ e360_stork_listener.pem -out C: \ Users \ Greg \ .ssh \ e360_stork_listener.cn प्रमाणपत्र लोड करने में असमर्थ 4294956672: त्रुटि: 0906D06C: PEMread_IN। कोई प्रारंभ पंक्ति: pem_lib.c: 708: उम्मीद:
प्रमाणित

5

0. पूर्वापेक्षा : openssl स्थापित होना चाहिए। विंडोज पर, यदि Git Bashस्थापित है, तो कोशिश करें कि! वैकल्पिक बायनेरिज़ यहाँ मिल सकते हैं।

1. निकालें .keyसे .pem:

openssl pkey -in cert.pem -out cert.key

2. निकालें .crtसे .pem:

openssl crl2pkcs7 -nocrl -certfile cert.pem | openssl pkcs7 -print_certs -out cert.crt

1

A .crt प्रमाणपत्र को pem प्रारूप में संग्रहीत करता है। तो एक -pem, जबकि इसमें अन्य चीजें भी हो सकती हैं जैसे कि csr (प्रमाणपत्र पर हस्ताक्षर का अनुरोध), एक निजी कुंजी, एक सार्वजनिक कुंजी, या अन्य सेर्ट्स, जब यह सिर्फ एक प्रमाण पत्र संग्रहीत कर रहा है, तो यह एक .crt के समान है।

पेम एक बेस 64 एन्कोडेड फ़ाइल है जिसमें हेडर और प्रत्येक सेक्शन के बीच एक फूटर है।

किसी विशेष खंड को निकालने के लिए, एक पर्ल स्क्रिप्ट जैसे कि निम्नलिखित पूरी तरह से मान्य है, लेकिन कुछ ओपन कमांड का उपयोग करने के लिए स्वतंत्र महसूस करें।

 perl -ne "\$n++ if /BEGIN/; print if \$n == 1 && /BEGIN/.../END/;" mydomain.pem

जहाँ == 1 को कभी भी आपको किस सेक्शन में बदला जा सकता है। जाहिर है अगर आपको ठीक-ठीक हेडर और फूटर की आवश्यकता है, तो आपको पता है कि फाइल में केवल एक ही है (आमतौर पर अगर आप सिर्फ सर्टिफिकेट और उसमें चाबी रखते हैं), तो आप इसे सरल बना सकते हैं:

 perl -ne "print if /^-----BEGIN CERTIFICATE-----\$/.../END/;" mydomain.pem

0

यदि आपने यह प्रश्न पूछा है क्योंकि आप उपयोग कर रहे हैं mkcertतो चाल यह है कि .pemफ़ाइल प्रमाणपत्र है और -key.pemफ़ाइल कुंजी है।

(आपको बदलने की जरूरत नहीं है, बस चलाएं mkcert yourdomain.dev otherdomain.dev)

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