क्या मुझे Apache SSL प्रमाणपत्र के लिए .CER से .CRT में कनवर्ट करने की आवश्यकता है? यदि हां, तो कैसे?


121

मुझे एक अपाचे 2 सर्वर को एसएसएल के साथ सेटअप करने की आवश्यकता है।

मेरे पास मेरी * .key फ़ाइल है, लेकिन सभी दस्तावेज़ जो मैंने ऑनलाइन पाए हैं, * .crt फाइलें निर्दिष्ट की हैं, और मेरे CA ने मुझे * .cer फ़ाइल प्रदान की है।

* .Cer फाइलें * .crt के समान हैं? यदि नहीं, तो मैं सीईआर को सीआरटी प्रारूप में कैसे बदल सकता हूं?


11
CERऔर CRTएक्सटेंशन का मतलब कुछ भी नहीं है। विभिन्न PKI विक्रेता एक ही चीज़ के लिए अलग-अलग एक्सटेंशन का उपयोग करते हैं। यदि फ़ाइल बाइनरी है, तो शायद इसकी ASN.1 / DER एन्कोडेड है। यदि फ़ाइल मानव के साथ पढ़ने योग्य है -----BEGIN CERTIFICATE-----, तो उसका PEM एन्कोडेड है। आपके पास (डीईआर या पीईएम) क्या है, और आपको क्या चाहिए (डीईआर या पीईएम)?
jww

जवाबों:


107

क्रिप्टोग्राफ़िक प्रमाणपत्र के लिए फ़ाइल एक्सटेंशन वास्तव में मानकीकृत नहीं हैं जैसा कि आप अपेक्षा करेंगे। Windows डिफ़ॉल्ट .crtरूप से प्रमाण पत्र को Windows रूट प्रमाणपत्र संग्रह में आयात करने के अनुरोध के रूप में एक फ़ाइल पर डबल-क्लिक करता है, लेकिन .cerकेवल प्रमाण पत्र देखने के लिए एक अनुरोध के रूप में एक फ़ाइल का व्यवहार करता है । इसलिए, वे इस अर्थ में भिन्न हैं कि जब आप प्रत्येक प्रकार की फ़ाइल पर डबल क्लिक करते हैं, तो विंडोज के कुछ निहित अर्थ होते हैं।

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

चीजों को और अधिक भ्रमित करना यह है कि एक फ़ाइल में प्रमाण पत्र डेटा को संग्रहीत करने के दो मानक तरीके हैं: एक "बाइनरी" X.509 एन्कोडिंग है, और दूसरा एक "टेक्स्ट" बेस 64 एन्कोडिंग है जो आमतौर पर " -----BEGIN CERTIFICATE-----" से शुरू होता है । ये एक ही डेटा को अलग-अलग तरीकों से एनकोड करते हैं। अधिकांश सिस्टम दोनों स्वरूपों को स्वीकार करते हैं, लेकिन, अगर आपको जरूरत है, तो आप ओपनस्ल या अन्य टूल के माध्यम से एक दूसरे को परिवर्तित कर सकते हैं। एक प्रमाणपत्र फ़ाइल के भीतर एन्कोडिंग वास्तव में स्वतंत्र है कि किस एक्सटेंशन ने किसी को फ़ाइल दी।


मेरी समझ यह है कि वे दोनों X.509 एनकोडिंग हैं। आप अन्यथा नहीं कहते हैं, लेकिन ऊपर x.509 का असममित उपयोग पाठक को अन्यथा सुझाव दे सकता है। पाठक के लिए, यह ध्यान देने योग्य है कि इन 2 एन्कोडिंग के बीच प्रमाण पत्र को आगे और पीछे परिवर्तित किया जा सकता है, क्योंकि जैसा कि इस उत्तर में उल्लेख है, वे एक ही जानकारी रखते हैं। Opensl x509 -inform कमांड के साथ अन्य उत्तर देखें।
FreeText

55

प्रलेखन के अनुसार mod_ssl :

SSLCertificateFile: 
   Name: SSLCertificateFile
   Description: Server PEM-encoded X.509 certificate file

प्रमाणपत्र फ़ाइल PEM- एन्कोडेड X.509 प्रमाणपत्र फ़ाइल होनी चाहिए:

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

इस ssl प्रमाणपत्र त्रुटियों का समाधान होगा, जब पीछे zscalerचल रहा है, vagrantपर win( vbox homestead), आवारा बॉक्स में हमारे विश्वसनीय रूट प्रमाणपत्र स्थापित करके? मैंने scpउन्हें डी किया, फिर आपके रूपांतरण का उपयोग किया और उनमें समरूपता दी और पुन: संशोधन करने से पहले फ़ाइल /etc/ssl/certsमें सामग्री की प्रतिलिपि बनाई ca-certificates.crt, और अभी भी देव बॉक्स google-recaptcha tls sslपर एक त्रुटि प्राप्त कर रहा था file_get_contents
बम

54

मूल रूप से दो सीईआर प्रमाणपत्र एन्कोडिंग प्रकार, डीईआर और बेस 64 हैं। जब DER एक त्रुटि लोडिंग प्रमाणपत्र (asn1 एन्कोडिंग रूटीन) लौटाता है, तो PEM आज़माएँ और यह काम करेगा।

openssl x509 -inform DER -in certificate.cer -out certificate.crt

openssl x509 -inform PEM -in certificate.cer -out certificate.crt


3
DER प्रारूप ने मेरे लिए तब काम किया जब मेरी सेर फ़ाइल बाइनरी की तरह दिखी जब मैंने इसे संपादित करने की कोशिश की ... धन्यवाद!
ब्रैड पार्क्स

1
पाठक के लिए, मुझे ओप्सनल मैन पेज उपयोगी लगा। यह मेरे लिए अस्पष्ट था कि कमांडों में से किसने क्या किया (अर्थात रूपांतरण किस तरीके से किया गया)। -Inform पैरामीटर इनपुट -इन फ़ाइल के प्रारूप को निर्दिष्ट करता है, जो सहज है, लेकिन यदि आप पहले से ही थोड़ा भ्रमित हैं, तो स्पष्ट रूप से जानना अच्छा है। देखें openssl.org/docs/manmaster/man1/openssl-x509.html
FreeText

32

मुझे लगता है कि आपके पास PKCS # 7-एन्कोडेड सर्टिफिकेट डेटा वाली एक .cer फाइल है और आप इसे PEM- एन्कोडेड सर्टिफिकेट डेटा (आमतौर पर .crt या .pem फ़ाइल) में बदलना चाहते हैं। उदाहरण के लिए, PKCS # 7-एन्कोडेड डेटा वाली एक .cer फ़ाइल इस तरह दिखाई देती है:

----- BEGIN PKCS7 -----
MIIW4gYJKoZIhvcNAQcCoIIW0zCCFs8CAQExADALBgkqhkiG9w0BBwGggha1MIIH
...
POI9n9cd2cNgQ4xYDiKWL2KjLB + 6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G
+ bKhADEA
----- END PKCS7 -----

PEM प्रमाणपत्र डेटा इस तरह दिखता है:

----- BEGIN प्रमाण पत्र -----
MIIHNjCCBh6gAwIBAgIQAlBxtqKazsxUSR9QdWWxaDANBgkqhkiG9w0BAQUFADBm
...
nv72c / OV4nlyrvBLPoaS5JFUJvFUG8RfAEY =
----- END प्रमाण पत्र -----

एक ओपनएसएसएल कमांड है जो .cer फ़ाइलों (PKCS # 7 डेटा के साथ) को PEM डेटा में बदल देगा जिससे आप मुठभेड़ ( BEGIN CERTIFICATEऊपर के उदाहरण में ब्लॉक) की उम्मीद कर सकते हैं । आप PKCS # 7 डेटा को PEM प्रारूप में इस कमांड द्वारा उस फ़ाइल पर ले जा सकते हैं जिसे हम सर्फ़ाइल-वियर कहेंगे:

openssl pkcs7 -text -in certfile.cer -print_certs -outform PEM -out certfile.pem

ध्यान दें कि .cer या .pem फ़ाइल में एक या अधिक प्रमाणपत्र (संभवतः संपूर्ण प्रमाणपत्र श्रृंखला) हो सकते हैं।


1
यदि आप इस धारणा के स्रोत थे, तो यह आसान होगा। मुझे लगता है कि लोग (संभवतः गलत तरीके से) .cer, .crt, .pem इंटरचेंबली) का उपयोग करते हैं ताकि सच्चाई का एक स्रोत गलत धारणाओं को ठीक कर सके।
फिल्प

30

CER बाइनरी रूप में X.509 प्रमाणपत्र है, DER एन्कोडेड है।
CRT एक बाइनरी X.509 सर्टिफिकेट है, जो टेक्स्ट ( बेस -64 ) एन्कोडिंग में एनकैप्सुलेटेड है।

