Python Programming

Python में SSL CERTIFICATE_VERIFY_FAILED त्रुटियों का निवारण

Spread the love

इंटरनेट पर सुरक्षित संचार मुख्य रूप से सिक्योर सॉकेट्स लेयर (SSL) प्रमाणपत्रों पर निर्भर करता है। जब आपके Python कोड में “SSL CERTIFICATE_VERIFY_FAILED” त्रुटि आती है, तो यह सर्वर के SSL प्रमाणपत्र की प्रामाणिकता को सत्यापित करने में विफलता का संकेत देता है। यह व्यापक मार्गदर्शिका इस त्रुटि के कारणों का विश्लेषण करेगी और व्यावहारिक समाधान प्रदान करेगी।

विषय-सूची

SSL प्रमाणपत्रों को समझना

एक SSL प्रमाणपत्र एक डिजिटल क्रेडेंशियल है जो किसी वेबसाइट की पहचान को प्रमाणित करता है, जिससे सुरक्षित HTTPS संचार सक्षम होता है। यह क्लाइंट (आपका Python प्रोग्राम) और सर्वर के बीच आदान-प्रदान किए गए डेटा को एन्क्रिप्ट करने के लिए सार्वजनिक कुंजी क्रिप्टोग्राफी का उपयोग करता है। एक HTTPS कनेक्शन के दौरान, आपका Python कोड (या ब्राउज़र) सर्वर के प्रमाणपत्र की वैधता, जारीकर्ता और निरसन स्थिति की जाँच करके उसकी पुष्टि करता है।

SSL CERTIFICATE_VERIFY_FAILED के मूल कारण

“SSL CERTIFICATE_VERIFY_FAILED” त्रुटि तब सामने आती है जब यह सत्यापन प्रक्रिया विफल हो जाती है। कई कारक योगदान कर सकते हैं:

  • स्व-हस्ताक्षरित प्रमाणपत्र: वेबसाइट के स्वामी द्वारा जारी किए गए प्रमाणपत्र, किसी विश्वसनीय प्रमाणपत्र प्राधिकरण (CA) द्वारा नहीं, अक्सर चिह्नित किए जाते हैं। Python केवल प्रसिद्ध CAs पर भरोसा करने के लिए डिफ़ॉल्ट है।
  • समाप्त प्रमाणपत्र: एक समाप्त प्रमाणपत्र कनेक्शन को अविश्वसनीय बना देता है।
  • सिस्टम क्लॉक की अशुद्धियाँ: प्रमाणपत्र की वैधता समय के प्रति संवेदनशील है; एक गलत सिस्टम क्लॉक सत्यापन विफलता का कारण बन सकता है।
  • रद्द किए गए प्रमाणपत्र: एक समझौता किया गया प्रमाणपत्र इसके जारीकर्ता द्वारा रद्द किया जा सकता है।
  • होस्टनाम बेमेल: प्रमाणपत्र का सामान्य नाम (CN) या विषय वैकल्पिक नाम (SANs) उस होस्टनाम से मेल खाना चाहिए जिससे आप कनेक्ट हो रहे हैं।
  • CA श्रृंखला समस्याएँ: विश्वास की प्रमाणपत्र प्राधिकरण श्रृंखला के भीतर समस्याएँ सत्यापन को तोड़ देंगी। प्रमाणपत्र को एक विश्वसनीय रूट CA तक विश्वास की एक सत्यापन योग्य श्रृंखला की आवश्यकता होती है।
  • नेटवर्क कनेक्टिविटी समस्याएँ: नेटवर्क रुकावटें प्रमाणपत्र सत्यापन में बाधा डाल सकती हैं।

प्रभावी समस्या निवारण रणनीतियाँ

समाधान अंतर्निहित कारण पर निर्भर करता है। यहाँ एक संरचित दृष्टिकोण दिया गया है:

  1. प्रमाणपत्र सत्यापित करें (सावधानी से): स्व-हस्ताक्षरित या अविश्वसनीय प्रमाणपत्रों के लिए, आप अस्थायी रूप से सत्यापन अक्षम कर सकते हैं (उत्पादन के लिए दृढ़ता से हतोत्साहित):
    
    import ssl
    import urllib.request
    
    context = ssl._create_unverified_context()
    response = urllib.request.urlopen('https://your-website.com', context=context)
    # ... प्रतिक्रिया संसाधित करें ...
      
  2. प्रमाणपत्र को अपने विश्वसनीय संग्रह में जोड़ें: स्व-हस्ताक्षरित प्रमाणपत्रों के लिए, इसे अपने सिस्टम के विश्वसनीय प्रमाणपत्र संग्रह में जोड़ें। यह प्रक्रिया ऑपरेटिंग सिस्टम के अनुसार भिन्न होती है।
  3. सिस्टम समय को सही करें: सुनिश्चित करें कि आपका सिस्टम क्लॉक सटीक है।
  4. होस्टनाम सत्यापित करें: दोबारा जांच करें कि आपके कोड में होस्टनाम प्रमाणपत्र के CN या SANs से मेल खाता है।
  5. requests लाइब्रेरी का उपयोग करें (अनुशंसित): requests लाइब्रेरी मजबूत SSL हैंडलिंग प्रदान करती है। verify=True (डिफ़ॉल्ट) उचित सत्यापन सक्षम करता है। कस्टम CA बंडलों के लिए:
    
    import requests
    
    try:
        response = requests.get('https://your-website.com', verify=True) 
        response.raise_for_status() # खराब प्रतिक्रियाओं (4xx या 5xx) के लिए HTTPError उठाएँ
        # ... प्रतिक्रिया संसाधित करें ...
    except requests.exceptions.RequestException as e:
        print(f"एक त्रुटि हुई: {e}")
    
    #एक कस्टम CA बंडल का उपयोग करना:
    response = requests.get('https://your-website.com', verify='/path/to/your/ca_bundle.pem')
      
  6. नेटवर्क कनेक्टिविटी जांचें: नेटवर्क समस्याओं को दूर करें।

सुरक्षित कनेक्शन के लिए सर्वोत्तम अभ्यास

विश्वसनीय CAs से मान्य प्रमाणपत्रों का उपयोग करने को प्राथमिकता दें। उचित सत्यापन (verify=True) के साथ requests लाइब्रेरी का उपयोग करें। नियंत्रित परीक्षण के अलावा सत्यापन को अक्षम करने से बचें। इष्टतम सुरक्षा के लिए नियमित रूप से अपने सिस्टम के प्रमाणपत्रों और घड़ी को अपडेट करें।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *