পাইথন এসএসএলআরআর ছুড়ে দেওয়ার অনুরোধ জানায়


350

আমি একটি সাধারণ স্ক্রিপ্টে কাজ করছি যার মধ্যে সিএএস, জেএসপ্রিং সুরক্ষা চেক, পুনর্নির্দেশ ইত্যাদি জড়িত আছে Ken তবে, সিএএস-এর মাধ্যমে এসএসএলের মাধ্যমে বৈধ হওয়া দরকার তাই আমাকে প্রথমে সেই পদক্ষেপটি পার করতে হবে। আমি জানি না পাইথন অনুরোধগুলি কী চায়? এই এসএসএল শংসাপত্রটি কোথায় থাকার কথা?

Traceback (most recent call last):
  File "./test.py", line 24, in <module>
  response = requests.get(url1, headers=headers)
  File "build/bdist.linux-x86_64/egg/requests/api.py", line 52, in get
  File "build/bdist.linux-x86_64/egg/requests/api.py", line 40, in request
  File "build/bdist.linux-x86_64/egg/requests/sessions.py", line 209, in request 
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 624, in send
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 300, in _build_response
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 611, in send
requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

আপনি কোড তথ্য আরও ভাগ করতে পারেন? মনে হচ্ছে কোনও অনুপস্থিত পদক্ষেপ রয়েছে।
ট্যাঙ্কোরস্যামশ

5
আপনার যে সফ্টওয়্যারগুলির সাহায্যের দরকার সেগুলির সংস্করণ উল্লেখ করা উচিত।
পাইওটর ডব্রোগোস্ট

আমি এই সমস্যাটি পেয়েছি যেখানে আমি পাইথন 3.5 টর্নেডো 4.4 ব্যবহার করি। এইচটিটিপিআরকোয়েস্টটি বৈধতা_সেসার্ট = সত্য সেট করে, যাতে আপনি এটি মোকাবেলা করতে ভুল সেট করতে পারেন
প্যান

এটি ব্যবহার করে দেখুন: অনুরোধ.জেট ( ' উদাহরণ. com', যাচাই করুন = সার্টিফি.ওহর ())
নিই

উত্তর:


460

অবিশ্বস্ত এসএসএল শংসাপত্রের কারণে আপনার যে সমস্যা হচ্ছে তা ঘটে।

পূর্ববর্তী মন্তব্যে উল্লিখিত @ ডির্কের মতো, দ্রুততম ফিক্সটি সেট হচ্ছে verify=False:

requests.get('https://example.com', verify=False)

দয়া করে নোট করুন যে এর ফলে শংসাপত্রটি যাচাই করা হবে না। এটি আপনার অ্যাপ্লিকেশনটিকে নিরাপত্তা ঝুঁকিতে যেমন ম্যান-ইন-মধ্য-আক্রমণের জন্য প্রকাশ করবে।

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

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

সুতরাং, সংস্করণ ২.০ হিসাবে, verifyপ্যারামিটারটি স্ব স্ব শব্দার্থবিজ্ঞানের সাথে নিম্নলিখিত মানগুলি গ্রহণ করে:

  • True: লাইব্রেরির নিজস্ব বিশ্বস্ত শংসাপত্র কর্তৃপক্ষের বিরুদ্ধে শংসাপত্রকে বৈধতা দেয় (দ্রষ্টব্য: আপনি দেখতে পাচ্ছেন যে রুট শংসাপত্রগুলির অনুরোধগুলি সার্টিফি লাইব্রেরির মাধ্যমে অনুরোধগুলি থেকে উত্তোলিত আরসিগুলির একটি বিশ্বাস ডাটাবেস: সার্টিফি - মানবের জন্য ট্রাস্ট ডাটাবেস )।
  • False: শংসাপত্রের বৈধতা সম্পূর্ণরূপে বাইপাস করে
  • শংসাপত্রগুলিকে বৈধতা দেওয়ার জন্য অনুরোধের জন্য একটি CA_BUNDLE ফাইলের পথ।

উত্স: অনুরোধগুলি - এসএসএল সার্ট যাচাইকরণ

certএকই লিঙ্কের প্যারামিটারটি একবার দেখুন ।


1
হ্যাঁ, আমি যখন উবুন্টুতে ডটক্লাউড ব্যবহার করেছি, একই "শংসাপত্র যাচাইকরণ ব্যর্থ হয়েছে" বেরিয়ে এসেছিল। "/Usr/local/lib/python2.6/dist-packages/dotcloud/client/client.py" এ "অনুরোধ.অ্যাসিওশন (শিরোনাম = শিরোনাম, হুক্স = হুকস, যাচাই করুন = মিথ্যা)" পরিবর্তিত হওয়ার পরে এটি কাজ করে।
ডায়াইজম

