किसी साइट के प्रमाणपत्र को निरस्त कर दिया गया है या नहीं, यह सत्यापित करने के लिए कर्ल का उपयोग कैसे करें?


26

यह देखने के लिए कि क्या google.com के प्रमाणपत्र को निरस्त कर दिया गया है, मैंने निम्न आदेश की कोशिश की:

curl https://www.google.com --cacert GeoTrust_Global_CA.pem --crlfile gtglobal.pem -v

, लेकिन मुझे खतरनाक "एसएसएल प्रमाणपत्र समस्या" मिली:

* About to connect() to www.google.com port 443 (#0)
*   Trying 81.24.29.91... connected
* successfully set certificate verify locations:
*   CAfile: GeoTrust_Global_CA.pem
  CApath: /etc/ssl/certs
* successfully load CRL file:
*   CRLfile: gtglobal.pem
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
* Closing connection #0
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

मुझे लगता है कि यह त्रुटि सही नहीं है, क्योंकि Google के पास एक वैध प्रमाणपत्र होना चाहिए।

क्या आप जानते हैं कि मैं एक कर्ल कमांड कैसे जारी कर सकता हूं जो यह सही ढंग से करता है।

अधिक जानकारी

यदि आप सोच रहे हैं कि मैंने उन विशिष्ट फ़ाइलों (GeoTrust_Global_CA.pem और gtglobal.pem) का उपयोग कर्ल कमांड में क्यों किया, तो यह है कि मैं कैसे आगे बढ़ा:

  • मैंने पहली बार देखा कि CA ने https://www.google.com के लिए कौन सा प्रमाणपत्र जारी किया । यह जियोट्रस्ट ग्लोबल सीए;
  • मैंने यहाँ से GeoTrust Global CA रूट प्रमाणपत्र डाउनलोड किया (यह GeoTrust_Global_CA.pem फ़ाइल है);
  • मैं से इसी सीआरएल (प्रमाणपत्र निरस्तीकरण सूची) डाउनलोड यहां (इस gtglobal.pem फ़ाइल है)।

मुझे लगता है जैसे यह पहले से ही काम करता है? मुझे यकीन नहीं है कि आपका सवाल क्या है।
mtak

1
@mtak - सत्यापन को विफल मानते हुए ऐसा लगता है कि लेखक कारण पूछ रहा है कि प्रमाणपत्र सत्यापित करने में विफल क्यों है, प्रमाणपत्र को सत्यापित किया जाना चाहिए था, यह देखते हुए कि वर्तमान Google प्रमाणपत्र को रद्द नहीं किया गया है।
रामहुंड

क्षमा करें, मुझे अब एहसास हुआ कि प्रश्न थोड़ा अस्पष्ट है। मैं इसे संपादित करूंगा। @Ramhound कि सही :) है
Claudiu

मुझे यह समझ में नहीं आ रहा है कि आप इस बात की पुष्टि करने के लिए google.com से क्यों जुड़ेंगे कि क्या कोई प्रमाणपत्र (जो आपको पहले ही टीएलएस हैंडशेक के दौरान प्राप्त हुआ है) मौजूद है या नहीं, एक सीआरएल पर (जो आपने पहले ही डाउनलोड किया है)। क्या आपको अपने कंप्यूटर पर ऐसा नहीं करना चाहिए? क्या होगा अगर google.com वास्तव में MITM था?
क्रेग हिक्स

यहाँ एक प्रमाण पत्र अगर मैन्युअल रूप से जाँच का एक उदाहरण है। दोनों प्रमाणित होने के बाद एक CRL पर है। और CRL स्थानीय मेमोरी में हैं --- feistyduck.com/library/openssl%2dcookbook/online/…
क्रेग हिक्स

जवाबों:


12

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

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

10

जाहिरा तौर पर, आप किसी एकल अनुरोध के साथ किसी साइट को सत्यापित नहीं कर सकते। स्टैकओवरफ्लो पर /programming/16244084/how-to-programmatically-check-if-a-certificate-has-been-revoked?lq=1 और पुराने संबंधित सवाल देखें ।

कर्ल ने मेरे लिए प्रमाणपत्र निरस्तीकरण सूचियों के साथ काम नहीं किया , न तो विंडोज पर, न ही लिनक्स पर। आपको कर्ल का उपयोग क्यों करना चाहिए ? Openssl अधिक उपयुक्त लगता है:

openssl s_client -connect www.google.com:443

हमें मिला

---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---

तब हम कुछ प्रमाण पत्र का निरीक्षण कर सकते हैं:

curl http://pki.google.com/GIAG2.crt | openssl x509 -inform der -text

grep crlउपरोक्त कमांड के आउटपुट में। दिलचस्प भाग हैं:

        X509v3 CRL Distribution Points:
            URI:http://crl.geotrust.com/crls/gtglobal.crl

        Authority Information Access:
            OCSP - URI:http://gtglobal-ocsp.geotrust.com

अब हम मैन्युअल रूप से crl का निरीक्षण कर सकते हैं:

curl http://crl.geotrust.com/crls/gtglobal.crl | openssl crl -inform der -text
curl http://pki.google.com/GIAG2.crl | openssl crl -inform der -text

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

