Requests: خطأ SSL: اتصال غير صالح

تم إنشاؤها على ٢٠ مايو ٢٠١٦  ·  33تعليقات  ·  مصدر: psf/requests

لم أتمكن من استخدام lib الخاص بك في CeontOS 7 مع Python 2.7.5. حصلت على هذا الخطأ:

File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 447, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)",)

لم يساعد تحديث Python أو أي libs SSL. لدي هذا الخطأ في CentOS و Ubuntu ، كل شيء في Arch Linux يعمل بشكل جيد.

Needs More Information

التعليق الأكثر فائدة

آها ، حسنًا ، لقد وصلنا إلى هناك.

api.smartsheet.com طبقة النقل الآمنة (TLS) الخاصة به باستخدام ما يُعرف باسم "شهادة التوقيع المشترك". تم استخدام هذا لأن Verisign ، المرجع المصدق لـ api.smartsheet.com ، استخدم في الأصل شهادة جذر 1024 بت. تم إهمال هذه الشهادات واستبدالها بشهادات جذر أقوى ، لكن بعض المتصفحات والأنظمة القديمة ربما لم تتلق تحديثات ، لذلك تقدم مواقع مثل api.smartsheet.com شهادة جذر موقعة من جذر 1024 بت.

هذه ليست مشكلة في العادة ، باستثناء_:

  • أزال certifi جذور 1024 بت الضعيفة
  • تمتص OpenSSL الأقدم من 1.0.2 في بناء سلاسل الشهادات ، وبالتالي تفشل في التحقق من صحة الجذر الموقع بشكل صحيح.

يمكنك حل هذا بطريقتين. الطريقة الأولى ، الأفضل والأكثر تشددًا ، هي ترقية OpenSSL إلى 1.0.2 أو إصدار أحدث. هذا صعب القيام به على Centos ، أخشى. الطريقة الأقل جودة والأكثر فاعلية هي الحصول على ناتج تشغيل python -c "import certifi; print certifi.old_where()" ثم تعيين متغير البيئة REQUESTS_CA_BUNDLE للمسار المطبوع.

ال 33 كومينتر

هل يمكنك إخبارنا من فضلك كيف قمت بتثبيت الطلبات وما هو الإصدار الذي قمت بتثبيته؟

من شبه المؤكد أن هذه مشكلة SNI ، لذا اعتمادًا على كيفية تثبيت المكتبة ، قد نحتاج إلى إضافة بعض التبعيات الاختيارية.

تم تثبيت الطلبات على أنها تبعية لـ smartsheet-python-sdk عبر نقطة:

pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.10.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
Installer: pip
License: Apache 2.0
Location: /usr/lib/python3.4/site-packages
Requires: 
Classifiers:
  Development Status :: 5 - Production/Stable
  Intended Audience :: Developers
  Natural Language :: English
  License :: OSI Approved :: Apache Software License
  Programming Language :: Python
  Programming Language :: Python :: 2.6
  Programming Language :: Python :: 2.7
  Programming Language :: Python :: 3
  Programming Language :: Python :: 3.3
  Programming Language :: Python :: 3.4
  Programming Language :: Python :: 3.5
  Programming Language :: Python :: Implementation :: CPython
  Programming Language :: Python :: Implementation :: PyPy

pip show smartsheet-python-sdk
---
Metadata-Version: 2.0
Name: smartsheet-python-sdk
Version: 1.0.1
Summary: Library that uses Python to connect to Smartsheet services (using API 2.0).
Home-page: http://smartsheet-platform.github.io/api-docs/
Author: Smartsheet
Author-email: [email protected]
Installer: pip
License: Apache-2.0
Location: /usr/lib/python3.4/site-packages
Requires: certifi, requests, six, python-dateutil, requests-toolbelt
Classifiers:
  Development Status :: 5 - Production/Stable
  Intended Audience :: Developers
  Natural Language :: English
  Operating System :: OS Independent
  License :: OSI Approved :: Apache Software License
  Programming Language :: Python
  Programming Language :: Python :: 2.7
  Programming Language :: Python :: 3.3
  Programming Language :: Python :: 3.4
  Programming Language :: Python :: 3.5
  Programming Language :: Python :: Implementation :: PyPy
  Programming Language :: Python :: Implementation :: CPython
  Topic :: Software Development :: Libraries :: Python Modules
  Topic :: Office/Business :: Financial :: Spreadsheet

إزالة الحزمة في نقطة والتثبيت من yum لن يساعد ...

pensnarik هل يمكنك محاولة تشغيل pip install -U requests[security] في بيئتك ثم المحاولة مرة أخرى؟

ثاك لك يا لوكاسا على نصيحتك لكنها لم تساعد ...

[mutex<strong i="6">@unica1</strong> parser]$ sudo pip install -U requests[security]
[sudo] password for mutex: 
Collecting requests[security]
  Using cached requests-2.10.0-py2.py3-none-any.whl