2
এটি সঠিক হিসাবে চিহ্নিত নয়, তবে আমি এটি যাচাই করতে পারি (নীচের উত্তরগুলির বিপরীতে)।
খালিদ

40
@ খালিদ 13: একটি কুড়াল মাথাব্যথার ওষুধ হিসাবে "কাজ করে" (কোনও মাথা নেই - মাথা ব্যথা নেই)। এর অর্থ এই নয় যে এটি সেভাবে ব্যবহার করা ভাল ধারণা। verify=Falseহোস্টের এসএসএল শংসাপত্র চেকিং অক্ষম করে।
jfs

24
@ জেফেসেবাস্টিয়ান সত্যই, এটি আপনি যা করছেন তার উপর নির্ভর করে। আমার দ্রুত / নিক্ষেপযোগ্য অ্যাপ্লিকেশনটির জন্য, এটি পর্যাপ্ত পরিমাণের চেয়ে বেশি ছিল।
খালিদ

5
@ এডিজম এই জাতীয় পরিবর্তনটি খুব নিরাপদ বলে মনে হচ্ছে ...
বিনকি

111

এসএসএল যাচাইকরণের জন্য অনুরোধগুলির ডকুমেন্টেশন থেকে :

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

>>> requests.get('https://kennethreitz.com', verify=True)

আপনি যদি নিজের এসএসএল শংসাপত্রটি যাচাই করতে না চান তবে তৈরি করুন verify=False


4
ঠিক আছে, আমি যাচাই করেছি = সত্য, কিন্তু এখনও একই ত্রুটি পেয়েছি। পরিবর্তন নেই. অন্য কিছু প্রয়োজন হতে হবে, তবে কী হতে পারে তা জানেন না।
টেডব্রুজ

আমি মনে করি আমি এখন এসএসএল উন্মাদনায় নেমে এসেছি। আমি এটি আমার প্রাথমিক get ... get (url1, headers = headers, cert = '/ etc / pki / tls / cert.pem', যাচাই = সত্য, কনফিগারেশন = my_config) এ যুক্ত করেছি সুতরাং, এখন আমি এই ত্রুটিটি পাচ্ছি। অনুরোধসমূহ।অযুক্তি.এসএসএলআরআর: [এর্নো 336265225] _ssl.c: 351: ত্রুটি: 140B0009: এসএসএল রুটিনগুলি: এসএসএল_সিটিএক্স_উসপ্রাইভেটকি_ফিল: পিইএম লাইব এর অর্থ কী তা আমার কাছে কোনও ক্লু নেই।
টেডব্রুজ

14
আপনি যদি শংসাপত্রটি বৈধ করতে না চান তবে কেবল যাচাই করুন = মিথ্যা সেট করুন, যদি আপনার স্ব-স্বাক্ষরিত শংসাপত্র থাকে
ডার্ক

16
আপনার যদি স্ব-স্বাক্ষরিত শংসাপত্র থাকে, তবে এটি ডাউনলোড করুন এবং এর ফাইল নামটিতে যাচাইকরণ সেট করুন। ভেরিফিকেশন = মিথ্যা সেট করার জন্য কোনও অজুহাত নেই। যাচাই করুন = '/ পাথ / থেকে / cert.pem'
ম্যাথিয়াস urlichs

14
দুঃখিত বৌড, অনুরোধগুলি "ওয়েব ব্রাউজারের মতো" এইচটিটিপিএস অনুরোধগুলি পরিচালনা করে না বলে আমার এই উত্তরটি ভোট দেওয়া দরকার ছিল। যদি বিশ্বাসের পূর্ণ SSL শৃঙ্খলা (মধ্যবর্তী শংসাপত্র সহ) কোনও সার্ভারে ঘোষণা না করা হয় এবং অতিরিক্ত শংসাপত্র ডাউনলোডের প্রয়োজন হয় তবে আপনি উপরের এসএসএল যাচাইয়ের ত্রুটি পাবেন। ওয়েব ব্রাউজারগুলি অতিরিক্ত ডাউনলোড করবে এবং কোনও শংসাপত্রের ত্রুটি পতাকাঙ্কিত করবে না। এটি একটি উপায় যা কোনও ওয়েব ব্রাউজার এবং অনুরোধগুলির মধ্যে পৃথক। অন্যরাও আছেন। অনুরোধগুলি কিছু যাচাই করে তবে এটি ব্রাউজারের মতো ভাল নয়।
লুই ক্রিমেন

