urllib এবং "SSL: CERTIFICATE_VERIFY_FAILED" ত্রুটি


279

আমি নিম্নলিখিত ত্রুটি পাচ্ছি:

Exception in thread Thread-3:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in        __bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in  run
self.__target(*self.__args, **self.__kwargs)
File "/Users/Matthew/Desktop/Skypebot 2.0/bot.py", line 271, in process
info = urllib2.urlopen(req).read()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1240, in https_open
context=self._context)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>

এই কোডটি এই ত্রুটি ঘটাচ্ছে:

if input.startswith("!web"):
    input = input.replace("!web ", "")      
    url = "https://domainsearch.p.mashape.com/index.php?name=" + input
    req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXX' })
    info = urllib2.urlopen(req).read()
    Message.Chat.SendMessage ("" + info)

আমি যে এপিআই ব্যবহার করছি তার জন্য আমার এইচটিটিপিএস ব্যবহার করা দরকার। আমি কীভাবে এটি যাচাইকরণ বাইপাস করতে পারি?


2
ইউআরএল-তে কোনও ভুল নেই এবং সাধারণ বিশ্বস্ত শংসাপত্রগুলির সাথে এটি সফলভাবে যাচাই করা যেতে পারে। সুতরাং আপনার শংসাপত্রের বৈধতাটি বাইপাস করার চেষ্টা করা উচিত নয়, এটি ঠিক করার জন্য। আপনি অজগরটির কোন সংস্করণ ব্যবহার করছেন?
স্টিফেন অলরিচ

এটি স্ট্যাকওভারফ্লো . com/a/27826829/3081018 সম্পর্কিত হতে পারে । সার্ভার একাধিক বিশ্বাসের পথের সাথে একই ধরণের শংসাপত্র শৃঙ্খলা ব্যবহার করে। যাচাইকরণের জন্য আপনাকে কোন ক্যাফাইল ব্যবহার করতে হবে তা দেখুন।
স্টিফেন আলরিচ

7
এই ত্রুটিটি
পাইসথন

2
এটি পরিস্থিতি ব্যাখ্যা করে। অ্যাক্সেস.ডাহাট.আর্টিকেলস
চার্লি বার্নস

4
"আমি কীভাবে এটি যাচাইকরণ বাইপাস করতে পারি?" ভুল প্রশ্ন। আপনার সম্ভবত জিজ্ঞাসা করা উচিত যে ডোমেন দ্বারা সরবরাহিত শংসাপত্র কীভাবে বৈধ করা যায়।
jww

উত্তর:


296

যদি আপনি কেবল যাচাইকরণ বাইপাস করতে চান তবে আপনি একটি নতুন এসএসএল কনটেক্সট তৈরি করতে পারেন । ডিফল্টরূপে সদ্য নির্মিত প্রসঙ্গগুলি CERT_NONE ব্যবহার করে

বিভাগ 17.3.7.2.1 হিসাবে বর্ণিত হিসাবে এটি সাবধান

এসএসএল কনটেক্সট কনস্ট্রাক্টরকে সরাসরি কল করার সময়, CERT_NONE ডিফল্ট। যেহেতু এটি অন্য পিয়ারকে প্রমাণীকরণ করে না তাই এটি অনিরাপদ হতে পারে বিশেষত ক্লায়েন্ট মোডে যেখানে আপনি বেশিরভাগ সময় আপনি যে সার্ভারের সাথে কথা বলছেন তার সত্যতা নিশ্চিত করতে চান। অতএব, ক্লায়েন্ট মোডে থাকাকালীন CERT_REQUIRED ব্যবহার করার জন্য এটি সুপারিশ করা হয়।

তবে আপনি যদি আরও কিছু কারণে নিম্নলিখিত কাজটি করতে এখনই এটি কাজ করতে চান তবে আপনাকেও এটি করতে হবে import ssl:

input = input.replace("!web ", "")      
url = "https://domainsearch.p.mashape.com/index.php?name=" + input
req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' })
gcontext = ssl.SSLContext()  # Only for gangstars
info = urllib2.urlopen(req, context=gcontext).read()
Message.Chat.SendMessage ("" + info)

এটি আপনার সমস্যার সমাধান হওয়া উচিত তবে আপনি সত্যিই কোনও সমস্যার সমাধান করছেন না, তবে আপনি এটি দেখতে পাবেন না [SSL: CERTIFICATE_VERIFY_FAILED] কারণ আপনি এখন শংসাপত্রটি যাচাই করছেন না!

উপরোক্ত বিষয়গুলি যুক্ত করতে, আপনি কেন এই সমস্যাগুলি দেখছেন সে সম্পর্কে যদি আপনি আরও জানতে চান তবে আপনি পিইপি 476 দেখুন

এই পিইপি এক্স509 শংসাপত্রের স্বাক্ষরগুলির যাচাইকরণ সক্ষম করার পাশাপাশি পাইথনের এইচটিটিপি ক্লায়েন্টদের প্রতি হোস্টের ভিত্তিতে অপ্ট-আউট সাপেক্ষে হোস্টনাম যাচাইকরণের প্রস্তাব দেয়। এই পরিবর্তনটি পাইথন ২.7, পাইথন ৩.৪, এবং পাইথন ৩.৫ এ প্রয়োগ করা হবে।

এখানে একটি পরামর্শ দেওয়া বেছে নেওয়া হয়েছে যা আমার পরামর্শের সাথে উপরে নয়:

import ssl

# This restores the same behavior as before.
context = ssl._create_unverified_context()
urllib.urlopen("https://no-valid-cert", context=context)

