एसएसएल फिंगरप्रिंट को कमांड लाइन द्वारा कैसे सत्यापित करें? (वेज, कर्ल,…)


32

एक कमांड लाइन वेबसाइट डाउनलोडर का उपयोग करना, जैसे कि wget, curlया किसी अन्य स्क्रिप्ट में ...

मेरे पास किसी वेबसाइट का SHA-1 और SHA-256 सर्टिफिकेट फिंगरप्रिंट है। सुरक्षा चिंताओं ( 1 ) ( 2 ) के कारण, मैं सार्वजनिक एसएसएल प्रमाणपत्र प्राधिकरण प्रणाली का उपयोग नहीं करना चाहता। फिंगरप्रिंट हार्ड कोडित होना चाहिए।

क्या एप्लिकेशन की तरह wget SSL फिंगरप्रिंट की जांच कर सकता है?

wget में ऐसी कार्यक्षमता नहीं है। ( )

उपयोग wget --ca-certificateया curl --cacertमुझे अपना स्वयं का स्थानीय प्रमाणपत्र प्राधिकारी चलाना होगा, जिसे मैं रोकना चाहूंगा, क्योंकि इससे बहुत जटिलता बढ़ जाती है। यह भी बेहद मुश्किल है और इससे पहले कभी किसी ने ऐसा नहीं किया था। ( )

कोई उपकरण नहीं है, जैसे
download --tlsv1 --serial-number xx:yy:zz --fingerprint xxyyzz https://site.com?

समाधान निश्चित रूप से TOCTOU के लिए असुरक्षित नहीं होना चाहिए। ( ) MITM ओपनस्क् क्लायंट अनुरोध के लिए एक वैध फिंगरप्रिंट लौटा सकता है और निम्नलिखित विनती अनुरोध के साथ छेड़छाड़ कर सकता है।


शायद कुछ ओपनएसएसएल जादू करने की आवश्यकता है जैसे: cyberciti.biz/faq/…
जस्टिन एंड्रस्क

आगंतुक: ध्यान दें कि यह infosec SE पर क्रॉस-पोस्ट किया गया था । स्व-उत्तरों में से एक को वहां से कॉपी किया गया। यह व्यवहार पर आधारित है, btw।
फेलिक्स सपरेली

जवाबों:


31

स्रोत

आवश्यक सॉफ़्टवेयर स्थापित करें:

apt-get install ca-certificates curl

सार्वजनिक एसएसएल प्रमाणपत्र डाउनलोड करें:

openssl s_client -connect torproject.org:443 -CAfile /usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_CA.crt >./x.cert </dev/null

या और अच्छा:

echo -n | openssl s_client -connect torproject.org:443 -CAfile /usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_CA.crt | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./torproject.pem

SHA-1 फिंगरप्रिंट प्राप्त करें:

openssl x509 -noout -in torproject.pem -fingerprint -sha1

SHA-256 फिंगरप्रिंट प्राप्त करें:

openssl x509 -noout -in torproject.pem -fingerprint -sha256

मैन्युअल रूप से SHA-1 और SHA-256 फिंगरप्रिंट की तुलना torproject.org FAQ से करें: SSL

.

वैकल्पिक रूप से परीक्षण के उद्देश्यों के लिए बेकार प्रमाणपत्रों को प्रस्तुत करना। यहाँ कर्ल का उपयोग करना , लेकिन wget में बग बग है और वैसे भी ca-files का उपयोग करता है।

sudo mv /usr/share/ca-certificates /usr/share/ca-certificates_

कर्ल और पिन किए गए प्रमाण पत्र के साथ डाउनलोड करें:

curl --cacert ./torproject.pem https://check.torproject.org/ > check.html

यह प्रॉक्सी की उपस्थिति में काम नहीं करता है, हालांकि: - /
फ्रेडरिक नॉर्ड

कृपया ध्यान दें कि -CAfile विकल्प को आपके उदाहरण में पूरी तरह से अनदेखा किया गया है।
लार्स

11

Tcsh में:

echo | openssl s_client -connect host.example.com:443 |& openssl x509 -fingerprint -noout

3
में काम करता है zsh, को भी काम करना चाहिए
नंबर 5

10

यह भी पर्याप्त है:

openssl x509 -fingerprint -in server.crt

-md5MD5 फ़िंगरप्रिंट पुनर्प्राप्त करने के लिए विकल्प जोड़ें । और -md5बीच में नहीं लगाना चाहिए । -inserver.crt
林果 林果

