2010-05-25 18 views
6

का उपयोग करके मुझे पता चला है कि इस विषय पर वास्तव में बहुत कम जानकारी है। मेरे पास पहले से ही libcurl का उपयोग कर सफल पोस्ट बनाने वाला एक डीएल है।libcurl और SSL

मैंने एसएसएल कार्यक्षमता के लिए openssl के साथ libcurl संकलित किया है।

यहां मेरे मूल कर्ल सेटअप का एक उदाहरण है।

curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, errorBuffer); 

    //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER , 1); 
    //curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST , 1); 
    //curl_easy_setopt(curl, CURLOPT_CAINFO , "./ca.cert"); 

    curl_easy_setopt(handle, CURLOPT_POSTFIELDS, cParam); 
    curl_easy_setopt(handle, CURLOPT_POSTFIELDSIZE, strlen(cParam)); 
    curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1); 
    curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, Request::writer); 
    curl_easy_setopt(handle, CURLOPT_WRITEDATA, &buffer); 
    curl_easy_setopt(handle, CURLOPT_URL, cURL); 

मेरा प्रश्न जो लोग इस से पहले किया है, यह उतना आसान सिर्फ उन पंक्तियों के ऊपर जोड़ने एसएसएल काम करने के लिए प्राप्त करने के लिए के रूप में (जब तक प्रमाण पत्र मौजूद है के रूप में) है? या यह अधिक जटिल है?

मजाकिया बात यह है कि मैं पूरी तरह से सुनिश्चित नहीं हूं कि एसएसएल कैसे काम करता है। मैंने पहले कभी इसके साथ काम नहीं किया है। क्या मुझे अपने आवेदन में एक कुंजी स्टोर करने और प्रत्येक अनुरोध के साथ भेजने की ज़रूरत है? वैसे भी मेरा मुख्य सवाल पहला था। पहले ही, आपका बहुत धन्यवाद।

+1

संबंधित: http://stackoverflow.com/questions/197444/building-libcurl-with-ssl-support-on-windows –

उत्तर

2

हाँ, यह इतना आसान है। बस सुनिश्चित करें कि आपके पास "ca.cert" फ़ाइल एक वास्तविक CA प्रमाण है जो आपके सर्वर के प्रमाणपत्र को सत्यापित कर सकती है।

+0

आपको यह 'ca.cert' फ़ाइल कहां से मिलती है? क्योंकि विंडोज़ के तहत, क्रोम से thx -> डेवलपर विकल्प -> सुरक्षा मैं केवल '.cer' (बिना' टी ') फ़ाइलों को निर्यात करने में सक्षम हूं –

+0

यदि आप उसी सीएएस पर भरोसा करना चाहते हैं जो फ़ायरफ़ॉक्स ट्रस्ट करता है, तो आप ऐसे प्राप्त कर सकते हैं [यहां] से एक सीए प्रमाणपत्र बंडल (https://curl.haxx.se/docs/caextract.html) –

0

libcurl के साथ SSL का उपयोग करने के लिए आपको बस इतना करना है कि http url के बजाय https url दें। Curl_easy_setopt के साथ सेट करने के लिए आपको एकमात्र विकल्प CURLOPT_URL है, हालांकि यदि आप एक लेखन कॉलबैक निर्दिष्ट नहीं करते हैं तो यह केवल प्राप्त डेटा को stdout पर प्रिंट करेगा। क्या तुम सच में होस्ट नाम मैचों की जांच करना चाहते हैं (जैसा कि उदाहरण में एक टिप्पणी के रूप में दिखाया)

CURL *handle = curl_easy_init(); 
char url[] = "https://google.com"; 
curl_easy_setopt(handle, CURLOPT_URL, url); 
curl_easy_perform(handle); 
+1

यह और अधिक गलत नहीं हो सकता है। –

0

सुनिश्चित करें कि जब CURLOPT_SSL_VERIFYHOST का उपयोग कर आप 2L को वास्तविक मान सेट (जो डिफ़ॉल्ट है) बनाओ 1 के बजाय,, अन्यथा यह प्रमाण पत्र में "सामान्य नाम" (सीएन) के अस्तित्व की जांच करेगा।