এটি বানরপ্যাচিংয়ের মাধ্যমে একটি উচ্চ নিরুৎসাহিত বিকল্পের বৈশিষ্ট্যও দেখায় যা আপনি প্রায়শই অজগরে দেখেন না:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

যা একটি যাচাই করা প্রসঙ্গ তৈরি করতে ফাংশন সহ প্রসঙ্গ তৈরির জন্য ডিফল্ট ফাংশনটিকে ওভাররাইড করে।

পিইপিতে বর্ণিত হিসাবে এটি দয়া করে নোট করুন:

এই নির্দেশিকাটির উদ্দেশ্য মূলত সিস্টেম প্রশাসকরা যারা পাইথনের নতুন সংস্করণ গ্রহণ করতে চান যা উত্তরাধিকারী পরিবেশে এই পিইপি প্রয়োগ করে যারা এইচটিটিপিএস সংযোগে শংসাপত্র যাচাইকরণ সমর্থন করে না। উদাহরণস্বরূপ, কোনও প্রশাসক পাইথনের জন্য তাদের স্ট্যান্ডার্ড অপারেটিং এনভায়রনমেন্টে সাইটেকাস্টমাইজ.পিতে উপরের বানকিপ্যাচ যুক্ত করে অপ্ট আউট করতে পারেন। অ্যাপ্লিকেশন এবং গ্রন্থাগারগুলি এই পরিবর্তন প্রক্রিয়াটিকে প্রশস্ত করতে হবে না (সম্ভবত কোনও সিস্টেম প্রশাসকের নিয়ন্ত্রিত কনফিগারেশন সেটিংসের প্রতিক্রিয়া ব্যতীত)।

সফ্টওয়্যারটিতে শংসাপত্রগুলি বৈধকরণ কেন খারাপ নয় সে সম্পর্কিত কোনও কাগজ পড়তে চাইলে আপনি এটি এখানে খুঁজে পেতে পারেন !


1
সুতরাং যদি এই ত্রুটিটি আমাকে ব্যবহার থেকে বিরত রাখে তবে আমি setup.py uploadকীভাবে এটি ঠিক করতে পারি?
পাইকথন

5
ssl._create_default_https_context = ssl._create_unverified_context এটি আমার জন্য কাজ করেছে শেষের কাছে নোলেকডের উল্লিখিত হিসাবে as যেহেতু আমাদের এইচপি প্রিন্টারের একটি অন্তঃসত্ত্বা সাইট ... খাঁটি স্ক্র্যাপিংয়ের জন্য খালি ব্যবহার করা হয়েছে ... এই পদ্ধতিটি ব্যবহার করে আমাদের কোনও সমস্যা নেই।
ihightower 26'15

আপনার প্রথম পদ্ধতিটি সর্বনিম্ন পছন্দসই - বাইপাসের বৈধতা। প্রকৃতপক্ষে শংসাপত্রটি যাচাই করে এমনটি কেন প্রথমে তালিকাভুক্ত নয়?
jww

1
আপনার যদি ওপেনএসএসএলের একটি পুরানো সংস্করণ থাকে তবে এটিও ঘটতে পারে। সুতরাং আমার জন্য যা কাজ করা হয়েছিল তা হল সর্বশেষ সংস্করণে certifi আপডেট করা এবং বাক্সগুলিতে ওপেনসেল আপডেট করা।
myusuf3

1
context আমার যা দরকার তা হল
প্রেয়াগগপড

382

এটি আপনার নির্দিষ্ট সমস্যার সমাধান নয়, তবে আমি এটি এখানে রাখছি কারণ এই থ্রেডটি "এসএসএল: CERTIFICATE_VERIFY_FAILED" এর শীর্ষ গুগলের ফলাফল এবং এটি আমাকে বুনো হাঁসের তাড়াতে পরিচালিত করে।

আপনি যদি ওএসএক্সে পাইথন ৩.6 ইনস্টল করে থাকেন এবং কোনও https: // সাইটের সাথে সংযোগ দেওয়ার চেষ্টা করার সময় "এসএসএল: CERTIFICATE_VERIFY_FAILED" ত্রুটি পেয়ে থাকেন তবে এটি সম্ভবত কারণ OSX- তে পাইথন 3.6 এর কোনও শংসাপত্র নেই এবং কোনও এসএসএলকে বৈধতা দিতে পারে না সংযোগ। এটি ওএসএক্সে 3.6 এর পরিবর্তনের, এবং একটি ইনস্টল-পরবর্তী পদক্ষেপের প্রয়োজন, যা certifiশংসাপত্রগুলির প্যাকেজ ইনস্টল করে । এটি ReadMe এ নথিভুক্ত করা হয়েছে, যা আপনার খুঁজে পাওয়া উচিত/Applications/Python\ 3.6/ReadMe.rtf

ReadMe আপনাকে এই পোস্ট-ইনস্টল স্ক্রিপ্টটি চালাবে, যা কেবল ইনস্টল করে certifi:/Applications/Python\ 3.6/Install\ Certificates.command

প্রকাশের নোটগুলিতে আরও কিছু তথ্য রয়েছে: https://www.python.org/downloads/re कृपया/python- 360/


105
সরাসরি চালান / অ্যাপ্লিকেশন / পাইথন \ 3.6 / ইনস্টল করুন \ সার্টিফিকেট.কম এবং OSX এ আমার সমস্যা সমাধান করুন। ধন্যবাদ।
muyong

2
আমি ওএস এক্স এল ক্যাপিটান 10.11.6, পাইথন 3.6.0 ব্যবহার করছি এবং এই সমাধানটি পুরোপুরি কার্যকর হয়েছিল।
y2knoproblem