Collecting pyOpenSSL>=0.13 (from requests[security])
  Using cached pyOpenSSL-16.0.0-py2.py3-none-any.whl
Collecting ndg-httpsclient (from requests[security])
Requirement already up-to-date: pyasn1 in /usr/lib/python2.7/site-packages (from requests[security])
Collecting cryptography>=1.3 (from pyOpenSSL>=0.13->requests[security])
  Using cached cryptography-1.3.2.tar.gz
Requirement already up-to-date: six>=1.5.2 in /usr/lib/python2.7/site-packages (from pyOpenSSL>=0.13->requests[security])
Requirement already up-to-date: idna>=2.0 in /usr/lib/python2.7/site-packages (from cryptography>=1.3->pyOpenSSL>=0.13->requests[security])
Requirement already up-to-date: setuptools>=11.3 in /usr/lib/python2.7/site-packages (from cryptography>=1.3->pyOpenSSL>=0.13->requests[security])
Requirement already up-to-date: enum34 in /usr/lib/python2.7/site-packages (from cryptography>=1.3->pyOpenSSL>=0.13->requests[security])
Requirement already up-to-date: ipaddress in /usr/lib/python2.7/site-packages (from cryptography>=1.3->pyOpenSSL>=0.13->requests[security])
Requirement already up-to-date: cffi>=1.4.1 in /usr/lib64/python2.7/site-packages (from cryptography>=1.3->pyOpenSSL>=0.13->requests[security])
Requirement already up-to-date: pycparser in /usr/lib/python2.7/site-packages (from cffi>=1.4.1->cryptography>=1.3->pyOpenSSL>=0.13->requests[security])
Building wheels for collected packages: cryptography
  Running setup.py bdist_wheel for cryptography ... done
  Stored in directory: /root/.cache/pip/wheels/14/df/02/611097a49d7739151deb68d0172dff5ae7cba01b82769e56ef
Successfully built cryptography
Installing collected packages: cryptography, pyOpenSSL, ndg-httpsclient, requests
  Found existing installation: requests 2.6.0
    DEPRECATION: Uninstalling a distutils installed project (requests) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling requests-2.6.0:
      Successfully uninstalled requests-2.6.0
Successfully installed cryptography-1.3.2 ndg-httpsclient-0.4.0 pyOpenSSL-16.0.0 requests-2.10.0
You are using pip version 8.1.0, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[mutex<strong i="7">@unica1</strong> parser]$ ./update_region_price.py 
Traceback (most recent call last):
  File "./update_region_price.py", line 129, in <module>
    sys.exit(app.run(sys.argv))
  File "./update_region_price.py", line 122, in run
    self.update_basic()
  File "./update_region_price.py", line 65, in update_basic
    sheet = self.sm.Sheets.get_sheet(self.sheet_id, page_size=5000)
  File "/usr/lib/python2.7/site-packages/smartsheet/sheets.py", line 460, in get_sheet
    response = self._base.request(prepped_request, expected, _op)
  File "/usr/lib/python2.7/site-packages/smartsheet/smartsheet.py", line 178, in request
    res = self.request_with_retry(prepped_request, operation)
  File "/usr/lib/python2.7/site-packages/smartsheet/smartsheet.py", line 242, in request_with_retry
    return self._request(prepped_request, operation)
  File "/usr/lib/python2.7/site-packages/smartsheet/smartsheet.py", line 208, in _request
    res = self._session.send(prepped_request, stream=stream)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 585, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 477, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)",)

هل تستطيع أن تريني ما هو المضيف الذي تتصل به؟

Lukasa ، بالطبع: https://api.smartsheet.com/2.0 ، أنا أستخدم مغلف python لواجهة برمجة تطبيقات smartsheet (https://github.com/smartsheet-platform/smartsheet-python-sdk).

وهل لديك certifi مثبتة في بيئتك؟

نعم لدي:

[mutex<strong i="6">@unica1</strong> parser]$ pip show certifi
---
Metadata-Version: 2.0
Name: certifi
Version: 2016.2.28
Summary: Python package for providing Mozilla's CA Bundle.
Home-page: http://certifi.io/
Author: Kenneth Reitz
Author-email: [email protected]
Installer: pip
License: ISC
Location: /usr/lib/python2.7/site-packages
Requires: 
Classifiers:
  Development Status :: 5 - Production/Stable
  Intended Audience :: Developers
  Natural Language :: English
  Programming Language :: Python
  Programming Language :: Python :: 2.5
  Programming Language :: Python :: 2.6
  Programming Language :: Python :: 2.7
  Programming Language :: Python :: 3.0
  Programming Language :: Python :: 3.1
  Programming Language :: Python :: 3.2
  Programming Language :: Python :: 3.3
  Programming Language :: Python :: 3.4

آها ، حسنًا ، لقد وصلنا إلى هناك.

