लिनक्स में एक प्रमाण पत्र श्रृंखला से रूट सीए और अधीनस्थ सीए कैसे निकालें?


25

मेरे पास एक अंत-इकाई / सर्वर प्रमाणपत्र है जिसमें एक मध्यवर्ती और रूट प्रमाणपत्र है। जब मैं catअंतिम इकाई प्रमाणपत्र पर होता हूं, तो मैं केवल एक एकल BEGINऔर ENDटैग देखता हूं । यह केवल अंत-इकाई प्रमाणपत्र है।

क्या कोई तरीका है जिससे मैं मध्यवर्ती और मूल प्रमाणपत्र सामग्री देख सकता हूं। मैं का केवल सामग्री की आवश्यकता BEGINऔर ENDटैग।

विंडोज में मैं "प्रमाणन पथ" से पूर्ण प्रमाणपत्र श्रृंखला देख सकता हूं। नीचे स्टैक एक्सचेंज के प्रमाण पत्र के लिए उदाहरण है।

यहाँ छवि विवरण दर्ज करें

वहां से मैं एक दृश्य प्रमाणपत्र प्रदर्शन कर सकता हूं और उन्हें निर्यात कर सकता हूं। मैं विंडोज में रूट और इंटरमीडिएट दोनों के लिए कर सकता हूं। मैं लिनक्स में इसी विधि की तलाश कर रहा हूं।

यहाँ छवि विवरण दर्ज करें


कृपया हमें बताएं कि आपको किसने सर्टिफिकेट जारी किया है।
रुई एफ रिबेरो

@RuiFRibeiro किसी को भी कहने दो ... मैं केवल प्राथमिक प्रमाण पत्र के साथ स्टैकएक्सचेंज के लिए प्रमाणित श्रृंखला को हाथ में देखना चाहता हूं।
अनिर्बान नाग 'टिनटिनम'

जवाबों:


25

एक वेब साइट से, आप यह कर सकते हैं:

openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null

वह सर्टिफिकेट चेन और सर्वर द्वारा प्रस्तुत सभी सर्टिफिकेट दिखाएगा।

अब, अगर मैं उन दो प्रमाणपत्रों को फ़ाइलों में सहेजता हूं, तो मैं उपयोग कर सकता हूं openssl verify:

$ openssl verify -show_chain -untrusted dc-sha2.crt se.crt 
se.crt: OK
Chain:
depth=0: C = US, ST = NY, L = New York, O = "Stack Exchange, Inc.", CN = *.stackexchange.com (untrusted)
depth=1: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA (untrusted)
depth=2: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA

-untrustedविकल्प मध्यवर्ती प्रमाणपत्र (रों) देने के लिए प्रयोग किया जाता है; se.crtसत्यापित करने के लिए प्रमाण पत्र है। गहराई = 2 परिणाम सिस्टम विश्वसनीय सीए स्टोर से आया था।

यदि आपके पास मध्यवर्ती प्रमाणपत्र नहीं है, तो आप सत्यापन नहीं कर सकते। बस यही X.509 काम करता है।

प्रमाण पत्र के आधार पर, इसमें इंटरमीडिएट प्राप्त करने के लिए एक यूआरआई हो सकता है। एक उदाहरण के रूप openssl x509 -in se.crt -noout -textमें , शामिल हैं:

        Authority Information Access: 
            OCSP - URI:http://ocsp.digicert.com
            CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt

यह "CA जारीकर्ता" यूआरआई मध्यवर्ती प्रमाण पत्र (डीईआर प्रारूप में, इसलिए आपको openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pemइसे ओपनएसएसएल द्वारा आगे उपयोग के लिए परिवर्तित करने के लिए उपयोग करने की आवश्यकता है) को इंगित करता है ।

यदि आप चलाते हैं openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hashतो आपको मिलता है 244b5494, जिसे आप सिस्टम रूट CA स्टोर पर देख सकते हैं /etc/ssl/certs/244b5494.0(केवल .0नाम के लिए संलग्न करें)।

मुझे नहीं लगता कि आपके लिए यह सब करने के लिए एक अच्छा, आसान ओपनएसएसएल कमांड है।