2
আমি ম্যাকস সিয়েরা 10.12.5, পাইথন 3.6.1 ব্যবহার করছি এবং এই সমাধানটি পুরোপুরি কার্যকর হয়েছিল।
জেমস

4
এটি /Applications/Python\ 3.7/Install\ Certificates.command সরাসরি এটি চালানোর জন্য এটি ঠিক করেছে terminal! আপনাকে ধন্যবাদ ক্রেইগগ্লেনি এবং @ মাইওং আমি out-of-the-box-thinkingএখানে এটি রাখার জন্য প্রশংসা করি !
জয়রিজ্জো

6
ম্যাকোস মোজভেভে পাইথন ৩.7 রয়েছে: এটি এখানে কাজ করে না। আমি ইনস্টল সার্টিফিকেট আনইনস্টল / পুনরায় ইনস্টল / চালিয়েছি, পুনরায় বুট করা ইত্যাদি ... আমার পক্ষে কাজ করে না
টমাস

71

ক্রেগ গ্লেনির উত্তরটি প্রসারিত করতে:

ম্যাকওস সিয়েরায় পাইথন ৩.6.১ এ

বাশ টার্মিনালে এটি প্রবেশ করানো সমস্যার সমাধান করেছে:

pip install certifi
/Applications/Python\ 3.6/Install\ Certificates.command

3
sudo /Applications/Python\ 3.6/Install\ Certificates.commandঅনুমতি অস্বীকার করা হলে চেষ্টা করুন ।
কিংকংকোডার

এটি আসলে পাইথন 3.6-তে সমস্যাটি স্থির করে না। -1
হাইপারিয়াম

1
যদি কমান্ড লাইনটি আপনাকে ফাঁস করে দেয় (সম্ভবত আপনি এখানে না থেকে থাকেন তবে ওহে), আপনি পাইথন ইনস্টলমেন্টে তৈরি করা অ্যাপ্লিকেশন ফোল্ডার (বা অন্যান্য OS এর সমতুল্য) খুঁজে পেতে পারেন, তারপরে ডাবল ক্লিক করে স্ক্রিপ্টটি খুলুন। আপনি যে পাইথনটি ইনস্টল করেছেন তার ফোল্ডারের নির্দিষ্ট নাম নির্ভর করে।
এরদস-বেকন

পাইথন ৩.7.৩ এর জন্য আকর্ষণীয় কাজ করেছে। ধন্যবাদ.
klbytec

ধন্যবাদ। আমি আক্ষরিকভাবে 100 এর সমাধান অনুসন্ধান করেছি এবং আপনার কাজ করেছে।
nnd

43

উইন্ডোজে পাইথন সিস্টেম শংসাপত্রের দিকে তাকাবে না, এটি তার নিজস্ব অবস্থিতটি ব্যবহার করে ?\lib\site-packages\certifi\cacert.pem

আপনার সমস্যার সমাধান:

  1. ডোমেনের বৈধতা শংসাপত্রটি * .crt বা * পেম ফাইল হিসাবে ডাউনলোড করুন
  2. সম্পাদকে ফাইলটি খুলুন এবং ক্লিপবোর্ডে এটির সামগ্রী অনুলিপি করুন
  3. আপনার cacert.pemঅবস্থান সন্ধান করুন:from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
  4. cacert.pemফাইলটি সম্পাদনা করুন এবং ফাইলের শেষে আপনার ডোমেনের বৈধতা শংসাপত্রটি আটকে দিন।
  5. ফাইলটি সংরক্ষণ করুন এবং অনুরোধগুলি উপভোগ করুন!

6
lib\site-packages\certifi\cacert.pemপাইথন ২.7.১০-তে বিদ্যমান নেই। এবং প্রশ্নটি urllib2নয়requests
কেভিন স্মিথ

2
এখনও অবধি সেরা সমাধান, টুইটার এপিআই ডিজিকার্ট শংসাপত্র ব্যবহার করে যা আমার অজগরটির ক্যাজার্ট.পিএম ফাইলের মধ্যে নেই। আমি সেখানে এবং VOILA যোগ!
digz6666

2
ডেবিয়ান উপর কাজ। রেকর্ড জন্য, আমার সিস্টেমে ফাইল পাথ ছিল: /usr/local/lib/python2.7/dist-packages/certifi-2015.09.06.2-py2.7.egg/certifi/cacert.pem। ধন্যবাদ!
ofavre

দুর্ভাগ্যক্রমে পাইথন অনুরোধগুলি কোনও অপারেটিং সিস্টেমের সিএ ট্রাস্ট স্টোর ব্যবহার করে না। github.com/requests/requests/issues/2966 । আপনাকে REQUESTS_CA_BUNDLE github.com/bloomreach/s4cmd/issues/111#issuecomment-406839514 সেট করতে হবে ।
জামশিদ

গুগল এবং টুইটার এপিআই এবং সাধারণভাবে অনুরোধের মডিউল সহ উইন্ডোজ 10, পাইথন 3.6 এ কাজ করে।
ব্রিটেনব

36

ম্যাক ওএস এক্স এর জন্য আমার সমাধান:

১) অফিসিয়াল পাইথন ভাষার ওয়েবসাইট https://www.python.org/downloads/ থেকে ডাউনলোড করা নেটিভ অ্যাপ্লিকেশন পাইথন ইনস্টলার ব্যবহার করে পাইথন ৩..5.৫ এ আপগ্রেড করুন

আমি দেখেছি যে এই ইনস্টলারটি নতুন পাইথনের জন্য লিঙ্কগুলি এবং সিমলিংকগুলি হোমব্রিউয়ের চেয়ে অনেক ভাল আপডেট করার বিষয়ে যত্ন নিচ্ছে।

