कर्ल: एसएसएल प्रमाणपत्र समस्या, सत्यापित करें कि CA प्रमाणपत्र ठीक है
07 अप्रैल 2006
कर्ल के साथ एक सुरक्षित यूआरएल खोलने पर आपको निम्नलिखित त्रुटि मिल सकती है:
SSL प्रमाणपत्र समस्या, सत्यापित करें कि CA प्रमाणपत्र ठीक है
मैं बताऊंगा कि त्रुटि क्यों हुई और आपको इसके बारे में क्या करना चाहिए।
त्रुटि से छुटकारा पाने का सबसे आसान तरीका आपकी स्क्रिप्ट में निम्नलिखित दो पंक्तियों को जोड़ना होगा। यह समाधान एक सुरक्षा जोखिम उत्पन्न करता है।
//WARNING: this would prevent curl from detecting a 'man in the middle' attack
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
देखते हैं कि यह दो पैरामीटर क्या करते हैं। मैनुअल का हवाला देते हुए।
CURLOPT_SSL_VERIFYHOST : 1 SSL सहकर्मी प्रमाणपत्र में एक सामान्य नाम के अस्तित्व की जांच करने के लिए। 2 एक सामान्य नाम के अस्तित्व की जांच करने के लिए और यह भी सत्यापित करें कि यह प्रदान किए गए होस्टनाम से मेल खाता है।
CURLOPT_SSL_VERIFYPEER : सहकर्मी के प्रमाणपत्र को सत्यापित करने से CURL को रोकने के लिए FALSE। के खिलाफ सत्यापित करने के लिए वैकल्पिक प्रमाणपत्र CURLOPT_CAINFO विकल्प के साथ निर्दिष्ट किए जा सकते हैं या CURLOPT_CAPATH विकल्प के साथ एक प्रमाणपत्र निर्देशिका निर्दिष्ट की जा सकती है। CURLOPT_SSL_VERIFYHOST को TRUE या FALSE होने की आवश्यकता हो सकती है यदि CURLOPT_SSL_VERIFYPEER अक्षम है (यह 2 में चूक करता है)। CURLOPT_SSL_VERIFYHOST को 2 पर सेट करना (यह डिफ़ॉल्ट मान है) यह गारंटी देगा कि आपके द्वारा प्रस्तुत किए जा रहे प्रमाणपत्र में URN से मेल खाता एक सामान्य नाम है जिसे आप दूरस्थ संसाधन तक पहुंचने के लिए उपयोग कर रहे हैं। यह एक स्वस्थ जाँच है, लेकिन इससे आपके प्रोग्राम को राहत नहीं मिलने की गारंटी नहीं है।
'बीच में आदमी' दर्ज करें
आपके प्रोग्राम को इसके बजाय किसी अन्य सर्वर से बात करने में गुमराह किया जा सकता है। यह कई तंत्रों के माध्यम से प्राप्त किया जा सकता है, जैसे कि डीएनएस या एआरपी विषाक्तता (यह एक और दिन के लिए एक कहानी है)। घुसपैठिया उसी 'कॉमन नाम' के साथ एक प्रमाण पत्र पर स्व-हस्ताक्षर भी कर सकता है जो आपका कार्यक्रम अपेक्षित है। संचार अभी भी एन्क्रिप्ट किया जाएगा, लेकिन आप अपने रहस्यों को दूर करने वाले को दे देंगे। इस तरह के हमले को 'मैन इन द मिडल' कहा जाता है।
'बीच में आदमी' को हराना
ठीक है, हमें यह सत्यापित करने की आवश्यकता है कि जो प्रमाण पत्र हमें प्रस्तुत किया जा रहा है वह वास्तविक के लिए अच्छा है। हम इसे एक ऐसे सर्टिफिकेट से तुलना करते हैं, जिसे हम उचित / भरोसेमंद मानते हैं।
यदि दूरस्थ संसाधन को मुख्य CA के Verisign, GeoTrust et al जैसे किसी प्रमाणपत्र द्वारा जारी किया गया है, तो आप मोज़िला के CA प्रमाणपत्र बंडल से सुरक्षित रूप से तुलना कर सकते हैं, जिसे आप http://curl.haxx.se/docs-caextract से प्राप्त कर सकते हैं
.html
फ़ाइल cacert.pem
को अपने सर्वर में कहीं सहेजें और अपनी स्क्रिप्ट में निम्न विकल्प सेट करें।
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");