53

আপনি যে সিএ ফাইলটি ব্যবহার করবেন তার নাম দিয়ে যেতে পারে verify :

cafile = 'cacert.pem' # http://curl.haxx.se/ca/cacert.pem
r = requests.get(url, verify=cafile)

আপনি যদি ব্যবহার করেন verify=Trueতবে requestsএটির নিজস্ব সিএ সেট ব্যবহার করে যা আপনার সার্ভার শংসাপত্রে স্বাক্ষরকারী সিএ নাও থাকতে পারে।


12
@ 9emE0iL18gxCqLT: আপনি কেন মনে করেন যে সমস্ত সিস্টেম আপনার সরবরাহিত পথটি ব্যবহার করবে? requestsআপনার বিতরণের জন্য প্যাকেজ করা যেতে পারে। চালান python -mrequests.certsখুঁজে বের করতে যেখানে এটি স্থানটিকে চিহ্নিত করে।
jfs

3
পাইথন অনুরোধের ক্যাজার্ট বান্ডিলটি যদি পুরানো হয় তবে আমি কীভাবে এটি আপডেট করব?
সিএমসিডিগ্রাগনকাই

5
cacert.pemকার্ল থেকে আপনার এটি ব্যবহার করা উচিত নয় । এটিতে অনেক প্রত্যাহার করা শংসাপত্র রয়েছে। সার্টিফি (যা অনুরোধগুলি ব্যবহার করে) দেখুন: certifi.io
কেনেথ রেইটস

3
@ কেনেথরিজিটস: 1- অনুরোধগুলি ওপি-র জন্য ব্যর্থ হয় (অন্যথায় প্রশ্নটি cacert.pemআসেনি) 2- মজিলা (সিআরএল দ্বারা) থেকে প্রাপ্ত সিএ শংসাপত্রগুলি - এটি কেবলমাত্র উদাহরণ (যদি সিএ তালিকা কোনও জনপ্রিয় ওয়েব দ্বারা ব্যবহৃত হয়) - ব্রাউজারটি উদাহরণ হিসাবে ব্যবহার করা যাবে না তবে আমি কী হতে পারে তা জানি না) - ডিফল্ট তালিকাটি ব্যর্থ হলে আপনি নিজের সিএ ফাইল পাস করতে পারবেন এমন উত্তরের বিন্দু ।
jfs

আপনি কি এটি করতে এবং একই সাথে ক্লায়েন্টের শংসাপত্রগুলি ব্যবহার করতে পারেন? আমি এই সমস্যা হচ্ছে।
ব্যবহারকারী 1156544

42

$ pip install -U requests[security]

  • পাইথন ২.7..6 @ উবুন্টু ১৪.০৪.৪ এলটিএসে পরীক্ষিত
  • পাইথন ২.7.৫ @ ম্যাকোএসএক্স ১০.৯.৫ (ম্যাভেরিক্স) এ পরীক্ষিত

যখন এই প্রশ্নটি খোলা হয়েছিল (2012-05) অনুরোধ সংস্করণটি 0.13.1 ছিল। সংস্করণ ২.৪.১ (2014-09) এ "সুরক্ষা" অতিরিক্ত ব্যবহার করা হয়েছিলcertifi যদি প্যাকেজ পাওয়া যায় তা ।

এই মুহুর্তে (2016-09) মূল সংস্করণটি 2.11.1, এটি ছাড়া ভাল কাজ করে verify=False। অতিরিক্ত ব্যবহার করে requests.get(url, verify=False)ইনস্টল করা দরকার নেই requests[security]


7
pip install -U requests[security] --no-cacheদু'বার নির্ধারিত এবংpip install certifi==2015.04.28
আমির আব্রো

@ অ্যালানজডস সোর্স কোডটি সম্পাদনা না করে যদি আমি হয় কিছু এসএসএল শংসাপত্রের উপর আস্থা রাখতে বা পাইকার সনদ যাচাইকরণ অক্ষম করতে পাইথনটি কনফিগার করতে চাই তবে কী হবে? উদাহরণস্বরূপ, যদি আমি বিদ্যমান পাইথন ইউটিলিটিগুলি (যেমন: ডাব্লুএসএস সি এল এল) ডাউনলোড করি এবং আমি শংসাপত্রগুলিতে বিশ্বাস রাখতে চাই বা সেই সরঞ্জামগুলির জন্য শংসাপত্রের বৈধতা উপেক্ষা করতে চাই?
হাওইক্যাম্প