api.smartsheet.com طبقة النقل الآمنة (TLS) الخاصة به باستخدام ما يُعرف باسم "شهادة التوقيع المشترك". تم استخدام هذا لأن Verisign ، المرجع المصدق لـ api.smartsheet.com ، استخدم في الأصل شهادة جذر 1024 بت. تم إهمال هذه الشهادات واستبدالها بشهادات جذر أقوى ، لكن بعض المتصفحات والأنظمة القديمة ربما لم تتلق تحديثات ، لذلك تقدم مواقع مثل api.smartsheet.com شهادة جذر موقعة من جذر 1024 بت.

هذه ليست مشكلة في العادة ، باستثناء_:

  • أزال certifi جذور 1024 بت الضعيفة
  • تمتص OpenSSL الأقدم من 1.0.2 في بناء سلاسل الشهادات ، وبالتالي تفشل في التحقق من صحة الجذر الموقع بشكل صحيح.

يمكنك حل هذا بطريقتين. الطريقة الأولى ، الأفضل والأكثر تشددًا ، هي ترقية OpenSSL إلى 1.0.2 أو إصدار أحدث. هذا صعب القيام به على Centos ، أخشى. الطريقة الأقل جودة والأكثر فاعلية هي الحصول على ناتج تشغيل python -c "import certifi; print certifi.old_where()" ثم تعيين متغير البيئة REQUESTS_CA_BUNDLE للمسار المطبوع.

Argh ، تتجاوز SDK للورقة الذكية متغير البيئة هذا عن طريق استخدام الشهادة بشكل صريح.

خطة جديدة. في البداية مباشرة بعد استيراد الورقة الذكية ، قبل أن تفعل أي شيء آخر ، هل يمكنك إضافة الأسطر التالية؟

import smartsheet.session
import certifi
smartsheet.session._TRUSTED_CERT_FILE = certifi.old_where()

نأمل أن يساعد ذلك. لا تحتاج إلى متغير البيئة مع هذا النهج.

لسوء الحظ ، لا يعمل حتى إذا قمت بتغيير هذا السطر في /usr/lib/python2.7/site-packages/smartsheet/session.py:

_TRUSTED_CERT_FILE = certifi.where()

إلى

_TRUSTED_CERT_FILE = certifi.old_where()

عندما أقوم بتغيير هذا var من الكود الخاص بي ، فإنه لا يساعد أيضًا ...

في هذه المرحلة ، أنا واثق تمامًا من أن هذا ليس خطأً في الطلبات وهو في الواقع مشكلة في غلاف واجهة برمجة تطبيقات Smartsheet. هل حاولت إبلاغ هذا لهم؟

هرم. هل أنت واثق من أن هذا الرمز يتم تنفيذه؟ هل يمكنك استخدام بيانات الطباعة لتأكيد استخدامها؟

تخفيض الشهادة من 2015.11.20.1 إلى 2015.4.28 يحل المشكلة!

ubuntu @ ip-172-31-58-148 : ~ / طلبات $ مسح
ubuntu @ ip-172-31-58-148 : ~ / طلبات بيثون دولار
Python 2.7.6 (افتراضي ، 22 حزيران (يونيو) 2015 ، 17:58:13)
[GCC 4.8.2] على linux2
اكتب "مساعدة" أو "حقوق طبع ونشر" أو "ائتمانات" أو "ترخيص" لمزيد من المعلومات.

طلبات الاستيراد
request.get ('https://logo.clearbit.com/beutifi.com')
الطلبات / الحزم / urllib3 / util / ssl_.py: 318: SNIMissingWarning: تم إجراء طلب HTTPS ، لكن امتداد SNI (مؤشر اسم الموضوع) لـ TLS غير متاح على هذا النظام الأساسي. قد يتسبب هذا في قيام الخادم بتقديم شهادة TLS غير صحيحة ، مما قد يؤدي إلى فشل التحقق من الصحة. يمكنك الترقية إلى إصدار أحدث من Python لحل هذه المشكلة. لمزيد من المعلومات ، راجع https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
تحذير
الطلبات / الحزم / urllib3 / util / ssl_.py: 122: InsecurePlatformWarning: كائن SSLContext حقيقي غير متوفر. هذا يمنع urllib3 من تكوين SSL بشكل مناسب وقد يتسبب في فشل اتصالات SSL معينة. يمكنك الترقية إلى إصدار أحدث من Python لحل هذه المشكلة. لمزيد من المعلومات ، راجع https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatform تحذير
Traceback (آخر مكالمة أخيرة):
ملف ""، السطر 1 ، في
ملف "طلبات / api.py" ، السطر 71 ، في get
طلب الإرجاع ('get' ، url ، params = params ، * _kwargs)
ملف "طلبات / api.py" ، السطر 57 ، في الطلب
إرجاع session.request (طريقة = طريقة ، url = url ، * _kwargs)
ملف "request / Session.py" ، السطر 477 ، في الطلب
Resp = self.send (الإعدادية ، * _send_kwargs)
ملف "request / Session.py" ، السطر 587 ، في الإرسال
r = adapter.send (طلب ، * _kwargs)
ملف "request / adapters.py" ، السطر 491 ، في الإرسال
رفع SSLError (e، request = request)
request.exceptions.SSLError: [Errno 1] _ssl.c: 510: خطأ: 14077410 : إجراءات SSL

