2012-01-16 17 views
8

के लिए स्वयं हस्ताक्षरित SSL प्रमाणपत्र जोड़ना मैं अपने सी अनुप्रयोग में libcurl का उपयोग कर रहा हूं जो मैंने स्थापित एक HTTPS सर्वर से संवाद करने के लिए किया है। मैंने उस सर्वर पर एक स्व-हस्ताक्षरित प्रमाण पत्र जेनरेट किया है जिसे मैं कर्ल के साथ उपयोग करना चाहता हूं।libcurl

मुझे SSL सत्यापन को बाईपास करने के लिए CURLOPT_SSL_VERIFYPEER को 0 पर सेट करने के बारे में पता है, लेकिन मैं जेनरेट प्रमाणपत्र को कर्ल के "वैध" सीए प्रमाण पत्र में जोड़ना चाहता हूं।

मैंने सर्वर SSL सार्वजनिक कुंजी के स्थान पर CURLOPT_CAPATH और CURLOPT_SSLCERT सेट करने का प्रयास किया है, लेकिन यह सत्यापन पास करने में विफल रहता है।

मैं अपना स्वयं का सीए/स्व-हस्ताक्षरित प्रमाणपत्र कैसे जोड़ सकता हूं ताकि libcurl सफलतापूर्वक इसे सत्यापित कर सके?

+3

के रूप में अद्यतन करें: http://www.flatmtn.com/article/setting-openssl-create-certificates

एक साइट प्रमाण पत्र बनाना

यहाँ एक छोटे से ट्यूटोरियल मैंने पाया है कि आपने अपने समाधान का परीक्षण मदद कर सकते हैं है एक जवाब। बीटीडब्ल्यू, '--libcurl' कर्ल विकल्प libcurl-source स्रोत कोड उत्पन्न कर सकता है (यह देखने के लिए कि आप किस विकल्प का उपयोग कर सकते हैं) यदि आपके पास पहले से ही एक वर्किंग कर्ल-कमांड है। – jfs

उत्तर

2

एक स्व-हस्ताक्षरित प्रमाणपत्र जोड़ने के लिए, का उपयोग CURLOPT_CAINFO

एक साइट के एसएसएल सार्वजनिक प्रमाण पत्र प्राप्त करने के लिए, का उपयोग

openssl s_client -connect www.site.com:443 | tee logfile 

प्रमाणपत्र भाग ----BEGIN CERTIFICATE---- और
---END CERTIFICATE---- द्वारा चिह्नित है ।

एक फ़ाइल में है कि प्रमाणपत्र सहेजें, और इसलिए की तरह एक तरीके से कर्ल का उपयोग करें:

CURL* c = curl_easy_init(); 
curl_easy_setopt(c, CURLOPT_URL, "https://www.site.com"); 
curl_easy_setopt(c, CURLOPT_CAINFO, "/path/to/the/certificate.crt"); 
curl_easy_setopt(c, CURLOPT_SSL_VERIFYPEER, 1); 
curl_easy_perform(c); 
curl_easy_cleanup(c); 
0

सबसे पहले, आप एक तरह से मिश्रण "प्रमाणपत्र प्राधिकारी" फ़ाइलें और "प्रमाणपत्र" फ़ाइलें जो मुझे confuses।

मैं अपना स्वयं का सीए/स्व-हस्ताक्षरित प्रमाणपत्र कैसे जोड़ सकता हूं ताकि libcurl सफलतापूर्वक इसे सत्यापित कर सके?

इसे ऊपर दिए गए के लिए एक पूरक उत्तर के रूप में देखा जा सकता है। यदि आप एक स्व-हस्ताक्षरित सीए (प्रत्येक रूट-सीए स्वयं हस्ताक्षरित है) जोड़ना चाहते हैं तो libcurl सफलतापूर्वक वेबसाइट के प्रमाण पत्र को सत्यापित करेगा, जिसे सीए द्वारा उत्पन्न किया गया है, फिर पढ़ना जारी रखें।

CURLOPT_CAINFO के साथ आपको "प्रमाणपत्र प्राधिकरण" फ़ाइल (सीए) पास करने की आवश्यकता है जिसका उपयोग उस साइट के (गैर-सीए) प्रमाण पत्र को उत्पन्न करते समय किया गया था जिसे आप सत्यापित करना चाहते हैं।

(मुझे नहीं पता कि यह विकल्प गैर-सीए प्रमाण पत्र पास करके काम करता है, तो दस्तावेज वास्तव में इस पर स्पष्ट नहीं है, और पिछले उत्तर में 2 अप-वोट हैं, इसलिए अगर किसी ने इसका परीक्षण किया है तो कृपया टिप्पणी करें)

आप एक प्रमाणपत्र प्राधिकरण श्रृंखला फ़ाइल भी पास कर सकते हैं जिसमें सीए का उपयोग किया गया था, यदि यह रूट-सीए नहीं था।

एक निजी रूट सीए बनाना:: http://www.flatmtn.com/article/setting-ssl-certificates-apache

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