@Howiecamp তারপর আপনি মাধ্যমে জেএফ-সেবাস্টিয়ান উত্তর যেতে পারেন, আমি: stackoverflow.com/a/12865159/798575
alanjds

@ অ্যালানজডস কিন্তু তার উত্তর কি ধরে নেবে না আমি কোডটি লিখছি এবং / অথবা কোডটিতে অ্যাক্সেস রয়েছে? আমি পরিবেশ পর্যায়ে এটি বাস্তবায়ন করতে চাইছি।
হাওিক্যাম্প 13'17

3
না pip install --upgrade pipঅনুরোধ নিরাপত্তা প্যাকেজ ইনস্টল অন্যান্য ত্রুটিগুলি এড়ানোর সামনে
ভিনসেন্ট Claes

40

আমি একই সমস্যাটির মুখোমুখি হয়েছি এবং এসএসএল শংসাপত্রটি যাচাই করে ব্যর্থ ইস্যুটি যখন অটস বোটো 3 ব্যবহার করে বোটো 3 কোড পর্যালোচনা করে দেখলাম যে REQUESTS_CA_BUNDLEসেটটি সেট করা নেই, তাই আমি নিজেই সেট করে উভয় ইস্যুটি স্থির করেছিলাম:

from boto3.session import Session
import os

# debian
os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(
    '/etc/ssl/certs/',
    'ca-certificates.crt')
# centos
#   'ca-bundle.crt')

অ্যাউস-ক্লাইমের জন্য, আমি অনুমান করি যে REQUESTS_CA_BUNDLE এ সেট করা ~/.bashrcএই সমস্যাটি সমাধান করবে (পরীক্ষিত নয় কারণ আমার আউজ-ক্লিটি এটি ব্যতীত কাজ করে)।

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE

2
এই আমার সমস্যা স্থির! আমি ম্যাক অন চার্লস প্রক্সি ব্যবহার করেছিলাম এমন একটি লাইব্রেরি ডিবাগ করার জন্য যা এইচটিপিএস এপিআইতে জেএসএন কল করেছে। আমি নির্ধারিত হিসাবে চারলেস শংসাপত্র ইনস্টল করেছি, কীচেইনে এটি যুক্ত করেছি, তবে পাইথন ব্যর্থ করে রেখেছিল: এসএসএলআরআর: ("খারাপ হ্যান্ডশেক: ত্রুটি ([('এসএসএল রুটিন', 'এসএসএল 3_জিট_সেসর রুটিন', 'এসএসএল 3_জিট_সার্ভার_সার্টিফেট', 'সার্টিফিকেট যাচাই ব্যর্থ হয়েছে"))))) " ,) এটি ঠিক করার জন্য, আমি REQUESTS_CA_BUNDLE যুক্ত করার এবং আপনার কেচেইন থেকে .pem ফাইল হিসাবে চার্লস শংসাপত্র রফতানি করার বিষয়ে আপনার পরামর্শ অনুসরণ করে শেষ করেছি। এখন এটা কাজ করছে!
মল্লভাই

ধন্যবাদ, একই সমস্যাটি খোলা ফিডলারের সাথে ছিল
user565447

@ user565447 আমি এই মুহুর্তে ফিডলারের সাথে এটি কাজ করার চেষ্টা করছি। ফিদলারের শংসাপত্রের কাজগুলিতে REQUESTS_CA_BUNDLE সেট করা উচিত?
হাওইক্যাম্প

19

যদি আপনার কাছে এমন একটি লাইব্রেরি রয়েছে যা নির্ভর করে requestsএবং আপনি যাচাইকরণের পথটি (যেমন পছন্দ করে pyvmomi) পরিবর্তন করতে না পারেন তবে আপনাকে cacert.pemঅনুরোধ সহ বান্ডিল খুঁজে পেতে হবে এবং সেখানে আপনার সিএ সংযুক্ত করতে হবে। cacert.pemঅবস্থানটি সন্ধান করার জন্য এখানে একটি সাধারণ পদ্ধতি রয়েছে :

জানালা

C:\>python -c "import requests; print requests.certs.where()"
c:\Python27\lib\site-packages\requests-2.8.1-py2.7.egg\requests\cacert.pem

লিনাক্স

