मैं https://www.google.com से ssl सर्टिफिकेट डाउनलोड करना चाहता हूं , wget या किसी अन्य कमांड का उपयोग करके। कोई यूनिक्स कमांड लाइन? wget या opsl?
मैं https://www.google.com से ssl सर्टिफिकेट डाउनलोड करना चाहता हूं , wget या किसी अन्य कमांड का उपयोग करके। कोई यूनिक्स कमांड लाइन? wget या opsl?
जवाबों:
प्रमाण पत्र डाउनलोड करने के लिए, आपको ग्राहक को इस तरह से ओपनसेल में निर्मित करने की आवश्यकता है:
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'प्रमाणपत्र श्रृंखला और कनेक्शन विवरण के बारे में जानकारी निकालता है। प्रमाण पत्र को अन्य कीस्टोर्स में आयात करने के लिए यह पसंदीदा प्रारूप है।
-showcertsसर्वर / लीफ सर्टिफिकेट भी दिखाता है? मैंने सोचा कि यह केवल मध्यवर्ती प्रदर्शित करता है जब उस स्विच को शामिल किया गया था।
s_clientहमेशा सर्वर सर्टिफिकेट दिखाता है (यदि कोई है, तो अर्थात सर्वर हैलो पर प्रतिक्रिया करता है और एक अनाम सूट नहीं चुनता है)। प्राप्त सभी सेर्ट्स, सर्वर सर्टिफिकेट पहले इंटरमीडिएट और / या रूट -showcertsदिखाता है ।
मुझे जवाब मिल गया। Openssl इसे प्रदान करता है।
खुलता है s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOFप्रमाण पत्र का विवरण देखने के लिए भी
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pemserverfault.com/questions/139728/… के
GNUTLS ग्राहक उपकरण, gnutls-cliभी इस आसान बना सकते हैं:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
कार्यक्रम साइट के लिए एक इंटरैक्टिव क्लाइंट प्रदान करने के लिए डिज़ाइन किया गया है, इसलिए आपको /dev/nullइंटरैक्टिव सत्र समाप्त करने के लिए इसे खाली इनपुट (इस उदाहरण में, से ) देने की आवश्यकता है।
@bignose उत्तर के आधार पर, यहाँ एक स्व-निहित संस्करण है जो उदाहरण के लिए शेफ की रेसिपी में अच्छी तरह से फिट बैठता है:
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
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
खुलने की यह विधा स्टड की अपेक्षा करती है, इसलिए हम इसे प्रदान करते हैं true |, यह -connect पैरामीटर में निर्दिष्ट सर्वर से जुड़ता है। 2>/dev/nullमौन त्रुटियों (वैकल्पिक), हम पूरे आउटपुट को x509 पार्सर में पास कर सकते हैं, /dev/stdinशेल फाइल को इनपुट फाइल के रूप में उपयोग करने के लिए निर्दिष्ट करते हैं। और उस इच्छा उत्पादन सिर्फ -----BEGIN CERTIFICATE-----करने के लिए -----END CERTIFICATE-----के भाग s_clientउत्पादन। आप > google.com.pemकमांड के अंत में जोड़कर फ़ाइल में रीडायरेक्ट कर सकते हैं ।
जैसा कि सबसे अच्छा मैं बता सकता हूं, यह प्रमाण पत्र श्रृंखला को सत्यापित नहीं करता है, यह केवल आपको बता सकता है कि अंतिम सर्वर प्रदान करने वाली एसएसएल पहचान क्या है।
x509डिफ़ॉल्ट रूप से स्टड को पढ़ता है इसलिए -in /dev/stdinबेमानी है (3) s_clientएक स्थानीय ट्रस्ट एंकर (रूट) को सर्वर सर्टिफिकेट को सही ढंग से सत्यापित करता है और अप्रकाशित है, लेकिन आपने इस जानकारी को दबा दिया जो इसे दिखाएगा (4) यह निरसन के लिए जाँच नहीं करता है (5) यह केवल 1.0.2 में सर्वर सर्टिफिकेट में नाम की जांच करता है और फिर डिफ़ॉल्ट रूप से नहीं (लेकिन आप आसानी से जाँच कर सकते हैं कि स्वयं को देखकर बाद में)