.Pem फ़ाइल को .key और .crt फ़ाइलों से कैसे प्राप्त करें?


601

मैं एक SSL प्रमाणपत्र से PEM फ़ाइल कैसे बना सकता हूं?

ये वो फाइलें हैं जो मेरे पास उपलब्ध हैं:

  • .crt
  • server.csr
  • server.key

2
इसके विपरीत: Convert .pemकरने .crtऔर.key
kenorb

जवाबों:


799

आपकी कुंजी पहले से ही PEM प्रारूप में हो सकती है, लेकिन सिर्फ .crt या .key के साथ नाम दिया जा सकता है।

यदि फ़ाइल की सामग्री शुरू होती है -----BEGINऔर आप इसे पाठ संपादक में पढ़ सकते हैं:

फ़ाइल बेस 64 का उपयोग करती है, जो एएससीआईआई में पढ़ने योग्य है, न कि बाइनरी प्रारूप में। प्रमाणपत्र पहले से ही पीईएम प्रारूप में है। बस .pem एक्सटेंशन बदलें

यदि फ़ाइल बाइनरी में है:

Server.crt के लिए, आप उपयोग करेंगे

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem

Server.key के लिए, के openssl rsaस्थान पर उपयोग करें openssl x509

Server.key संभवत: आपकी निजी कुंजी है, और .crt फ़ाइल लौटी, हस्ताक्षरित, x509 प्रमाणपत्र है।

यदि यह एक वेब सर्वर के लिए है और आप एक अलग निजी और सार्वजनिक कुंजी लोड करने को निर्दिष्ट नहीं कर सकते हैं:

आपको दो फ़ाइलों को संक्षिप्त करने की आवश्यकता हो सकती है। इस उपयोग के लिए:

cat server.crt server.key > server.includesprivatekey.pem

मैं इस फ़ाइल के साथ आपके द्वारा रखी जाने वाली अनुमतियों को प्रबंधित करने में आपकी मदद करने के लिए "निक्षेपागार" के साथ नामकरण फ़ाइलों की सिफारिश करूंगा।


2
Server.key के प्रारूप की जाँच करें। मैंने केवल यह मान लिया था कि यह आरएसए है। लेकिन फ़ाइल की पहली पंक्ति को पढ़ना शायद आपको बताएगा।
मैक्सवेल

10
बस एक सिर है कि cat server.crt server.key > server.pemखुली टिप्पणी को अपनी लाइन पर नहीं रखेगा, जो एक आवश्यकता प्रतीत होती है। कूरियर मेल ने मुझे नरक दिया और मुझे यह पता लगाने में घंटों लग गए कि क्या गलत हो रहा था।
ग्राहम वॉल्ट्स

1
धन्यवाद ग्राहम विभिन्न उपकरण अलग-अलग फ़ाइलों को उत्पन्न करेंगे, और अंततः, कुछ सत्यापन अच्छा है। जब मैंने ये चरण किए, तो फ़ाइलें एक उदाहरण के लिए, एक नई पंक्ति के साथ समाप्त हो गईं।
मैक्सवेल

.Crt और .key फ़ाइलों को एक साथ जोड़ने के बारे में टिप बहुत मददगार थी। मैं stunnel3 के साथ अपने प्रमाणपत्र का उपयोग करना चाहता था, लेकिन इसके पास कुंजी फ़ाइल निर्दिष्ट करने का कोई तरीका नहीं था। संघ का उपयोग करके काम किया। (वास्तव में, चूंकि stunnel3 एक पर्ल प्रोग्राम है, इसलिए मैंने कुंजी फ़ाइल को पढ़ने के लिए स्वयं के लिए एक विकल्प जोड़ा है। हालाँकि, जब मैंने बाद में देखा कि सहमति का काम किया है, तो मैंने stunnel3 को उसके मूल कोड पर वापस ले लिया है।)
LS

2
बस यह कहने के लिए कि बिल्ली server.crt server.key > server.includesprivatekey.pemSSL के लिए उपयोगी है haproxy 1.5 के साथ।
जिम्मु 101

224

मुझे AWS ELB के लिए ऐसा करने की आवश्यकता थी। संवाद द्वारा कई बार पिटने के बाद, आखिरकार यह मेरे लिए काम कर रहा है:

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem

धन्यवाद NCZ