#  (py2.7.5,requests 2.7.0, verify not enforced)
root@host:~/# python -c "import requests; print requests.certs.where()"
/usr/lib/python2.7/dist-packages/certifi/cacert.pem

#  (py2.7.10, verify enforced)
root@host:~/# python -c "import requests; print requests.certs.where()"
/usr/local/lib/python2.7/dist-packages/requests/cacert.pem

BTW। @ রিকোয়েস্টস-ডেভস, অনুরোধের সাথে আপনার নিজস্ব ক্যাশেটারগুলি বান্ডিল করা সত্যই, সত্যই বিরক্তিকর ... বিশেষত সত্য যে আপনি প্রথমে সিস্টেমের সিএ স্টোরটি ব্যবহার করেন না বলে মনে হয় এবং এটি কোথাও নথিভুক্ত নয়।

হালনাগাদ

এমন পরিস্থিতিতে, যেখানে আপনি একটি লাইব্রেরি ব্যবহার করছেন এবং সিএ-বান্ডিল অবস্থানের কোনও নিয়ন্ত্রণ নেই, আপনি স্পষ্টভাবে সিএ-বান্ডিলের অবস্থানটিকে আপনার হোস্ট-ওয়াইড সিএ-বান্ডিল হিসাবে সেট করতে পারেন:

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-bundle.crt python -c "import requests; requests.get('https://somesite.com';)"

একশ বার এটি: মূলটি verifyপথ পরিবর্তন করতে অক্ষম ।
ghukill

আপনি যদি স্ব স্বাক্ষরিত শংসাপত্র ব্যবহার করছেন? সেক্ষেত্রে সিএ কী হবে?
ব্যবহারকারী 1114

ক্ষুদ্র আপডেট - অজগর 3.6 এর জন্য, প্রিন্ট কমান্ডের জন্য প্রথম বন্ধনী থাকতে হবে - পাইথন-সি "আমদানির অনুরোধ; মুদ্রণ (
অনুরোধ.সেসার্টস.ওর

15

আমি জিএসপিড ব্যবহার করে একই সমস্যার মুখোমুখি হই এবং এই আদেশগুলি আমার পক্ষে কাজ করে:

sudo pip uninstall -y certifi
sudo pip install certifi==2015.04.28

এটা আমার জন্য এটি। ধন্যবাদ :)
অ্যালেক্স-ম্লেওড

4
এটির প্রস্তাবিত নয়, সার্টিফির পুরানো সংস্করণ থেকে সম্ভাব্য বাতিল / অবিশ্বস্ত শংসাপত্রগুলি পুনরায় ইনস্টল করার খারাপ দিক রয়েছে।
ড্রাগন 788

যদি কোনও কারণে আপনাকে অজগর ২.7 এর প্রথম সংস্করণটি আটকাতে বাধ্য করা হয় তবে
ডাউনটিগ্রেড সার্টিফিকেই

15

আপনি যদি সতর্কতাগুলি সরাতে চান তবে নীচের কোডটি ব্যবহার করুন।

import urllib3

urllib3.disable_warnings()

এবং verify=Falseসাথে request.getবা postপদ্ধতি


12

অনুরূপ সমস্যা সমাধানের জন্য আমি একটি নির্দিষ্ট পদ্ধতির সন্ধান পেয়েছি। ধারণাটি সিস্টেমে সঞ্চিত ক্যাজার্ট ফাইলটি নির্দেশ করছে এবং অন্য এসএসএল ভিত্তিক অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয়েছে।

ডেবিয়ানে (আমি অন্যান্য ডিস্ট্রিবিউশনে একই রকম তা নিশ্চিত নই) সার্টিফিকেট ফাইলগুলি (.pem) এ সংরক্ষণ করা হয়, /etc/ssl/certs/সুতরাং এটি আমার পক্ষে কাজ করা কোড:

import requests
verify='/etc/ssl/certs/cacert.org.pem'
response = requests.get('https://lists.cacert.org', verify=verify)

কি অনুমান করার জন্য pem ফাইলটি বেছে নিয়েছে , আমি ইউআরএলটি ব্রাউজ করেছি এবং যা শংসাপত্র কর্তৃপক্ষ (সিএ) শংসাপত্র তৈরি করেছে তা পরীক্ষা করে দেখুন।

সম্পাদনা করুন: আপনি যদি কোডটি সম্পাদনা করতে না পারেন (কারণ আপনি একটি তৃতীয় অ্যাপ্লিকেশন চালাচ্ছেন) আপনি pemসরাসরি শংসাপত্রটি যুক্ত করতে চেষ্টা করতে পারেন /usr/local/lib/python2.7/dist-packages/requests/cacert.pem(যেমন ফাইলের শেষে এটি অনুলিপি করে))


