2011-11-30 18 views
21

मैं एक सुरक्षित साइट (HTTPS) तक पहुंचने के लिए एक pycurl स्क्रिप्ट लिखने की कोशिश कर रहा हूं।pycurl और SSL प्रमाणपत्र

c = pycurl.Curl() 
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0') 
c.setopt(pycurl.URL, 'https://for-example-securedsite') 
c.setopt(pycurl.COOKIEFILE, 'cookie.txt') 
c.setopt(pycurl.COOKIEJAR, 'cookies.txt') 
c.setopt(pycurl.WRITEDATA, file("page.html","wb")) 

मैं नीचे त्रुटि हो रही है ..

pycurl.error: (60, 'SSL प्रमाणपत्र समस्या, सत्यापित करें कि CA प्रमाणपत्र ठीक है विवरण:। \ N त्रुटि: 14,090,086: एसएसएल दिनचर्या: SSL3_GET_SERVER_CERTIFICATE : प्रमाण पत्र सत्यापित विफल ')

कोड विफल रहा, क्योंकि यह SSL प्रमाणपत्र प्राप्त करने में विफल रहा।

अगर मैं नीचे दिए गए लाइनों को अपने कोड में जोड़ता हूं तो त्रुटि दूर हो गई।

c.setopt(pycurl.SSL_VERIFYPEER, 0) 
c.setopt(pycurl.SSL_VERIFYHOST, 0) 

उपरोक्त कोड प्रमाण पत्र सत्यापन छोड़ देगा। लेकिन यह 'बीच में आदमी' हमले के अधीन था।

मुझे पता है कि मेरे पास मेरे स्थानीय प्रमाणपत्र स्टोर में SSL प्रमाणपत्र है। क्या कोई जानता है कि मेरा प्रमाणपत्र कैसे निर्यात करें और इसे मेरे कोड का उपयोग करें .. कुछ नमूना कोड भयानक होंगे ..

आपके समय के लिए धन्यवाद!

उत्तर

18

आप सही हैं, जिस तरह से आप इसे कर रहे हैं, आप इसे मैन-इन-द-बीच हमले के लिए विशेष रूप से most recent SSL vulnerabilities के प्रकाश में रखते हैं। आप इसे निम्न प्रकार से हल कर सकते हैं:

import pycurl 
curl = pycurl.Curl() 
curl.setopt(pycurl.URL, "https://your-secure-website.com/") 
curl.setopt(pycurl.SSL_VERIFYPEER, 1) 
curl.setopt(pycurl.SSL_VERIFYHOST, 2) 
curl.setopt(pycurl.CAINFO, "/path/to/updated-certificate-chain.crt") 
curl.perform() 

डिफ़ॉल्ट रूप से कर्ल पुरानी प्रमाणपत्र सूची के साथ आता है। चाहे आप इसे अपडेट करना चाहते हैं या परीक्षण के लिए अपने स्वयं के कर्ट का उपयोग करें, अद्यतन-प्रमाणपत्र-chain.crt फ़ाइल को एक सुलभ स्थान पर रखना सुनिश्चित करें और pycurl.CAINFO विकल्प को इंगित करने के लिए इसका उपयोग करें।

यह भी सुनिश्चित करें कि pycurl.SSL_VERIFYHOST 2 पर सेट है, उच्चतम सुरक्षा जांच सेटिंग।

1

क्या आपने कर्ल दस्तावेज़ about SSL certificates पढ़ा है? यह आपके सवाल का सीधे ... आइटम 2 संबोधित करने के लिए विशेष रूप से, लगता है:

2. Get a CA certificate that can verify the remote server and use the proper 
    option to point out this CA cert for verification when connecting. For 
    libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath); 

ऐसा लगता है कि pycurl मॉड्यूल की तरह CAPATH विकल्प होता है, तो यह अपने कोड में लागू करने के लिए सरल होना चाहिए।

+0

आपके उत्तर के लिए धन्यवाद .. मैंने लेख पढ़ा .. फिर मैंने निम्न विकल्पों के साथ curl.exe का उपयोग कर प्रमाण प्राप्त करने का प्रयास किया .. curl.exe --cacert test.crt https: // सुरक्षित साइट/.. मुझे निम्न त्रुटि मिली .. "कर्ल: (1) प्रोटोकॉल https libcurl में समर्थित या अक्षम नहीं है" .. कोई विचार मैं इसे कैसे ठीक करूं? – K2M

+0

मैंने कर्ल स्रोत डाउनलोड किया और अपना खुद का निर्माण किया .. बस एक यूआरएल मिला जहां मैं आसानी से निर्मित Curl.exe डाउनलोड कर सकता हूं "http://curl.haxx.se/latest.cgi?curl=win32-ssl-devel- एमएसवीसी ".. मैं इसका पता लगाऊंगा! – K2M

संबंधित मुद्दे