संपादित करें: जैसा कि @floatingrock कहते हैं

AWS के साथ, फ़ाइल नाम को पूर्व-निर्धारित करना न भूलें file://। तो ऐसा लगेगा:

 aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/

http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html


19
AWS के साथ, फ़ाइल नाम को पूर्व-निर्धारित करना न भूलें file://। तो यह ऐसा दिखेगा:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
फ्लोटिंगरॉक

1
दूसरी कमांड कुछ भी नहीं करती है अगर आपका इनपुट एक पेम फाइल है तो यह मान लें कि आपको केवल पहली कमांड की जरूरत है
क्रिस्टोफर

बहुत बढ़िया! यह मेरे लिए अच्छी तरह से काम किया है! बस मेरी .key और .crt फ़ाइलों को कोड की आपकी पंक्तियों का उपयोग करके रूपांतरित करें और फिर मैंने AWS कंसोल के माध्यम से अपलोड (कॉपी / पेस्ट) किया। धन्यवाद!
डिएगो डी

79

एक pemफ़ाइल में प्रमाणपत्र और निजी कुंजी है। यह उस प्रारूप पर निर्भर करता है जो आपके प्रमाणपत्र / कुंजी में है, लेकिन शायद यह उतना ही सरल है:

cat server.crt server.key > server.pem

मैं मिलता रहा-bash: server.key.pem: Permission denied
tq

2
@tq: इसका मतलब है कि आपको उस फ़ाइल को पढ़ने या लिखने की अनुमति नहीं है।
sth

धन्यवाद @sth अनुमति के लिए दिखेगा। लेकिन मैं sudo कमांड के साथ ऐसा कर रहा था
tq

8
@tq: cat server.crt server.key | sudo tee server.pem
dimir

2
हमारी नई पीएम फ़ाइल को गायब करने के लिए वॉचआउट ने आपकी लाइनों को ----- END सर्टिफिकेट ---------- BEGIN CERTIFICATE -----
वोल्फगैंग फेहल

24

इसके अतिरिक्त, यदि आप इसे पासफ़्रेज़ के लिए नहीं पूछना चाहते हैं, तो निम्न कमांड चलाने की आवश्यकता है:

openssl rsa -in server.key -out server.key

9
यदि आप चाहते हैं कि एक फ़ाइल शुरू हो -----BEGIN RSA PRIVATE KEY-----और उसके साथ एक शुरुआत हो -----BEGIN ENCRYPTED PRIVATE KEY-----, तो यह वह कमांड है जिसका आप उपयोग करना चाहते हैं।
फिलिप गेरबर

18

.pem फ़ाइल बनाने के लिए यह सबसे अच्छा विकल्प है

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts

4

मैंने जो देखा है वह यह है: यदि आप प्रमाण पत्र बनाने के लिए ओपनसेल का उपयोग करते हैं, तो यह सीआरटी फाइल में टेक्स्ट पार्ट और बेस 64 सर्टिफिकेट पार्ट दोनों को कैप्चर करता है। सख्त पेम प्रारूप कहता है ( विकी परिभाषा ) कि फ़ाइल BEGIN और END के साथ शुरू और समाप्त होनी चाहिए।

.pem - (गोपनीयता बढ़ी मेल) Base64 ने "----- BEGIN CERTIFICATE -----" और "----- END प्रमाण पत्र -----" के बीच संलग्न DER प्रमाणपत्र को एनकोड किया।

तो कुछ पुस्तकालयों के लिए (मैंने जावा में इसका सामना किया) जो कि सख्त पेम प्रारूप की अपेक्षा करते हैं, उत्पन्न क्रेट एक 'अमान्य पेम प्रारूप' के रूप में मान्यता को विफल कर देगा।

भले ही आप BEGIN / END CERTIFICATE वाली पंक्तियों को कॉपी या grep करते हों, और उसे किसी cert.pem फ़ाइल में चिपकाएँ, यह काम करना चाहिए।

यहाँ मैं क्या करता हूं, बहुत साफ नहीं है, लेकिन मेरे लिए काम करता है, मूल रूप से यह BEGIN लाइन से शुरू होने वाले पाठ को फ़िल्टर करता है:

grep -A 1000 BEGIN cert.crt> cert.pem