هذه هي مدخلاتي لهذه المشكلة. لا يحدث ذلك مع كل طلب https.

sProject قد تحتاج إلى حل كلا التحذيرات قبل أن نتمكن من تحديد ما إذا كانت لديك مشكلة جديدة. إذا تلقيت طلبات من النقطة ، فقم بتشغيل pip install pyopenssl pyasn1 ndg-httpsclient . إذا تلقيت طلبات من مزود النظام الخاص بك ، فيجب عليك تثبيت هذه الحزم الثلاث من هناك.

يبدو أن هذا الخطأ قد تم حله منذ أكثر من شهرين. إذا كنت مخطئًا في هذا الاستنتاج ولا يزال هناك خطأ يمكن العثور عليه في الطلبات ، فسيسعدني إعادة فتح هذا.

شكرا للجميع على التعاون في الطلبات!

يثير المثال من pygodaddy نفس الاستثناء

from pygodaddy import GoDaddyClient
client = GoDaddyClient()
if client.login(login[0],login[1]):
    print client.find_domains()
else: print 'falhou'


$ ./dynip.py 
Traceback (most recent call last):
  File "./dynip.py", line 8, in <module>
    if client.login(login[0],login[1]):
  File "/usr/lib/python2.7/site-packages/pygodaddy/client.py", line 99, in login
    r = self.session.get(self.default_url)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 501, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

لا يؤدي الرجوع إلى إصدار الشهادات على النحو الذي اقترحه

# pip list
Babel (2.3.4)
beautifulsoup4 (4.5.1)
blinker (1.4)
certifi (2016.9.26)
cffi (1.9.1)
chardet (2.3.0)
click (6.6)
cryptography (1.5.3)
cssselect (0.9.2)
decorator (4.0.10)
django-htmlmin (0.9.1)
dnspython (1.14.0)
enum34 (1.1.6)
extras (1.0.0)
first (2.0.1)
fixtures (3.0.0)
Flask (0.11.1)
Flask-Babel (0.11.1)
Flask-Gravatar (0.4.2)
Flask-Login (0.3.2)
Flask-Mail (0.9.1)
Flask-Principal (0.4.0)
Flask-Security (1.7.5)
Flask-SQLAlchemy (2.1)
Flask-WTF (0.12)
gps (3.16)
gssapi (1.2.0)
html5lib (1.0b3)
idna (2.1)
importlib (1.0.4)
iniparse (0.4)
ipaclient (4.3.2)
ipaddress (1.0.17)
ipalib (4.3.2)
ipaplatform (4.3.2)
ipapython (4.3.2)
itsdangerous (0.24)
Jinja2 (2.8)
jwcrypto (0.3.2)
kitchen (1.2.4)
linecache2 (1.0.0)
lockfile (0.12.2)
lxml (3.6.4)
M2Crypto (0.25.1)
MarkupSafe (0.23)
munch (2.0.4)
ndg-httpsclient (0.4.2)
netaddr (0.7.18)
nose (1.3.7)
numpy (1.11.1)
passlib (1.6.5)
pbr (1.10.0)
pif (0.7.3)
Pillow (3.3.1)
pip (8.1.2)
pip-tools (1.7.0)
ply (3.9)
psutil (4.3.0)
psycopg2 (2.6.2)
pwquality (1.3.0)
pyasn1 (0.1.9)
pyasn1-modules (0.0.8)
pycparser (2.17)
pycrypto (2.6.1)
pycurl (7.43.0)
pygobject (3.20.1)
pygodaddy (0.2.2)
pygpgme (0.3)
pyliblzma (0.5.3)
pyOpenSSL (16.2.0)
pyrsistent (0.11.13)
PySocks (1.5.7)
python-dateutil (2.5.3)
python-fedora (0.8.0)
python-ldap (2.4.27)
python-mimeparse (1.5.2)
python-nss (1.0.0)
python-yubico (1.3.2)
pytz (2016.6.1)
pyusb (1.0.0)
pyxattr (0.5.5)
qrcode (5.3)
reportlab (3.3.0)
requests (2.12.1)
requests-file (1.4.1)
rpm-python (4.13.0)
scdate (1.10.9)
setuptools (28.8.0)
simplejson (3.8.2)
six (1.10.0)
slip (0.6.4)
speaklater (1.3)
SQLAlchemy (1.0.14)
sqlparse (0.2.1)
SSSDConfig (1.14.2)
Terminator (0.98)
testscenarios (0.5.0)
testtools (2.2.0)
tldextract (2.0.2)
traceback2 (1.4.0)
typing (3.5.2.2)
uniconvertor (2.0)
unittest2 (1.1.0)
urlgrabber (3.10.1)
urllib3 (1.16)
Werkzeug (0.11.11)
WTForms (2.1)
yum-metadata-parser (1.1.4)