2) রিফ্রেশ পাইথন ৩.6 ডিরেক্টরিতে থাকা "./Install प्रमाणपत्रপত্র.কম" ব্যবহার করে একটি নতুন শংসাপত্র ইনস্টল করুন

> cd "/Applications/Python 3.6/"
> sudo "./Install Certificates.command"

ম্যাক ওএস এক্সে মোহন এর মতো কাজ করেছেন
মনু ম্যাথেজ

31

আপনি আপনার পরিবেশের ভেরিয়েবলগুলিতে এটি যুক্ত করার চেষ্টা করতে পারেন:

PYTHONHTTPSVERIFY=0 

নোট করুন যে এটি সমস্ত এইচটিটিপি যাচাইকরণ অক্ষম করবে তাই এটি স্লেজহ্যামার পদ্ধতির কিছুটা হলেও, যদি যাচাইকরণের প্রয়োজন না হয় তবে এটি কার্যকর সমাধান হতে পারে।


17
আমার সন্দেহ হয় যে সমস্ত পাইথনের সমস্ত HTTP যাচাইকরণ অক্ষম করা যাচাইকরণের একটি ত্রুটি মোকাবেলা করার জন্য কিছুটা অতিরিক্ত excessive এমন অনেকগুলি কেস রয়েছে যেখানে ডিফল্টরূপে কেউ যাচাইকরণ চান।
ট্রেভরকির্কবি

উইন্ডোজ সার্ভারে অজগর 2.7.13 এ আমার জন্য কাজ করেছেন ked আমার সাধারণত উইন্ডোজ সার্ভারে পাইথন ইনস্টল থাকে না তবে ভিডিএসে নেক্সাস 1000 ভি মাইগ্রেশন সহ ভিসেন্টার আপগ্রেডের জন্য এটি প্রয়োজন এবং এটি আপাতত স্ব-স্বাক্ষরিত ভিসেন্টার সার্টের সাথে সমস্যাটি সমাধান করে (ভিএমসিএ এবং বৈধ শংসাপত্রগুলি ব্যবহার করবে) আপগ্রেড পরিবেশ)। পাইথন রিকোয়েস্ট প্যাকেজে ক্যাসর্ট.পিএম সম্পাদনা করে শংসাপত্রটি গ্রহণ করার ভাগ্য আমার ছিল না
ক্রিস্টোফার থর্জুসেন

3
এছাড়াও, আমি স্ক্রিপ্টটি চালানোর আগে কমান্ড লাইন উইন্ডোতে ভেরিয়েবলটি সরাসরি সেট করেছিলাম, সুতরাং এটি @ চেক-আপ-বা-অন্যরকম ভয় পাচ্ছে এমন সমস্ত চেক অক্ষম করবে না, যা আমিও সুপারিশ করব না।
ক্রিস্টোফার থর্জুসেন

এটি আমার ব্যবহারের ক্ষেত্রে উপযুক্ত: টেস্টিং। আমি প্রযোজনায় এটি কখনই করব না, তবে পরীক্ষাগুলি চালানোর জন্য যার এসএসএলের সাথে কোনও সম্পর্ক নেই, এটি একটি দুর্দান্ত বিকল্প।
সোরিন

ধন্যবাদ, এই সমাধানটি আমার জন্য এটি করেছে: # os.en वातावरण আমদানি করুন ["PYTHONHTTPSVERIFY"] = "0"
mbello

28

আমি পাইথন ৩.৪, ৩.৩, এবং ৩.6 এ ব্যবহার urllib.request.urlopenকরার পরেও আমার অনুরূপ সমস্যা ছিল । (এটি urllib2পাইথন 2 এর urllib2ডকুমেন্টেশন পৃষ্ঠার শিরোনামে প্রতি পাইথন 3 এর সমতুল্য একটি অংশ ))

আমার সমাধানটি pip install certifiইনস্টল করা ছিল certifi, যা রয়েছে:

... টিএলএস হোস্টগুলির পরিচয় যাচাই করার সময় এসএসএল শংসাপত্রগুলির বিশ্বাসযোগ্যতা যাচাইয়ের জন্য রুট শংসাপত্রগুলির একটি সাবধানতার সাথে সংশ্লেষিত সংগ্রহ।

তারপরে, আমার কোডটিতে যেখানে আমার আগে সবে ছিল:

import urllib.request as urlrq

resp = urlrq.urlopen('https://example.com/bar/baz.html')

আমি এটিকে সংশোধন করেছি:

import urllib.request as urlrq
import certifi

resp = urlrq.urlopen('https://example.com/bar/baz.html', cafile=certifi.where())

আমি যদি urllib2.urlopenডকুমেন্টেশনটি সঠিকভাবে পড়ে থাকি তবে এর একটি cafileযুক্তিও রয়েছে। সুতরাং urllib2.urlopen([...], certifi.where())পাইথন ২. for এর জন্যও কাজ করতে পারে।


আপডেট (2020-01-01): পাইথন 3.6 পর্যন্ত আর্গুমেন্ট প্রাপ্ত করতে অবচিত হয়েছে , সঙ্গে যুক্তি অনুমিত পরিবর্তে নিদিষ্ট করা হবে। আমি নিম্নলিখিতটি 3.5 এর মধ্যে 3.8 এর মধ্যে সমানভাবে ভাল কাজ করতে দেখতে পেয়েছি:cafileurlopencontext

import urllib.request as urlrq
import certifi
import ssl

resp = urlrq.urlopen('https://example.com/bar/baz.html', context=ssl.create_default_context(cafile=certifi.where()))