2
পাইথন দ্বারা ব্যবহৃত CA_BUNDLE ডিবাগ করার জন্য সম্পর্কিত পোস্ট
chk

/usr/local/lib/python2.7/dist-packages/requests/cacert.pemওএস স্টোরটিতে একটি সিমলিংক দিয়ে প্রতিস্থাপন সম্পর্কে কী ?
সিএমসিডিগ্রাগনকাই

8

আপনি যদি শংসাপত্র সম্পর্কে বিরক্ত না হন তবে ব্যবহার করুন verify=False

import requests

url = "Write your url here"

returnResponse = requests.get(url, verify=False)

7

ডিবাগিংয়ের কয়েক ঘন্টা পরে আমি কেবল নিম্নলিখিত প্যাকেজগুলি ব্যবহার করে এটি কাজ করতে পারি:

requests[security]==2.7.0  # not 2.18.1
cryptography==1.9  # not 2.0

ব্যবহার OpenSSL 1.0.2g 1 Mar 2016

এই প্যাকেজ ছাড়া verify=False কাজ করে না।

আমি আশা করি এটা কারো সাহায্যে লাগবে.


5

আমি একই ইস্যু মধ্যে দৌড়ে। দেখা যাচ্ছে আমি আমার সার্ভারে অন্তর্বর্তী শংসাপত্র ইনস্টল করি নি (কেবল এটি নীচে দেখানো হিসাবে আপনার শংসাপত্রের নীচে যুক্ত করুন)।

https://www.digicert.com/ssl-support/pem-ssl-creation.htm

আপনার সিএ-সার্টিফিকেট প্যাকেজ ইনস্টল করা আছে তা নিশ্চিত করুন:

sudo apt-get install ca-certificates

সময় আপডেট করাও এর সমাধান করতে পারে:

sudo apt-get install ntpdate
sudo ntpdate -u ntp.ubuntu.com

আপনি যদি স্ব-স্বাক্ষরিত শংসাপত্র ব্যবহার করেন তবে আপনাকে সম্ভবত এটি নিজের সিস্টেমে ম্যানুয়ালি যুক্ত করতে হবে।


দ্রষ্টব্য, এটি কেবল অ্যাপটি-গেটের মাধ্যমে অনুরোধ সংস্থাগুলিতে প্রযোজ্য, যা সিস্টেম শংসাপত্রগুলি ব্যবহারের জন্য ডেবিয়ান / উবুন্টু দ্বারা সংশোধিত হয়েছে। নিজস্ব জাহাজের সাথে যথাযথভাবে প্রস্তুতকৃত, সিএ বান্ডিল সহ উপযুক্ত জাহাজের জন্য অনুরোধ করুন: সার্টিফি.আইও
কেনেথ রেইটস

রুট সিএ যথেষ্ট হওয়া উচিত নয়? কেন আপনার মধ্যস্থতাকারীদের দরকার?
টিমি

5

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

import requests.api
import warnings


def requestspatch(method, url, **kwargs):
    kwargs['verify'] = False
    return _origcall(method, url, **kwargs)

_origcall = requests.api.request
requests.api.request = requestspatch
warnings.warn('Patched requests: SSL verification disabled!')

উত্পাদন কখনও ব্যবহার!


4

পার্টিটি আমার কাছে অনেক দেরি হয়ে গেছে বলে অনুমান করে তবে আমি নিজের মতো সহযোদ্ধাদের জন্য ফিক্সটি পেস্ট করতে চেয়েছিলাম! সুতরাং পাইথন ৩.7.x এ নিম্নলিখিতটি আমার জন্য কাজ করেছে

আপনার টার্মিনালে নিম্নলিখিত টাইপ করুন

pip install --upgrade certifi      # hold your breath..

আপনার স্ক্রিপ্ট / অনুরোধগুলি আবার চালানোর চেষ্টা করুন এবং দেখুন এটি কার্যকর হয় কিনা (আমি নিশ্চিত এটি এখনও স্থির হবে না!)। যদি এটি কাজ না করে তবে টার্মিনালে সরাসরি কমান্ডটি চালানোর চেষ্টা করুন

open /Applications/Python\ 3.6/Install\ Certificates.command  # please replace 3.6 here with your suitable python version

3

আমি এই সমস্যাটি HOURS এর জন্য লড়াই করেছি।