يقدم GoDaddy لك سلسلة شهادات غير مكتملة. هذا يعني أننا نفتقد إحدى الشهادات الوسيطة ولا يمكننا إنشاء سلسلة ثقة. ستحتاج إما إلى إضافة شهادة الوسيط المفقودة إلى مخزن الشهادات الموثوق به أو ستحتاج إلى الاتصال بـ GoDaddy وإخبارهم بفرز الفوضى.

Lukasa كيف يمكن التحقق مما إذا كانت المشكلة تتعلق بالطلبات أو جهة إصدار الشهادة؟
لديّ شهادة واحدة صادرة عن Entrust ومتصفحاتي متوافقة تمامًا معها عندما أتصفح عنوان URL.
ولكن عندما أحاول الوصول إلى عنوان URL هذا عبر الطلبات ، يكون لديّ [SSL: CERTIFICATE_VERIFY_FAILED]

التتبع الكامل

$ python main.py
Traceback (most recent call last):
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen
    chunked=chunked)
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 350, in _make_request
    self._validate_conn(conn)
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 835, in _validate_conn
    conn.connect()
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/packages/urllib3/connection.py", line 323, in connect
    ssl_context=context)
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/packages/urllib3/util/ssl_.py", line 324, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 376, in wrap_socket
    _context=self)
  File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 747, in __init__
    self.do_handshake()
  File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 983, in do_handshake
    self._sslobj.do_handshake()
  File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 628, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py", line 624, in urlopen
    raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "main.py", line 64, in <module>
    r = s.get('https://infoproducts.alcatel-lucent.com/cgi-bin/get_doc_list.pl?entry_id=1-0000000000662&srch_how=&srch_str=&release=&model=&category=&contype=&format=&sortby=&how=all_prod',
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/sessions.py", line 501, in get
    return self.request('GET', url, **kwargs)
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/Users/romandodin/venvs/nokdok/lib/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

الحزم المثبتة

$ pip list
certifi (2016.9.26)
pip (9.0.1)
requests (2.12.4)
setuptools (32.3.1)
wheel (0.29.0)

تفاصيل الشهادة

Subject infoproducts.alcatel-lucent.com
SAN infoproducts.alcatel-lucent.com
documentation.alcatel-lucent.com
Valid From Thu, 01 Dec 2016 13:15:08 GMT
Valid Until Sat, 01 Dec 2018 13:45:07 GMT
Issuer Entrust Certification Authority - L1K

من شبه المؤكد أن المشكلة ليست مع المُصدر ، ولكن مع الخادم الخاص بك. هل يمكنك أن تريني ناتج تشغيل openssl s_client -connect "<your-host>:<your-port>" -showcerts -servername "<your-host>" على الخادم الخاص بك من فضلك؟

لست متأكدًا من أنني استخدمت الأمر بشكل صحيح ، ولكن هذا في بعض الأحيان:

$ openssl s_client -connect "infoproducts.alcatel-lucent.com:443" -showcerts -servername "infoproducts.alcatel-lucent.com"
CONNECTED(00000003)
depth=0 /C=US/ST=Illinois/L=Naperville/O=Alcatel-Lucent USA Inc./CN=infoproducts.alcatel-lucent.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /C=US/ST=Illinois/L=Naperville/O=Alcatel-Lucent USA Inc./CN=infoproducts.alcatel-lucent.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 /C=US/ST=Illinois/L=Naperville/O=Alcatel-Lucent USA Inc./CN=infoproducts.alcatel-lucent.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Illinois/L=Naperville/O=Alcatel-Lucent USA Inc./CN=infoproducts.alcatel-lucent.com
   i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
-----BEGIN CERTIFICATE-----
MIIFeDCCBGCgAwIBAgIRAO3KTvH+nKgrAAAAAFDanDYwDQYJKoZIhvcNAQELBQAw
gboxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL
Ex9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg
MjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxLjAs
BgNVBAMTJUVudHJ1c3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBMMUswHhcN
MTYxMjAxMTMxNTA4WhcNMTgxMjAxMTM0NTA3WjCBgTELMAkGA1UEBhMCVVMxETAP
BgNVBAgTCElsbGlub2lzMRMwEQYDVQQHEwpOYXBlcnZpbGxlMSAwHgYDVQQKExdB
bGNhdGVsLUx1Y2VudCBVU0EgSW5jLjEoMCYGA1UEAxMfaW5mb3Byb2R1Y3RzLmFs
Y2F0ZWwtbHVjZW50LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AK23xiJ/GCWNJa8Oa6SAYwT7QTmIJOXGrfLLZM9ZWDK81SVLm5xUAVRYaYmb3t/U
KpzeUoL+cJIa2xJGdbj50ehUTbB3SOXW7dxr15fuWahSChqaNkI/NClNAxy2Vho5
HxEtsjmuoJ0cNRcZLHZndLtWi27js3ivGxFxUcl7O3rGGj9yb+XXwJvEOsITPfZ/
gpURnHfAurZrw1+xpsArQVOF6+K6KkPnjGoCj0XCyU3LnWc6akcwwwV+HXcW8H5G
/CPvcm3DpI+45v/P2vVJ9+LiEJVHngVYK2QQ8fMDrvS2vs563I4PLnnRds0eOJph
LfHmn87oSW5jCP3RnsW0czECAwEAAaOCAa4wggGqMA4GA1UdDwEB/wQEAwIFoDAT
BgNVHSUEDDAKBggrBgEFBQcDATAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js
LmVudHJ1c3QubmV0L2xldmVsMWsuY3JsMEsGA1UdIAREMEIwNgYKYIZIAYb6bAoB
BTAoMCYGCCsGAQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAIBgZn
gQwBAgIwaAYIKwYBBQUHAQEEXDBaMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5l
bnRydXN0Lm5ldDAzBggrBgEFBQcwAoYnaHR0cDovL2FpYS5lbnRydXN0Lm5ldC9s
MWstY2hhaW4yNTYuY2VyMEwGA1UdEQRFMEOCH2luZm9wcm9kdWN0cy5hbGNhdGVs
LWx1Y2VudC5jb22CIGRvY3VtZW50YXRpb24uYWxjYXRlbC1sdWNlbnQuY29tMB8G
A1UdIwQYMBaAFIKicHTdvFM/z3vU981/p2DGCky/MB0GA1UdDgQWBBT9w+iH+fpG
UJ0IMw1vVpn+91hk6jAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAgOcDq
0YsihBWAxA4WFIGkdB/JdOKLRQ0Hvc7KStgtdkB1AqkUv7oBnDCHesazw4vyWbjv
w7dBTtB95jq1ZHX6eHyUDUo2xBmjnaeb2lSAdVV6j10sl7lMfRQh7ba1Im0ibhfe
7gvBn0tUlmdGqqvDqokzV4lVX74Z9nKKKr5D9e3vJsb5AvbDC/eYguBK9Oy8EDa2
ZcuPve3mB68lVy5UDg21RVZE072qC0FlYhNasZlMVUUg7tgDMlynQeeoxHe7Rcic
pHANQxJqtN8/bsE2mO/ryRZALyC7mWeDvG522ZXMaKslwTUr+jokpyUF7tS786Pi
n4zJ/KNZK2suVwcK
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=Illinois/L=Naperville/O=Alcatel-Lucent USA Inc./CN=infoproducts.alcatel-lucent.com
issuer=/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
---
No client certificate CA names sent
---
SSL handshake has read 1556 bytes and written 466 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 48D3C9611E37C997182C4F123E21BCFD909D8D4BE887B44355866B80D44E1163
    Session-ID-ctx:
    Master-Key: 0A4A9E2A10E33EAA248541C39AC71F2F879310BAE141A4EA26F425D56C27099FB6D6572C2CCFC763FC743ECF99DABB5B
    Key-Arg   : None
    Start Time: 1483448892
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)
---
closed