यह समान एन्कोडिंग नहीं है।


13
यह उत्तर गलत है। .सीईआर और .सीआरटी दोनों डीईआर या पीईएम (टेक्स्ट) एन्कोडिंग का उपयोग कर सकते हैं। एक्सटेंशन .pem और .der एन्कोडिंग, .cer और .crt नहीं दर्शाते हैं। अधिक जानकारी
eis

1
वास्तव में, यह विपरीत होना चाहिए । लेकिन वे सभी एक्सटेंशन लंबे समय से उलझन में हैं, इसलिए आपको उन पर भरोसा नहीं करना चाहिए।
क्लाउडियो फ्लोरिनी

16

प्रश्न का उत्तर .cer फ़ाइल को .crt फ़ाइल में परिवर्तित करने का तरीका (वे अलग-अलग एन्कोडेड हैं!) है:

openssl pkcs7 -print_certs -in certificate.cer -out certificate.crt

5
यह मेरे लिए काम नहीं किया! मैंने इस्तेमाल किया:openssl x509 -inform der -in certificate.cer -out certificate.pem
sj59

मुझे यह त्रुटि संदेश मिल रहा है:unable to load PKCS7 object
friederbluemle

@friederbluemle क्या आपने इस उत्तर की जांच की? serverfault.com/questions/417140/…
अलेक्जेंडर प्रेसर

यह वही है जो मुझे अपने पॉजिटिवएसएसएल सर्टिफ़िकेट को तैयार करने के लिए करना था ताकि एज़्योर में उपयोग के लिए PKCS12 में परिवर्तित किया जा सके।
ओवेन

16

मैं कमांड का उपयोग करता हूं:

openssl x509 -inform PEM -in certificate.cer -out certificate.crt

लेकिन सीईआर द्विआधारी रूप में एक X.509 प्रमाण पत्र है, डीईआर एन्कोडेड है। CRT एक बाइनरी X.509 सर्टिफिकेट है, जो टेक्स्ट (बेस -64) एन्कोडिंग में एनकैप्सुलेटेड है।

उसके कारण, आपको शायद उपयोग करना चाहिए:

openssl x509 -inform DER -in certificate.cer -out certificate.crt

और फिर अपना प्रमाणपत्र आयात करने के लिए:

अपने CA को dir पर कॉपी करें:

/usr/local/share/ca-certificates/

कमांड का उपयोग करें:

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

CA स्टोर अपडेट करें:

sudo update-ca-certificates


5

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

openssl x509 -inform DER -in YOUR_CERTIFICATE.cer -out YOUR_CERTIFICATE.crt

3

.Cer और .crt फ़ाइल इंटरचेंजेबल होनी चाहिए जहाँ तक कि उन्हें एक कीस्टोर में आयात करना चाहिए।

.Cer फ़ाइल की सामग्री पर एक नज़र डालें। -----BEGIN CERTIFICATE-----लाइन से पहले और लाइन के बाद कुछ भी मिटा दें -----END CERTIFICATE-----। आपको बेसिन / END लाइनों के साथ बेस 64-एन्कोडेड सामानों के एक समूह के साथ छोड़ दिया जाएगा।

-----BEGIN CERTIFICATE-----
MIIDQTCCAqqgAwIBAgIJALQea21f1bVjMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
...
pfDACIDHTrwCk5OefMwArfEkSBo/
-----END CERTIFICATE-----

तो बस इसे keytool का उपयोग करके अपने keyfile में आयात करें।

keytool -import -alias myalias -keystore my.keystore -trustcacerts -file mycert.cer

जिस चीज ने मुझे मदद की, वह थी BASE-64 ENCODING की आपकी टिप्पणी। एक सामान्य प्रमाण स्पष्ट रूप से विशेष एन्कोडिंग है और पठनीय पाठ नहीं है। धन्यवाद।
डीआरएपी

-2

बस करो

openssl x509 -req -days 365 -in server.cer -signkey server.key -out server.crt

8
क्या आप इस बात की विस्तृत देखभाल करेंगे कि यह रेखा वास्तव में क्या करती है और आप वास्तव में उन मापदंडों का उपयोग क्यों करते हैं? यह उत्तर काफी छोटा है और कम अनुभव वाले लोगों के लिए समझना कठिन हो सकता है।
गेमरॉइड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.