আমি অনুরোধগুলি আপডেট করার চেষ্টা করেছি। তারপরে আমি সার্টিফি আপডেট করেছি। আমি সার্টিফি.ওয়েয়ারে () কোডটি যাচাই করে দেখিয়েছি (কোডটি যাইহোক ডিফল্টভাবে এটি করে)। কিছুই কাজ হয়নি।

অবশেষে আমি আমার অজগরটির সংস্করণটি পাইথন ২.7.১১ এ আপডেট করেছি। আমি পাইথন ২.7.৫ এ ছিলাম যার সাথে শংসাপত্রগুলি যাচাই করা হয় তার সাথে কিছু বেমানান ছিল। একবার আমি পাইথন আপডেট করেছি (এবং অন্যান্য কয়েকটি নির্ভরতা) এটি কাজ শুরু করে।


আপনি যদি ওপেনএসএসএলকে কোনও সংস্করণ> 1.0.0 এ আপডেট করেছেন তবে এর চেয়ে সম্ভবত সমস্যাটি ছিল। আমার উত্তর নম্র দেখুন। stackoverflow.com/a/44543047/1413201
টিম Ludwinski

পাইথন ২.7.৯ থেকে ২.7.১০ এ গিয়ে আমার জন্য এটি স্থির করে।
ক্রেস্টস্টিক

3

এটি @ রাফেল-আলমেইডার জবাবের অনুরূপ, তবে আমি এটি উল্লেখ করতে চাই যে অনুরোধগুলি ২.১১++ হিসাবে verifyগ্রহণ করা যেতে পারে এমন 3 টি মান নেই, প্রকৃতপক্ষে 4 টি রয়েছে:

  • True: অনুরোধগুলির অভ্যন্তরীণ বিশ্বস্ত CAগুলির বিরুদ্ধে বৈধতা দেয়।
  • False: শংসাপত্রের বৈধতা সম্পূর্ণরূপে বাইপাস করে । (প্রস্তাবিত নয়)
  • একটি CA_BUNDLE ফাইলের পথে। অনুরোধগুলি সার্ভারের শংসাপত্রগুলি যাচাই করতে এটি ব্যবহার করবে।
  • সর্বজনীন শংসাপত্র ফাইল ধারণকারী ডিরেক্টরিতে পাথ। অনুরোধগুলি সার্ভারের শংসাপত্রগুলি যাচাই করতে এটি ব্যবহার করবে।

আমার বাকী উত্তরটি প্রায় # 4, যাচাইয়ের জন্য শংসাপত্র সহ একটি ডিরেক্টরি কীভাবে ব্যবহার করবেন:

প্রয়োজনীয় পাবলিক শংসাপত্রগুলি পান এবং এগুলি একটি ডিরেক্টরিতে রাখুন।

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

যদি সার্ভার শংসাপত্র শৃঙ্খলা ব্যবহার করে তবে চেইনের প্রতিটি একক শংসাপত্রটি নিশ্চিত করে নিন।

অনুরোধের ডকুমেন্টেশন অনুসারে, শংসাপত্রগুলি সহ ডিরেক্টরিটি প্রথমে "পুনর্বাসিত" ইউটিলিটি ( openssl rehash) দিয়ে প্রক্রিয়া করা উচিত ।