1
load_verify_locationsSSLContextউদাহরণটি পরিবর্তিত করে ফেরত দেয় Nonecontext=ssl.create_default_context(cafile=certifi.where())পরিবর্তে আপনার ব্যবহার করা উচিত । আরও তথ্যের জন্য sslডক্স দেখুন ।
অস্ট্রোকাচ

1
@ostrokach হু, আমি এরকম কিছু চেষ্টা করেছি, তবে আমার অবশ্যই ভুল sslফাংশনটি ব্যবহার করা উচিত । সম্পাদনা দেখুন; ঠিক আছে?
hBy2Py

13
import requests
requests.packages.urllib3.disable_warnings()

import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

এখান থেকে তোলা https://gist.github.com/michaelrice/a6794a017e349fc65d01


জেনকিন্স পরিবেশ, ব্যক্তিগত পরিবেশে এই সমাধানটি পরীক্ষা করে দেখেছে!
rapport89

2
এটি অত্যন্ত অনিরাপদ কারণ এটি সমস্ত শংসাপত্র যাচাইকরণকে বাইপাস করে, আপনার নিজের ঝুঁকিতে ব্যবহার করুন এবং যে কোনওটির ভালবাসার জন্য এটি উত্পাদন কোডে ব্যবহার করবেন না।
ড্রাগন 788

ধন্যবাদ। অবশেষে এটি কাজ করে। পাইথন 3.6 ম্যাক ওএসে / অ্যাপ্লিকেশনগুলির আওতায় ইনস্টল করা দরকার নেই। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
বিরানচি

আপনার কখনও কখনও এ জাতীয় বানকিপাচিং করা উচিত নয়। এটি অত্যন্ত বিপজ্জনক এবং কোডের সমস্ত প্রবাহকে প্রভাবিত করবে।
একিউম্যানাস

10

আমি যেমন একটি মন্তব্যে লিখেছি, এই সমস্যাটি সম্ভবত এই এসও উত্তরের সাথে সম্পর্কিত ।

সংক্ষেপে: শংসাপত্র যাচাই করার একাধিক উপায় রয়েছে। ওপেনএসএসএল দ্বারা ব্যবহৃত যাচাইকরণটি আপনার সিস্টেমে থাকা বিশ্বস্ত রুট শংসাপত্রগুলির সাথে সামঞ্জস্য নয়। ওপেনএসএসএল পাইথন ব্যবহার করে।

আপনি ভেরিসাইন ক্লাস 3 পাবলিক প্রাথমিক শংসাপত্র কর্তৃপক্ষের জন্য অনুপস্থিত শংসাপত্র পাওয়ার চেষ্টা করতে পারেন এবং তারপরে পাইথন ডকুমেন্টেশনcafile অনুযায়ী বিকল্পটি ব্যবহার করতে পারেন :

urllib2.urlopen(req, cafile="verisign.pem")

আপনাকে সাহায্য করতে পারি আমাকে Plz পাইথন এবং SSL বৈধতা এই প্রাসঙ্গিক সমস্যা সমাধানের লিংক
কোনটি

8

আমার একটি লিনাক্স মেশিনে আমার একই সমস্যা ছিল। নতুন শংসাপত্র তৈরি করা এবং শংসাপত্র ডিরেক্টরিতে নির্দেশ করে একটি পরিবেশের পরিবর্তনশীল রফতানি করা আমার জন্য এটি স্থির করে:

$ sudo update-ca-certificates --fresh
$ export SSL_CERT_DIR=/etc/ssl/certs

7

আমার আর একটি উত্তর যুক্ত করা দরকার কারণ ক্রেগ গ্লেনির মতো আমিও ওয়েব জুড়ে এই সমস্যার উল্লেখ করে অনেকগুলি পোস্টের কারণে বুনো হংসের পিছনে গিয়েছিলাম।

আমি ম্যাকপোর্টস ব্যবহার করছি এবং আমি মূলত যা পাইথন সমস্যা বলে মনে করেছি তা আসলে ম্যাকপোর্টস সমস্যা ছিল: এটি ওপেনসেল ইনস্টল করে কোনও রুট শংসাপত্র ইনস্টল করে না। সমাধানটি হ'ল port install curl-ca-bundle, এই ব্লগ পোস্টে উল্লিখিত হিসাবে ।


5

আমি এটি এখানে খুঁজে পেয়েছি

আমি এই সমাধানটি পেয়েছি, আপনার উত্স ফাইলের শুরুতে এই কোডটি সন্নিবেশ করান:

import ssl

try:
   _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

এই কোডটি যাচাইকরণটিকে পূর্বাবস্থায় ফিরিয়ে আনবে যাতে এসএসএল শংসাপত্রটি যাচাই না হয়।


এই ভিডিওটি দেখুন এটি আমাকে এসএসএল কী তা বুঝতে অনেকটাই সহায়তা করেছিল। ভিডিও ইউআরএল: youtu.be/dsuVPxuU_hc
গণেশ চৌধারী সদনালা

4

ফেডোরার সেন্টোস 6/7- তে পাইথন ৩.৪++ এর জন্য কেবল এইভাবে বিশ্বস্ত সিএ ইনস্টল করুন:

  1. CA.crt এ অনুলিপি করুন /etc/pki/ca-trust/source/anchors/
  2. update-ca-trust force-enable
  3. update-ca-trust extract

2
বোকা প্রশ্ন হতে পারে, কিন্তু CA.crt কী এবং আমি এটি কোথায় খুঁজে পাব?
ইকবাল

4

অ্যানাকোন্ডার জন্য সমাধান

