सवाल वेबसाइट से एसएसएल प्रमाणपत्र कैसे डाउनलोड करें?


मैं एसएसएल प्रमाण पत्र डाउनलोड करना चाहता हूं, कहो https://www.google.com, wget या किसी अन्य आदेश का उपयोग कर। कोई यूनिक्स कमांड लाइन? wget या openssl?


162
2018-05-07 21:01


मूल




जवाब:


प्रमाण पत्र डाउनलोड करने के लिए, आपको Opensl में बनाए गए क्लाइंट का उपयोग करने की आवश्यकता है:

echo -n | openssl s_client -connect HOST:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

वह प्रमाण पत्र को बचाएगा /tmp/$SERVERNAME.cert

आप उपयोग कर सकते हैं -showcerts यदि आप श्रृंखला में सभी प्रमाणपत्र डाउनलोड करना चाहते हैं। लेकिन अगर आप सिर्फ सर्वर प्रमाण पत्र डाउनलोड करना चाहते हैं, तो निर्दिष्ट करने की कोई आवश्यकता नहीं है -showcerts

echo -n सर्वर को प्रतिक्रिया देता है, ताकि कनेक्शन जारी किया जा सके

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' प्रमाणपत्र श्रृंखला और कनेक्शन विवरण के बारे में जानकारी हटा देता है। प्रमाणपत्र को अन्य कीस्टोरों में आयात करने के लिए यह पसंदीदा प्रारूप है।


219
2017-10-19 22:59



सराहना करते हैं कि आपने न केवल एक अच्छा जवाब दिया है, बल्कि एक सटीक स्पष्टीकरण भी दिया है। - marco.m
कर देता है -showcerts सर्वर / पत्ता प्रमाण भी दिखाओ? मैंने सोचा कि यह केवल इंटरमीडिएट प्रदर्शित करता है जब उस स्विच को शामिल किया गया था। - Mike B
जैसा कि उत्तर ने कहा, s_client हमेशा सर्वर प्रमाण दिखाता है (यदि कोई है, यानी सर्वर हैलो को जवाब देता है और एक अनाम सुइट का चयन नहीं करता है)। -showcerts दिखाता है सब कर्ट प्राप्त हुए, पहले सर्वर प्रमाण पत्र इंटरमीडिएट्स और / या रूट। - dave_thompson_085
यह प्रॉक्सी की उपस्थिति में काम नहीं करता है, यद्यपि। - Frederick Nord
यह उन सर्वरों के साथ भी काम नहीं करता है जो एसएनआई (एकाधिक आईपी-एड्रेस पर एकाधिक प्रमाण पत्र / डोमेन) का उपयोग करते हैं। समस्याओं से बचने के लिए, openssl के servername पैरामीटर निर्दिष्ट करें: openssl s_client -connect HOST: PORTNUMBER -ervername CN - verhage


मुझे जवाब मिला। Openssl इसे प्रदान करता है।

openssl s_client- कनेक्ट $ {REMHOST}: $ {REMPORT}


54
2018-05-07 21:05



भी openssl x509 -text <<EOF cert-text EOF प्रमाण पत्र के विवरण देखने के लिए - mpapis
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem के सौजन्य से serverfault.com/questions/139728/... - pulkitsinghal
इस इसे पूरा करता है और छोड़ देता है sed हैक। - phs
यह सिर्फ एक प्रमाण पत्र की जांच करता है, क्या होगा यदि सेवा सर्वर के लोड संतुलित समूह का हिस्सा है, जिनमें से प्रत्येक के पास एक अलग प्रमाणपत्र है, संभवतः एक अलग रूट सीए द्वारा हस्ताक्षरित किया गया है? या दूसरे शब्दों में, एक एमआईटीएम हमले इस अनुरोध को वास्तविक साइट पर जाने दे सकता है, और फिर उसके अनुरोधों को अन्य सर्वरों को निर्देशित कर सकता है। क्या यह जांचने के कोई तरीके हैं? और वास्तव में एक डोमेन के सभी प्रमाणपत्रों की एक सूची प्राप्त करने के लिए? - Jens Timmerman
@JensTimmerman "या दूसरे शब्दों में, एक एमआईटीएम हमले इस अनुरोध को वास्तविक साइट पर जाने दे सकता है, और फिर उसके अनुरोधों को अन्य सर्वरों को निर्देशित कर सकता है।" यह तब तक संभव नहीं है जब तक कि मैन-इन-द-बीच में लक्षित सर्वर के लिए एक वैध प्रमाणपत्र नहीं है (या क्लाइंट मूर्खतापूर्ण सर्वर प्रमाणपत्र की जांच नहीं करता है)। जाहिर है, अगर सर्वर कभी-कभी एक अलग प्रमाणपत्र प्रदान करता है तो आप केवल उम्मीद कर सकते हैं कि आखिरकार कनेक्शन प्रयासों को दोहराकर उन्हें सब कुछ मिल जाए। - David Tonhofer


GNUTLS ग्राहक उपकरण, gnutls-cli, यह भी आसान बना सकते हैं:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

कार्यक्रम साइट पर एक इंटरैक्टिव क्लाइंट प्रदान करने के लिए डिज़ाइन किया गया है, इसलिए आपको इसे खाली इनपुट देना होगा (इस उदाहरण में, से /dev/null) इंटरैक्टिव सत्र समाप्त करने के लिए।


20
2017-10-07 06:19



यह gnutls को कैसे कनेक्ट करेगा (सिस्टम चौड़ा कॉन्फ़िगर किया गया है) https प्रॉक्सी और प्रमाणपत्र को प्रिंट करता है? - Frederick Nord


@ बिग्नोज़ उत्तर के आधार पर, यहां एक स्वयं निहित संस्करण है जो ठीक से फिट बैठता है एक महाराज नुस्खा:

sudo apt-get install gnutls-bin 
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates

8
2018-05-27 09:31





true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

openssl का यह तरीका stdin की अपेक्षा करता है, इसलिए हम इसे प्रदान करते हैं true |, यह -कनेक्ट पैरामीटर में निर्दिष्ट सर्वर से कनेक्ट होता है। 2>/dev/null चुप्पी त्रुटियों (वैकल्पिक), हम पूरे आउटपुट को x509 पार्सर में निर्दिष्ट कर सकते हैं, निर्दिष्ट करते हैं /dev/stdin इनपुट फ़ाइल के रूप में खोल पाइप का उपयोग करने के लिए। और वह सिर्फ आउटपुट होगा -----BEGIN CERTIFICATE----- सेवा मेरे -----END CERTIFICATE----- का हिस्सा s_client उत्पादन। आप इसे जोड़कर फ़ाइल में रीडायरेक्ट कर सकते हैं > google.com.pem आदेश के अंत तक।


जैसा कि मैं सबसे अच्छा कह सकता हूं, यह प्रमाण पत्र श्रृंखला को सत्यापित नहीं करता है, यह केवल आपको बता सकता है कि अंतिम सर्वर क्या एसएसएल पहचान प्रदान करता है।


6
2018-01-12 10:38



(1) यह वास्तव में 6 साल पहले जवाबों में सुधार नहीं करता है (2) x509 डिफ़ॉल्ट रूप से stdin पढ़ता है -in /dev/stdin अनावश्यक है (3) s_client सर्वर ट्रस्ट को स्थानीय ट्रस्ट एंकर (रूट) में सही ढंग से चेन की पुष्टि करता है और यह अप्रत्याशित है, लेकिन आपने यह जानकारी दबा दी है जो इसे दिखाएगी (4) यह निरसन की जांच नहीं करता है (5) यह जांचता है नाम सर्वर प्रमाण में केवल 1.0.2 में और फिर डिफ़ॉल्ट रूप से नहीं (लेकिन आप बाद में प्रमाण को देखकर स्वयं को आसानी से देख सकते हैं) - dave_thompson_085
@ dave_thompson_085, सवाल यह है कि प्रमाण पत्र कैसे डाउनलोड करें, लेकिन श्रृंखला की जानकारी न दिखाएं। मुझे openssl x509 को किसी अन्य उत्तर में sed से बेहतर पसंद है। - Der_Meister


पूर्व और प्रक्रिया प्रतिस्थापन का उपयोग कर वैकल्पिक वाक्यविन्यास:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt

0