(এর জন্য ওপেনসেল ১.১.১++ প্রয়োজন, এবং সমস্ত উইন্ডোজ ওপেনসেল বাস্তবায়ন পুনঃস্থাপনকে সমর্থন করে openssl rehashনা If যদি আপনার পক্ষে কাজ না করে, আপনি https://github.com/ruby/openssl/blob/master এ পুনঃস্থাপন রুবি স্ক্রিপ্টটি চালানোর চেষ্টা করতে পারেন /sample/c_rehash.rb , যদিও আমি এটি চেষ্টা করি নি))

আমার শংসাপত্রগুলি সনাক্ত করার জন্য অনুরোধ পেতে আমার কিছুটা সমস্যা হয়েছিল, তবে আমি শংসাপত্রগুলিকে openssl x509 -outform PEMবেস format64 .pemফর্ম্যাটে রূপান্তর করতে কমান্ডটি ব্যবহার করার পরে , সমস্ত কিছু পুরোপুরি ঠিকঠাকভাবে কাজ করেছিল।

আপনি কেবল অলস পুনঃস্থাপন করতে পারেন:

try:
    # As long as the certificates in the certs directory are in the OS's certificate store, `verify=True` is fine.
    return requests.get(url, auth=auth, verify=True)
except requests.exceptions.SSLError:
    subprocess.run(f"openssl rehash -compat -v my_certs_dir", shell=True, check=True)
    return requests.get(url, auth=auth, verify="my_certs_dir")

2

এই ত্রুটিটি ঘটানোর জন্য অনুরোধগুলির মডিউলে বর্তমানে একটি সমস্যা রয়েছে, যা v2.6.2 থেকে v2.12.4 (এটিউইউ) -এ উপস্থিত রয়েছে: https://github.com/kennethreitz/requests/issues/2573

এই ইস্যুটির জন্য কর্মপরিকল্পনা নিম্নলিখিত লাইনটি যুক্ত করছে: requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS'


FWIW, এটি এখনও অনুরোধগুলির সাথে উপস্থিত রয়েছে == 2.13.0। উপরের কাজটি স্থির করে এটি এখনও স্থির করে।
ট্যামস সেজেলি

1

@ রাফায়েল আলমেডা দ্বারা উল্লিখিত হিসাবে, আপনার যে সমস্যাটি হচ্ছে তা অবিশ্বস্ত এসএসএল শংসাপত্রের কারণে ঘটে। আমার ক্ষেত্রে, এসএসএল শংসাপত্রটি আমার সার্ভার দ্বারা অবিশ্বস্ত ছিল। সুরক্ষার সাথে কোন আপস না করে এটি পেতে, আমি শংসাপত্রটি ডাউনলোড করে সার্ভারে ইনস্টল করেছি (কেবলমাত্র .crt ফাইলটিতে ডাবল ক্লিক করে এবং পরে শংসাপত্র ইনস্টল করুন ...)।


0

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

cat StartComClass1.pem >> .virtualenvs/caldav/lib/python2.7/site-packages/pip/_vendor/requests/cacert.pem
cat temp/StartComClass1.pem >> .virtualenvs/caldav/lib/python2.7/site-packages/requests/cacert.pem

এর মধ্যে একটি যথেষ্ট হতে পারে, আমি চেক করিনি


0

আমার অনুরূপ বা একই শংসাপত্রের বৈধতা সমস্যা ছিল। আমি পড়েছি যে ওপেনএসএসএল সংস্করণগুলি 1.0.2 এরও কম, যা অনুরোধগুলির উপর নির্ভর করে কখনও কখনও শক্তিশালী শংসাপত্রগুলি বৈধ করতে সমস্যা হয় ( এখানে দেখুন )। CentOS 7 টি 1.0.1e ব্যবহার করছে বলে মনে হচ্ছে এতে সমস্যা আছে।

CentOS- এ কীভাবে এই সমস্যাটি ঘটাবেন সে সম্পর্কে আমি নিশ্চিত ছিলাম না, তাই আমি দুর্বল 1024 বিট সিএ শংসাপত্রের অনুমতি দেওয়ার সিদ্ধান্ত নিয়েছি।

import certifi # This should be already installed as a dependency of 'requests'
requests.get("https://example.com", verify=certifi.old_where())

আমি আর্কজিআইএস দ্বারা ইনস্টল করা পাইথন ২.7.১০ ব্যবহার করি এবং সেখানে কোনও সার্টিফী মডিউল ইনস্টল করা হয়নি। অনুরোধ মডিউল ইনস্টল করা সংস্করণ 2.11.1।
লুকাস

0

আমি পাইথন 3.4.0 থেকে 3.4.6 এ আপগ্রেড করতে হয়েছিল

pyenv virtualenv 3.4.6 myvenv
pyenv activate myvenv
pip install -r requirements.txt

0

আমার ক্ষেত্রে কারণটি মোটামুটি তুচ্ছ ছিল।

আমি জানতাম যে এসএসএল যাচাইকরণ কয়েক দিন আগে পর্যন্ত কাজ করেছিল এবং অন্য কোনও মেশিনে কাজ করেছিল।

আমার পরবর্তী পদক্ষেপটি ছিল যে শংসাপত্রের যাচাইকরণটি কাজ করছে এবং যেটিতে এটি ছিল না তার মধ্যে শংসাপত্রের সামগ্রী এবং আকারের তুলনা করা।

এটি দ্রুত আমাকে নির্ধারণ করতে পরিচালিত করে যে 'ভুলভাবে' কার্যকারী মেশিনের শংসাপত্রটি ভাল ছিল না, এবং আমি একবার এটি 'ভাল' শংসাপত্রের সাথে প্রতিস্থাপন করি, সবকিছু ঠিকঠাক ছিল।

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