यही मुख्य समस्या है। मेरे पास URL नहीं है। मेरे पास केवल सर्टिफिकेट फाइल है। और मुझे टैग BEGINऔर ENDटैग के बीच एन्क्रिप्टेड सामग्री की आवश्यकता है (जो आपको सिर्फ cat.crt फ़ाइल के बाद मिलेगी ।
अनिर्बान नाग 'tintinmj'

@ AnirbanNag'tintinmj 'तुम सिर्फ प्रमाण पत्र को डिकोड करने के लिए देख रहे हैं, की कोशिशopenssl x509 -in file.crt -noout -text
derobert

मैं रूट सर्टिफिकेट पर इंटरमीडिएट की सामग्री चाहता हूं जो कि BEGINऔर ENDटैग के बीच है ।
अनिर्बान नाग 'टिनटिनम'

या अगर आप एक कमांड दे सकते हैं जो मध्यवर्ती प्रमाणपत्र और रूट सर्टिफिकेट को प्राथमिक सर्टिफिकेट से निकालेगा और उस फाइल में सेव करेगा ... तो मैं भी इसे जी सकता हूं।
अनिरबन नाग 'टिनटिनम'

@ AnirbanNag'tintinmj 'यदि यह openssl x509कमांड के साथ नहीं दिख रहा है, तो मुझे नहीं लगता कि मध्यवर्ती प्रमाणपत्र है। (जब तक आपको कुछ त्रुटि नहीं मिली openssl x509)।
derobert

12

tl; dr - एक लाइनर बैश मैजिक जो श्रृंखला के सभी सेर्ट्स को डंप करता है

openssl s_client -showcerts -verify 5 -connect de.wikipedia.org:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".crt"; print >out}' && for cert in *.crt; do newname=$(openssl x509 -noout -subject -in $cert | sed -n 's/^.*CN=\(.*\)$/\1/; s/[ ,.*]/_/g; s/__/_/g; s/^_//g;p').pem; mv $cert $newname; done

2 चरणों में स्पष्टीकरण

श्रृंखला में सभी डर्ट को वर्तमान डायर के रूप में डंप करने के लिए cert${chain_number}.pem:

openssl s_client -showcerts -verify 5 -connect your_host:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' 

बोनस-ट्रैक का नाम बदलकर उनके सामान्य नाम पर रखने के लिए:

for cert in *.pem; do newname=$(openssl x509 -noout -subject -in $cert | sed -n 's/^.*CN=\(.*\)$/\1/; s/[ ,.*]/_/g; s/__/_/g; s/^_//g;p').pem; mv $cert $newname; done

क्या एक्सटेंशन के रूप में ".pem" बनाम ".crt" चुनने का कोई कारण है क्योंकि आप केवल उनका नाम बदल रहे हैं, प्रारूप नहीं बदल रहे हैं?
कप्तान मैन

नहीं वास्तव में नहीं। ".pem" प्रारूप है (DER के base64) ".crt" का अर्थ है कि यह एक प्रमाण पत्र है, लेकिन एन्कोडिंग के बारे में कुछ भी नहीं बताता है। मैं इसे और अधिक सुसंगत बनाने और सभी पेम का नाम देने वाला था ... लेकिन मुझे लगता है कि एक लाइनर में पढ़ना सरल है, यह समझने के लिए कि प्रमाणपत्र कहाँ से डाउनलोड किया जा रहा है (crt) और फिनिश जो मैं आमतौर पर लिनक्स वर्ल्ड में उपयोग करता हूं (pem) । आशा है कि यह चीजों को थोड़ा स्पष्ट करता है ...
एस्टानी

1
हाँ, ऐसा लगता है, मुझे लगता है कि PEM एक प्रारूप है, लेकिन मैं अक्सर crt देखता हूँ और यह निश्चित नहीं था कि क्या यह एक प्रारूप है। यह वास्तव में यह समझाने में मदद करता है कि मैं "crt" को इतनी बार क्यों इस्तेमाल करता हूं। धन्यवाद :)
कप्तान मैन

यह केवल तभी काम करता है जब आप पहले से ही स्रोत पर भरोसा करते हैं। मैं एक कस्टम CA डाउनलोड करने का प्रयास कर रहा हूं, लेकिन यह केवल पहला प्रमाणपत्र डाउनलोड कर रहा है, न कि श्रृंखला।
मेजरगार्ड

@ मैं अजीब है क्योंकि मैं इसे उस मामले के लिए बिल्कुल इस्तेमाल किया। कहा जा रहा है कि, हो सकता है कि सर्वर रूट CA को बिल्कुल भी न भेज रहा हो, यदि आप मेरे उदाहरण पर एक नज़र डालते हैं, तो यह 3 सेरट्स को डाउनलोड करने के लिए उपयोग किया जाता है, यह केवल 2 डाउनलोड कर रहा है। मेरा मानना ​​है कि विकिपीडिया सर्वर रूट नहीं भेज रहा है (वास्तव में नहीं है बिंदु, यदि आपके पास यह नहीं है, तो आप इसे वैसे भी भरोसा नहीं करेंगे ...)। मुझे पूरा यकीन है कि यह पहले ऐसा नहीं था।
एस्टनी जूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.