نعم ، لذا فإن الخادم خاطئ.

هذه مشكلة شائعة حقًا مع TLS. يتم إجراء التحقق من صحة شهادة TLS من خلال إنشاء سلسلة شهادات تأخذنا أولاً من شهادة يمكن للخادم إثبات أن لديها المفتاح الخاص لـ ("الجزء") إلى شهادة نثق بها ("الجذر"). بالنسبة إلى OpenSSL ، توجد قاعدة إضافية: يجب أن يكون الجذر موقعًا ذاتيًا.

في معظم الحالات ، يبلغ طول هذه السلسلة أكثر من خطوتين: أي أن الورقة لم يتم توقيعها من قبل الجذر ، ولكن بدلاً من ذلك يتم توقيعها بواسطة ما يسمى الشهادة الوسيطة . قد يتم توقيع هذا الوسيط نفسه بواسطة الجذر ، ولكن قد يتم أيضًا توقيعه بواسطة وسيطة أخرى ، حتى نصل في النهاية إلى وسيط تم توقيعه بواسطة الجذر.

على سبيل المثال ، بالنسبة إلى https://python-hyper.org ، تكون السلسلة كما يلي:

  1. python-hyper.org ، "الورقة" ، التي تقدمت للحصول عليها وأصدرتها
  2. Let's Encrypt Authority X3 ، شهادة وسيطة يستخدمها مشروع Let's Encrypt
  3. DST Root CA X3 ، الشهادة الجذر التي يثق بها مستعرض الويب (والطلبات)