একটি প্রক্সি সহ ম্যাকওএসে আমার সেটআপটি অ্যানাকোন্ডা পাইথন ৩.7। পথগুলি আলাদা।

  • আপনি সঠিক শংসাপত্রের পথটি এভাবে পান :
import ssl
ssl.get_default_verify_paths()

যা আমার সিস্টেমে তৈরি হয়েছিল

Out[35]: DefaultVerifyPaths(cafile='/miniconda3/ssl/cert.pem', capath=None,
 openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/miniconda3/ssl/cert.pem',
 openssl_capath_env='SSL_CERT_DIR', openssl_capath='/miniconda3/ssl/certs')

একবার আপনি যখন শংসাপত্রটি জানতে পারবেন, তারপরে আপনি সেই ফাইলটির শেষে প্রক্সি দ্বারা ব্যবহৃত শংসাপত্রটি সম্মতি জানাতে পারেন।

আমি ইতিমধ্যে চালিয়ে আমার প্রক্সিটির সাথে কাজ করার জন্য কনডা সেটআপ করেছি:

conda config --set ssl_verify <pathToYourFile>.crt

আপনার সার্টটি কোথায় রয়েছে তা যদি মনে না থাকে তবে আপনি এটি এতে খুঁজে পেতে পারেন ~/.condarc:

ssl_verify: <pathToYourFile>.crt

এখন কনক্যাটেনেট শেষে যে ফাইল /miniconda3/ssl/cert.pem এবং অনুরোধ কাজ করা উচিত এবং বিশেষ করেsklearn.datasets এবং অনুরূপ সরঞ্জাম কাজ করা উচিত।

আরও গুহা

অন্যান্য সমাধানগুলি কাজ করে না কারণ অ্যানাকোন্ডা সেটআপটি কিছুটা পৃথক:

  • পথটি Applications/Python\ 3.Xসহজভাবে বিদ্যমান নেই।

  • নীচের কমান্ডগুলির দ্বারা প্রদত্ত পথটি হ'ল রাস্তার পথ

from requests.utils import DEFAULT_CA_BUNDLE_PATH
DEFAULT_CA_BUNDLE_PATH

3

আমি আমার মাথাটি অর্ধ-লজ্জায় ঝুলিয়েছি, যেমন আমার একই সমস্যা ছিল, আমার ক্ষেত্রে ছাড়া, আমি যে URL টি মারছিলাম তা বৈধ ছিল, শংসাপত্রটি বৈধ ছিল। যা বৈধ ছিল না তা ছিল ওয়েবে আমার সংযোগ। আমি ব্রাউজারে প্রক্সি বিশদ যুক্ত করতে ব্যর্থ হয়েছি (এই ক্ষেত্রে আইই)। এটি যাচাইকরণ প্রক্রিয়াটি সঠিকভাবে হওয়া থেকে থামিয়েছে।
প্রক্সি বিশদগুলিতে যুক্ত হয়েছে এবং আমার অজগরটি তখন খুব খুশি হয়েছিল।


1
কোনও কিছু ভুলে যাওয়ার পরে এবং তা খুঁজে বের করার জন্য এবং ভাগ করে নেওয়ার জন্য লজ্জায় আপনার মাথা ঝুলিয়ে দেবেন না, কেউ হয়তো এটি দরকারী বলে মনে করতে পারেন। যদিও আইই ব্যবহার করছে ... লজ্জাজনক: পি
দাভোস

3

পাইথন ২.7.১২ (ডিফল্ট, জুলাই 29, 2016, 15:26:22) উল্লিখিত সমস্যাটি স্থির করেছে। এই তথ্য অন্য কাউকে সাহায্য করতে পারে।


3
আমি এটি ম্যাকের উপর 2.7.12 তে মুখোমুখি হয়েছিলাম, urllib2 লাইব্রেরি ব্যবহার করে, রিকুয়েটস লাইব্রেরি ব্যবহার করা ভাল মনে হলেও
মারকাদিয়ান

@marcadian ইনস্টল এবং ব্যবহার certifi, যা দৃশ্যত দ্বারা অনুষ্ঠিত সার্টিফিকেট গেরো হয় requests, 3.6 থেকে পাইথন 3.4 তে আমার জন্য সমস্যা সংশোধন
hBy2Py

3

আমি অবাক হয়েছি এই সমস্ত নির্দেশনা আমার সমস্যার সমাধান করেনি। তবুও, ডায়াগনস্টিকটি সঠিক (বিটিডাব্লু, আমি ম্যাক এবং পাইথন ৩..6.১ ব্যবহার করছি)। সুতরাং, সঠিক অংশটি সংক্ষেপে বলা:

  • ম্যাকে, অ্যাপল ওপেনএসএসএল বাদ দিচ্ছে
  • পাইথন এখন এটি সিএ রুট শংসাপত্রের নিজস্ব সেট ব্যবহার করে
  • বাইনারি পাইথন ইনস্টলেশন সিএ রুট শংসাপত্র পাইথনের প্রয়োজনীয়তা ইনস্টল করার জন্য একটি স্ক্রিপ্ট সরবরাহ করেছিল ("/ অ্যাপ্লিকেশনস / পাইথন 3.6 / সার্টিফিকেটসটাম্যান্ড ইনস্টল করুন")
  • বিশদ জন্য "/ অ্যাপ্লিকেশনস / পাইথন 3.6 / ReadMe.rtf" পড়ুন