4

यह करने में काफी आसान है openssl कमांड और इसकी क्लाइंट कार्यक्षमता के ।

निम्न लिपि लिपि एक दिया गया डोमेन (कोई https उपसर्ग) और एक SHA-1 फिंगरप्रिंट लेगी, और बिना किसी त्रुटि (0) के साथ बाहर निकलना अगर पुनः प्राप्त फिंगरप्रिंट मिलान करता है, लेकिन कोई मेल नहीं होने पर बाहर निकलें कोड 1 के साथ। फिर आप अंतिम निकास कोड का परीक्षण करके इसे अपनी स्क्रिप्ट में शामिल कर सकते हैं$? :

#! / Bin / bash
FPRINT = `इको-एन | opensl s_client -connect $ 1: 443 2> / dev / null \ | opensl x509 -noout -fingerprint | cut -f2 -d '=' ` अगर ["$ 2" = "$ FPRINT"]; फिर बाहर निकलें 0 अन्य बाहर निकलें 1 फाई

यह TOCTOU के लिए असुरक्षित है। [१] MITM खुलने वाले क्लाइंट अनुरोध के लिए एक वैध फिंगरप्रिंट लौटा सकता है और निम्नलिखित wget अनुरोध के साथ छेड़छाड़ कर सकता है। [१] en.wikipedia.org/wiki/Time_of_check_to_time_of_use
जेम्स मिच

सच है, सिद्धांत में। wgetओपनएसएसएल के साथ इसे संशोधित करना और संकलित करना काफी आसान होगा ताकि यह वही करे जो आप इनलाइन चाहते हैं, लेकिन यह एयू उत्तर के दायरे से परे है।
ish

तो, दस्तावेज़ को पुनः प्राप्त करने के लिए s_client का उपयोग करने के बारे में कैसे? कुछ (echo -ne "Host: ${HOST}\n\rGET ${URL}\n\r" && yes) 2>/dev/null | openssl s_client -connect ${HOST}:443काम करना चाहिए, नहीं? ठीक है, आपको वास्तविक सामग्री उत्तर से एसएसएल सत्र जानकारी को विभाजित करना होगा।
taneli

3

स्रोत

#!/usr/bin/perl
# https://security.stackexchange.com/questions/20399/how-to-verify-the-ssl-fingerprint-by-command-line-wget-curl
# Code snippets taken from Net::SSLeay documentation and mildly modified.
# Requires a newer version of SSLeay (tested with 1.48)
# Needless to say, verify correct $host and $fingerprint before testing!!!

use Net::SSLeay qw(get_https3);

$host = "www.google.com";
$port = 443;
$fingerprint = "C1:95:6D:C8:A7:DF:B2:A5:A5:69:34:DA:09:77:8E:3A:11:02:33:58";

($p, $resp, $hdrs, $server_cert) = get_https3($host, $port, '/');
if (!defined($server_cert) || ($server_cert == 0)) {
    warn "Subject Name: undefined, Issuer  Name: undefined";
} elsif (Net::SSLeay::X509_get_fingerprint($server_cert, "sha1") ne $fingerprint) {
    warn 'Invalid certificate fingerprint '
        .  Net::SSLeay::X509_get_fingerprint($server_cert, "sha1")
        . ' for ' . Net::SSLeay::X509_NAME_oneline(
             Net::SSLeay::X509_get_subject_name($server_cert));
} else {
    print $p;
}

जैसा कि नेट :: SSLea प्रलेखन में उल्लिखित है, इस पद्धति का अर्थ है HTTP लेनदेन के बाद सत्यापन, और इसलिए इसका उपयोग नहीं किया जाना चाहिए यदि आप सत्यापित करना चाहते हैं कि आप उन्हें डेटा भेजने से पहले सही सर्वर से बात कर रहे हैं। लेकिन अगर आप जो कर रहे हैं, वह तय कर रहा है कि आपने जो डाउनलोड किया है उस पर भरोसा करना है या नहीं (जो आपको लगता है कि आपके संदर्भ # 4 से है) तो यह ठीक है।


1

यह मेरी रोजमर्रा की स्क्रिप्ट है:

curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'

ouput:

* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*    start date: 2016-01-07 11:34:33 GMT
*    expire date: 2016-04-06 00:00:00 GMT
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
* Server GFE/2.0 is not blacklisted
* Connection #0 to host www.google.com left intact
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.