1
एक और विकल्प केवल गैर-सख्त प्रमाण पत्र के माध्यम से पारित करना है openssl x509। यह एक मान्य PEM प्रमाणपत्र का उत्पादन करेगा: cat certificate.crt | openssl x509 > certificate.pem
T0xicCode

यदि आप फ़ाइल के अंत में "BEGIN" से सब कुछ प्राप्त करना चाहते हैं, तो यह sed के लिए एक काम है। विशेष रूप से, आप sed -n '/--BEGIN/,$p' cert.crtइस मामले में कुछ चाहते हैं । "-N" डिफ़ॉल्ट रूप से कुछ भी मुद्रित नहीं करने के लिए sed, और फिर रेंज अभिव्यक्ति बताता है: कि व्याख्या करने के लिए /--BEGIN/,$बनाता है pआदेश (प्रिंट) पहली पंक्ति जिसमें बीच लाइनों के लिए लागू --BEGINऔर फ़ाइल के अंत ( $)।
dannysauer

4

मैं Godaddy से app इंजन में जाने की कोशिश कर रहा था। इस लाइन का उपयोग करने के लिए क्या चाल थी:

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr

बिल्कुल वैसा ही है, लेकिन मेरे डोमेन नाम के साथ नाम बदल रहा है (ऐसा नहीं है कि यह वास्तव में भी मायने रखता है)

और मैंने www.name.com के रूप में सामान्य नाम / संगठन से संबंधित सभी सवालों के जवाब दिए

फिर मैंने सीएसआर खोला, इसे कॉपी किया, इसे गो डैडी में पेस्ट किया, फिर इसे डाउनलोड किया, इसे अनज़िप किया, टर्मिनल के साथ अनज़िप्ड फ़ोल्डर में नेविगेट किया और प्रवेश किया:

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt

तब मैंने Google Apps कस्टम डोमेन एसएसएल के साथ परेशानी से इन निर्देशों का उपयोग किया , जो थे:

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem

बिल्कुल वैसा ही है, जैसे कि PrivateKey.key के अलावा मैंने name.unencrypted.priv.key का उपयोग किया है, और www_mydomain_com.crt के बजाय, मैंने name.crt का उपयोग किया है

तब मैंने "PEM एन्कोडेड X.509 प्रमाणपत्र" के लिए public.pem को व्यवस्थापक कंसोल पर अपलोड किया, और "Unencrypted PEM एन्कोडेड RSA निजी कुंजी" के लिए Private.pem अपलोड किया।

.. और अंत में काम किया।


4

GoDaddy सर्टिफिकेट को AWS में अपलोड करने की कोशिश मैं कई बार विफल रही, लेकिन अंत में यह बहुत आसान था। .Pem में कुछ भी बदलने की आवश्यकता नहीं है। आपको बस चेन पैरामीटर में GoDaddy बंडल सर्टिफिकेट को शामिल करना सुनिश्चित करना है, जैसे

aws iam upload-server-certificate
    --server-certificate-name mycert
    --certificate-body file://try2/40271b1b25236fd1.crt
    --private-key file://server.key
    --path /cloudfront/production/
    --certificate-chain file://try2/gdig2_bundle.crt

और अपने पिछले असफल अपलोड को हटाने के लिए आप कर सकते हैं

aws iam delete-server-certificate --server-certificate-name mypreviouscert

यह मेरे लिए काम नहीं कियाAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
एडम राउडोनीस

4
  1. AppleId द्वारा अनंतिम पोर्टल से प्रमाणपत्र डाउनलोड करें,
  2. कुंजी श्रृंखला से निर्यात प्रमाणपत्र और नाम दें (प्रमाण पत्र। पीपी 12),
  3. टर्मिनल और गोटो फोल्डर खोलें, जहाँ आप सर्टिफिकेट .p12 फ़ाइल के ऊपर सेव करते हैं,
  4. आदेशों के नीचे चलाएँ:

    क) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes,

    ख) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. आपकी .pem फ़ाइल तैयार है "pushcert.pem"।

0
  • टर्मिनल खोलें।
  • उस फ़ोल्डर पर जाएं जहां आपका प्रमाणपत्र स्थित है।
  • अपने प्रमाण पत्र के साथ नाम बदलकर कमांड के नीचे निष्पादित करें।

Opensl pkcs12 -in your_CERTIFICATE.p12 -out your_CERTIFICATE.pem -nodes -clcerts

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