strace curl https://www.google.com   -v

हम देखते हैं कि कर्ल विद्रोह की जाँच नहीं कर रहा है (प्रासंगिक स्थानों से जुड़ने का भी नहीं)। यह सिर्फ कहता है

* Server certificate:
*        subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*        start date: 2014-04-09 11:40:11 GMT
*        expire date: 2014-07-08 00:00:00 GMT
*        subjectAltName: www.google.com matched
*        issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*        SSL certificate verify ok.

2
आप यह क्यों कहते हैं कि कर्ल ऐसा नहीं कर सकते? कर्ल मैनपेज '- क्रॉटलाइल' विकल्प को निर्दिष्ट करता है जो इस उद्देश्य के लिए वास्तव में मौजूद है। इसके अलावा, कर्ल ओपनसेल के साथ संकलित किया गया है और इसे अपने क्रिप्टो-संबंधित ऑपरेशन (प्रमाण पत्र सहित) के लिए उपयोग करता है - यह सिर्फ मेरे लिए काम नहीं कर रहा है, यह पता लगाने की कोशिश क्यों की जा रही है :)
क्लाउडीयू

3

जाहिरा तौर पर यह विंडोज पर एक बहुत ही आम समस्या है, क्योंकि स्टैकओवरफ्लो शो पर यह सवाल है । मैं विशेष रूप से उपयोगकर्ता Артур Курицын द्वारा उत्तर की बात कर रहा हूं, जिसे मैं आपकी सुविधा के लिए यहां उद्धृत करता हूं:

यह विंडोज में एक बहुत ही आम समस्या है। आपको बस सेट cacert.pemकरने की जरूरत है curl.cainfo

PHP 5.3.7 के बाद से आप कर सकते हैं:

  1. http://curl.haxx.se/ca/cacert.pem डाउनलोड करें और इसे कहीं सहेजें।
  2. अद्यतन php.ini- curl.cainfo = "PATH_TO / cacert.pem" जोड़ें

अन्यथा आपको प्रत्येक CURL संसाधन के लिए निम्नलिखित कार्य करने होंगे:

curl_setopt ($ch, CURLOPT_CAINFO, "PATH_TO/cacert.pem");

साथ ही, यह लेख उपयोगी भी हो सकता है।


जो मुझे पता है, कमांड लाइन विकल्प '--cacert' (जो मैंने उपयोग किया था) libcurl में CURLOPT_CAINFO विकल्प सेट करने के बराबर है, इसलिए मुझे नहीं लगता कि मेरे मामले में भी यही समस्या है (मैं भी) लिनक्स का उपयोग करना)
क्लोडिउ

सवाल का जवाब नहीं, अभी भी बहुत उपयोगी जानकारी!
एंथेसिस

1

मुझे काम करने का एक तरीका पहले से उजागर दूसरों के समान है, केवल यह आउटपुट भेजता है dev/nullऔर इसका उपयोग करने के लिए अपेक्षाकृत जल्दी है।

curl -L -v -s https://www.google.de 1>/dev/null

# curl -L -v -s https://www.google.de 1>/dev/null
* About to connect() to www.google.de port 443 (#0)
*   Trying 216.58.208.35...
* Connected to www.google.de (216.58.208.35) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
*   subject: CN=www.google.de,O=Google LLC,L=Mountain View,ST=California,C=US
*   start date: Okt 23 16:53:00 2018 GMT
*   expire date: Jan 15 16:53:00 2019 GMT
*   common name: www.google.de
*   issuer: CN=Google Internet Authority G3,O=Google Trust Services,C=US
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.google.de
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Mon, 12 Nov 2018 15:36:17 GMT
< Expires: -1
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=ISO-8859-1
< P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
< Server: gws
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Set-Cookie: 1P_JAR=2018-11-12-15; expires=Wed, 12-Dec-2018 15:36:17 GMT; path=/; domain=.google.de
< Set-Cookie: NID=146=4SDchvTa39-4IskdXfZpgjtm2ym5zzvHVx8g0v39Q1fiOzk26NQl1TGkFMllh_pg8bFWr6x4jG3ODYDWrkn6TXmd0Ewp4DC_N3p1NPlWqdBUfwFR_PTHIXRi8RuTxdA54w9Zr0uNyhN__5xjUdrCLZTLujNEQ2MV9EVwnmxux6o; expires=Tue, 14-May-2019 15:36:17 GMT; path=/; domain=.google.de; HttpOnly
< Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35"
< Accept-Ranges: none
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
<
{ [data not shown]
* Connection #0 to host www.google.de left intact

यह हमें इस बारे में कुछ भी बताने के लिए प्रतीत नहीं होता है कि साइट का प्रमाणपत्र रद्द कर दिया गया है या नहीं। वास्तव में, प्रलेखन के अनुसार, curlयूनिक्स पर जाँच नहीं होती है (जब तक कि आप इसे विशेष रूप से SSL पुस्तकालय के साथ संकलित नहीं करते हैं जो स्वचालित रूप से आपके लिए ऐसा करता है)।
ट्रिपलए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.