يجب أن تكون السلسلة الصحيحة للموقع الذي تدخل إليه:

  1. infoproducts.alcatel-lucent.com ، الورقة
  2. مرجع تصديق Entrust - L1K ، الشهادة الوسيطة التي أصدرت الورقة
  3. Entrust Root Certification Authority - G2 ، الشهادة الجذر التي أصدرت الوسيط

بالنسبة لحالة الاستخدام الخاصة بك ، يتم شحن الطلبات مع الشهادة رقم 3 في قاعدة بيانات الثقة الخاصة بها كجذر موثوق به. ومع ذلك ، يرسل الخادم الخاص بك فقط رقم الشهادة 1. لا يمكن أن تنتقل الطلبات من الشهادة 1 إلى الشهادة 3 بدون الحصول على الشهادة 2 ، ولا يرسلها الخادم. تأتي معظم المتصفحات بشهادات وسيطة شائعة الاستخدام ، أو يمكنها الاحتفاظ بذاكرة تخزين مؤقت لها ، لكن الطلبات لا يمكنها القيام بذلك ، لذلك ليس لديها طريقة للحصول على الشهادة 2. بدون الشهادة 2 ، يجب أن تفشل عملية التحقق من الصحة.

ترسل خوادم TLS المهيأة بشكل صحيح شهادة طرفية وجميع الوسطاء الضروريين . هذا لضمان أن العملاء الذين لم يروا الوسطاء من قبل والذين لا يستطيعون جلبهم ديناميكيًا لا يزالون قادرين على التحقق من صحة السلسلة. على سبيل المقارنة ، تحقق من إخراج أمر مثل الأمر الذي تديره مقابل python-hyper.org :

% openssl s_client -connect python-hyper.org:443 -showcerts -servername "python-hyper.org"
CONNECTED(00000003)
depth=1 /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/CN=python-hyper.org
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
MIIFBDCCA+ygAwIBAgISAwji03rFoFMPZnEC0rLc7jg3MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNzAxMDExMjA4MDBaFw0x
NzA0MDExMjA4MDBaMBsxGTAXBgNVBAMTEHB5dGhvbi1oeXBlci5vcmcwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjF6VMEOe2qHsdbAnYstunDCW5/fBx
yhzNAxSqZKA5qfATdvhDmiPFnHJkQgUkUeGDwbBwemxuUFUaGZKTJDRhlrymLSkN
hkcouBzs/mxDjNlKacokJBm3hpu+oxYohhxPIZBs8NM4olUPDSG68r6sd1EwR+Ia
Lw//nRsMpcrGNmYy+howiBvV3CbuYsbgB59bJ+5y6G2ZqeHMwzFZ+No1oQmBck9T
KAvCh5TteQphzcM9s9NZiB6Z9C0s+vBPKOc1uLssCI3hfr29Af203CX2xgyBjXH7
M4WS17o1zLgs3Q2V03gQ7AmhtgjuJ+2NRf/d6Bsmk8ZhGnyyf+qbY+G/AgMBAAGj
ggIRMIICDTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
AQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMD50AC8wul1eNKkGVxaAvXb
DSkDMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAGCCsGAQUFBwEB
BGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0
Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlw
dC5vcmcvMBsGA1UdEQQUMBKCEHB5dGhvbi1oeXBlci5vcmcwgf4GA1UdIASB9jCB
8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIBFhpodHRw
Oi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtUaGlzIENl
cnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlpbmcgUGFy
dGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRpZmljYXRl
IFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9yZXBvc2l0
b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAgX00tBHyz9GiDQjw+Id7sbT1lrtHrmtR
DB+kofnq9pkwIExDXT0bAZ14EnU6atiVqhF3j3KxvxIfbNvmSr7emmhPwt+KqOf7
/1m+gxg3ode9LIg6oLtVOfulecxkS4/Wj990O40vuRNdy4XT4PSNze8iuJtGALoS
U9kP8G/V6VnrdbTYhSIIUW9nm0XQcOUbvupFWtiwE8vZw4t0pQloeECdMuALgVO/
1xSu0kqZgidLOkFwei/xqItx7foREzVvq3kUHD1OAuPI1azHQjErQC3N12OmxmBU
3KDOsaJC2Uu8fqI/y1YOkO97hpsgFZX4BiQNaNhtyy7sscD/teVhWQ==
-----END CERTIFICATE-----
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=python-hyper.org
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
---
SSL handshake has read 2638 bytes and written 451 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: BBDF2CA65B2142C1F0C416B28C4FDF8FD5118ED4D5FF8802789D0B54C6309469
    Session-ID-ctx: 
    Master-Key: BD9B8B97EC439248CC5849EBF4B2ED18E0A73472EB8D86FE6F038C4E6944AFD8A163D80D47A3A3B28A6237A44C1B31CE
    Key-Arg   : None
    Start Time: 1483447980
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