আমার জন্য, স্ক্রিপ্টটি কাজ করে না, এবং cer সমস্ত শংসাপত্র এবং ওপেনসেল ইনস্টলেশনও ঠিক করতে ব্যর্থ হয়েছিল। আমার একাধিক পাইথন 2 এবং 3 টি ইনস্টলেশন এবং সেইসাথে অনেকগুলি ভার্চুয়ালেনভ কারণ সম্ভবত। শেষে, আমার হাতে এটি ঠিক করা দরকার।

pip install certifi   # for your virtualenv
mkdir -p /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl
cp -a <your virtualenv>/site-package/certifi/cacert.pem \
  /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/cert.pem

যদি তা এখনও ব্যর্থ হয়। তারপরে ওপেনএসএসএল পুনরায় ইনস্টল করুন।

port install openssl

2

আপনার মত আমিও আমার পুরানো আইম্যাক (ওএস এক্স 10.6.8) তে পাইথন ২.7 ব্যবহার করছি, আমিও urlib2.urlopen ব্যবহার করে সমস্যার মুখোমুখি হয়েছি:

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]

আমার প্রোগ্রামগুলি এসএসএল শংসাপত্রের সমস্যা ছাড়াই দুর্দান্ত চলছিল এবং তাত্পর্যপূর্ণভাবে (ডাউডলোড প্রোগ্রামের পরে), তারা এই এসএসএল ত্রুটির সাথে ক্র্যাশ হয়েছিল।

সমস্যাটি ব্যবহৃত পাইথনের সংস্করণ ছিল:

  1. Https://www.python.org/downloads এবং পাইথন-2.7.9-macosx10.6.pkg নিয়ে কোনও সমস্যা নেই

  2. হোমব্রুউ সরঞ্জাম দ্বারা ইনস্টল করা একটিতে সমস্যা : "ব্রিউ ইনস্টল পাইথন", / ইউএসআর / স্থানীয় / বিনে অবস্থিত সংস্করণ।

একটি অধ্যায় বলা Certificate verification and OpenSSL [CHANGED for Python 2.7.9], এ /Applications/Python 2.7/ReadMe.rtfঅনেক বিস্তারিত সঙ্গে সমস্যা ব্যাখ্যা করে।

সুতরাং, পরীক্ষা করুন, ডাউনলোড করুন এবং অজগরটির সঠিক সংস্করণ আপনার PATH- এ রাখুন।


2

অ্যামাজন ইসি 2 তে পাইথন 2.7 সেন্টোস 7 সহ

আমি SSL_CERT_DIRআমার ca-bundleঅবস্থিত যা আমার দিকে নির্দেশ করতে env পরিবর্তনশীল সেট করতে হয়েছিল/etc/ssl/certs/ca-bundle.crt


আপনি উত্তর আমাকে আমার জন্য সঠিক ট্র্যাকের দিকে নিয়ে গেলেন। উবুন্টু, আমি সেট করতে ছিল SSL_CERT_DIRথেকে /etc/ssl/certs, এবং এছাড়াও নিশ্চিত করেছেন ca-certificatesপ্যাকেজ ইনস্টল এবং আপ টু ডেট ছিল।
নরম্যান ব্রেকো


1

চেষ্টা

পাইপ ইনস্টল --trusted- হোস্ট pypi.python.org প্যাকেজ নাম

এটা আমার জন্য কাজ করেছে।


1

একবার দেখুন

/ অ্যাপ্লিকেশন / পাইথন 3.6 / সার্টিফিকেটসটামন্ড ইনস্টল করুন

আপনি অ্যাপ্লিকেশনগুলিতেও যেতে পারেন উত্তরগুলি সার্টিফিকেটসটকমন্ডলে ক্লিক করুন


1

আমার ক্ষেত্রে আমি এই ত্রুটিটি পেয়েছিলাম কারণ requestsএবং urllib3সংস্করণগুলি বেমানান ছিল, ইনস্টলেশনের সময় নিম্নলিখিত ত্রুটিটি দিয়েছে:

ERROR: requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25 which is incompatible.
pip install 'urllib3<1.25' --force-reinstall

কৌতুকটি করেছেন


1

আরেকটি অ্যানাকোন্ডা সমাধান।আমি ম্যাকোজে আমার পাইথন ২.7 পরিবেশে CERTIFICATE_VERIFY_FAILED পাচ্ছিলাম। দেখা যাচ্ছে কনডার পথগুলি খারাপ ছিল:

বেস (3.7) পরিবেশ:

>>> import ssl
>>> ssl.get_default_verify_paths()
DefaultVerifyPaths(cafile='/usr/local/anaconda3/ssl/cert.pem', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/ssl/certs')

২.7 পরিবেশ (পথের অস্তিত্ব ছিল না!):

DefaultVerifyPaths(cafile='', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/envs/py27/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/envs/py27/ssl/certs')

ঠিক করা:

cd /usr/local/anaconda3/envs/py27/
mkdir ssl
cd ssl
ln -s ../../../ssl/cert.pem

1

এসএসএল: CERTIFICATE_VERIFY_FAILED ত্রুটিও ঘটতে পারে কারণ ca-certificatesলিনাক্সের প্যাকেজে একটি অন্তর্বর্তী শংসাপত্র অনুপস্থিত । উদাহরণস্বরূপ, আমার ক্ষেত্রে মধ্যবর্তী শংসাপত্র " ডিজিকার্ট এসএএএ 2 সিকিউর সার্ভার সিএ " ca-certificatesপ্যাকেজটিতে অনুপস্থিত ছিল যদিও ফায়ারফক্স ব্রাউজারটিতে এটি অন্তর্ভুক্ত ছিল। wgetএই ত্রুটির কারণে URL এ সরাসরি কমান্ড চালিয়ে কোন শংসাপত্রটি হারিয়ে যাচ্ছে তা আপনি আবিষ্কার করতে পারেন । তারপরে আপনি শংসাপত্র কর্তৃপক্ষের অফিসিয়াল ওয়েবসাইট (যেমন https://www.digicert.com/digicert-root-certificates.htm ) থেকে এই শংসাপত্রের জন্য সিআরটি ফাইলের সংশ্লিষ্ট লিঙ্কটি অনুসন্ধান করতে পারেন । এখন, আপনার ক্ষেত্রে অনুপস্থিত শংসাপত্রটি অন্তর্ভুক্ত করতে, আপনি তার পরিবর্তে আপনার সিআরটি ফাইল ডাউনলোড লিঙ্কটি ব্যবহার করে নীচের কমান্ডগুলি চালাতে পারেন:

wget https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt

mv DigiCertSHA2SecureServerCA.crt DigiCertSHA2SecureServerCA.der

openssl x509 -inform DER -outform PEM -in DigiCertSHA2SecureServerCA.der -out DigicertSHA2SecureServerCA.pem.crt

sudo mkdir /usr/share/ca-certificates/extra

sudo cp DigicertSHA2SecureServerCA.pem.crt /usr/share/ca-certificates/extra/

sudo dpkg-reconfigure ca-certificates

এর পরে আপনি নিজের wgetইউআরএলটির পাশাপাশি অজগর urllibপ্যাকেজটি ব্যবহার করে আবার পরীক্ষা করতে পারেন । আরও তথ্যের জন্য, এইগুলি দেখুন: https://bugs.launchpad.net/ubuntu/+source/ca-cerર્ટates /+ bug / 1795242


0

যদি আপনার ভিসেন্টার 6 এ থাকে তবে এর পরিবর্তে আপনার ওএসের নির্ভরযোগ্য সিএর তালিকাতে আপনার ভেনসেন্টারের ভিএমওয়্যার শংসাপত্র কর্তৃপক্ষের শংসাপত্রটি যুক্ত করা উচিত। আপনার সার্টটি ডাউনলোড করতে নিম্নলিখিত করুন

  1. আপনার ওয়েব ব্রাউজারটি খুলুন।
  2. Https: // এ নেভিগেট করুন
  3. নীচের ডানদিকে কোণায়, বিশ্বস্ত রুট সিএ ডাউনলোড লিঙ্কটি ক্লিক করুন

ফেডোরায়

  1. আনজিপ করুন এবং এক্সটেনশনটি .0 থেকে .cer এ পরিবর্তন করুন
  2. এটিকে / ইত্যাদি / পিকি / সিএ-বিশ্বাস / উত্স / অ্যাঙ্কার্স / এ অনুলিপি করুন
  3. আপডেট-সিএ-বিশ্বাস কমান্ড চালান।

লিঙ্ক:

  1. https://virtualizationreview.com/articles/2015/04/02/install-root-self-signed-certificate-vcenter-6.aspx?m=1
  2. http://forums.fedoraforum.org/showthread.php?t=293856

তিনি বলেছিলেন যে তিনি ওএস এক্স-এ আছেন,
ভিসেন্টার

0

nltk (আমার পাইথন 3 (3.6.2) ইতিমধ্যে ম্যাক ওএস এক্স এ ইনস্টল করা পদক্ষেপগুলি ইনস্টল করছে

sudo easy_install pip

পূর্ববর্তী সংস্করণটি ছয়টি আনইনস্টল করার জন্য উপেক্ষা করার জন্য ইনস্টল করা বিকল্পটি ব্যবহার করুন, অন্যথায় এটি আনইনস্টল করার সময় একটি ত্রুটি দেয় এবং সিনেমাটি এগিয়ে দেয় না does

sudo pip3 install -U nltk --ignore-installed six

পাইপ এবং পাইথনের ইনস্টলেশন পরীক্ষা করুন, '3' সংস্করণ ব্যবহার করুন

which python python2 python3
which pip pip2 pip3

NLTK ইনস্টল করা আছে কিনা তা পরীক্ষা করে দেখুন

python3
import nltk
nltk.__path__
['/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/nltk']

উদাহরণ বই ইনস্টল করার আগে এসএসএল শংসাপত্র ইনস্টল করুন, অন্যথায় উদাহরণগুলি ইনস্টল করার সময় আমরা শংসাপত্রের ত্রুটি করব

/Applications/Python\ 3.6/Install\ Certificates.command
python3 -m nltk.downloader book

এটি বইয়ের উদাহরণগুলির জন্য nltk এবং nltk_ata এর ইনস্টলেশন সফলভাবে সম্পন্ন করেছে


0

আমার জন্য কাজ PyOpenSSLকরে ইনস্টল করা pip(পিইএম রূপান্তর না করে):

pip install PyOpenSSL

0

আপনার কোনও প্রক্সি সক্ষম হয়েছে কিনা তা পরীক্ষা করে ফিডলার (একটি এইচটিটিপি ডিবাগিং প্রক্সি) বন্ধ করে আমার এই সমস্যার সমাধান হয়েছিল again


0

পাইথন ২.7-তে সি সি এর শেষে বিশ্বস্ত রুট সিএ বিবরণ যুক্ত করে: \ পাইথন 27 \ lib \ সাইট-প্যাকেজগুলি ti সার্টিফিকেস \ cacert.pem সহায়তা করেছে

তারপরে আমি চালাচ্ছি (অ্যাডমিন রাইটস ব্যবহার করে) পাইপ ইনস্টল করুন --trusted- হোস্ট pypi.python.org --trusted- হোস্ট pypi.org --trusted- হোস্ট ফাইলগুলি। pythonhosted.org প্যাকেজ নাম

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.