علما بأن أرسل الملقم شهادتين في حالتي، في حين أنها أرسلت لك واحد فقط.

هذا هو الخطأ. يرجى إعادة تكوين الخادم الخاص بك لإرسال جميع الوسطاء ذوي الصلة بالإضافة إلى الصفحة.

أثناء وجودي هنا ، يجب أن أشير إلى أن تشغيل Qualys SSL Labs على الخادم الخاص بك كان سيخبرك أيضًا عن هذه المشكلة. =)

شكرًا Lukasa على هذا الرد التعليمي الذي قدمته! نقدر حقًا ونأسف للإزعاج من هذا الأمر ، فقد كان TLS-Knowledge-gap =) في الغالب ذهبت إلى المشكلات لأن كل شيء كان جيدًا في المتصفحات ولم يعمل في الطلبات. ولكن الآن من الواضح لي ما هو السبب الجذري.

أعتقد أنه لا يوجد حل بديل (تنزيل الشهادة المتوسطة مقدمًا) لهذه الحالة ، ولكن لإعادة تكوين الخادم؟ في الوقت الحالي سأتخطى فحوصات التحقق

hellt لا داعي للاعتذار: هذا شيء غير واضح للغاية وهو خطأ شائع حقًا ، لذا فأنت في شركة جيدة هنا. =)

هناك حل ، في الواقع. يمكنك تمرير حزمة شهادة إلى verify لتجاوز استخدام حزمة الشهادة. يمكن أن تحتوي هذه الحزمة ، بالإضافة إلى شهادات الجذر ، على شهادات وسيطة أصبحت متاحة لـ OpenSSL لاستخدامها في بناء السلسلة. نتيجةً لذلك ، ما يمكنك فعله هو أخذ سلسلة certifi (الموجودة في ملف يمكنك العثور عليها عن طريق تشغيل python -c 'import certifi; print(certifi.where())' ، وانسخ ذلك إلى مكان آخر على نظام الملفات الخاص بك ، ثم أضف الشهادة الوسيطة إلى نهاية هذا الملف. يجب أن يكون الوسيط بتنسيق PEM. إذا مرر المسار إلى حزمة الشهادة الجديدة إلى verify kwarg ، فستجد أن كل شيء يبدأ في العمل.

لوكا ،
ماذا لو حصلت على هذا النوع من الخطأ ؛
شهادة تثبيت النقطة
تحصيل الشهادة
تعذر جلب عنوان URL https://pypi.python.org/simple/certifi/ : حدثت مشكلة في تأكيد شهادة SSL: [Errno 2] لا يوجد ملف أو دليل من هذا القبيل - تخطي
تعذر العثور على إصدار يلبي متطلبات الشهادة (من الإصدارات:)
لم يتم العثور على توزيع مطابق للشهادة

س

يبدو أنك تواجه مشكلة في التحقق من صحة شهادات TLS من PyPI. ومع ذلك ، فإن رسالة الخطأ هذه مفاجئة بعض الشيء. لا أعرف تمامًا من أين أتت ، لكنها تشير إلى وجود مشكلة إما في طريقة تكوين النقطة أو في بايثون. هل تواجه أخطاء مماثلة مع حزم Python الأخرى؟

اهلا جميعا،
أحاول إجراء مصادقة kerberos باستخدام Python داخل شبكة الإنترانت الخاصة بمؤسستي ولكني أحصل على هذا الخطأ.

طلبات الاستيراد
من request_kerberos استيراد HTTPKerberosAuth
r = request.get ("https: * * * * * "، auth = HTTPKerberosAuth ())

خطأ SSLE: ("تأكيد الاتصال السيئ: خطأ ([('إجراءات SSL'، 'ssl3_get_server_certificate'، 'فشل التحقق من الشهادة')]،)"،)

هل يعرف أحد كيفية إضافة شهادات لبايثون؟ هل سيساعد ذلك في حل هذا؟

@ ajitmuley5 أثناء استخدام الطلبات ، تنتمي الأسئلة مثل أسئلتك إلى StackOverflow. يرجى نشر هذا هناك بالمقدار المطلوب من التفاصيل. هناك أشخاص سيسعدون بمساعدتك دون بدء المناقشات حول القضايا القديمة والمغلقة.

@ لوكاسا شكرا! sudo pip install - طلبات U [الأمان] عملت بالنسبة لي.

شكرا للجميع ، لدي بعض الأفكار!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

jakul picture jakul  ·  3تعليقات

NoahCardoza picture NoahCardoza  ·  4تعليقات

JimHokanson picture JimHokanson  ·  3تعليقات

tiran picture tiran  ·  3تعليقات

ReimarBauer picture ReimarBauer  ·  4تعليقات