Permintaan Python melempar SSLError

349

Saya sedang mengerjakan skrip sederhana yang melibatkan CAS, pemeriksaan keamanan jspring, pengalihan, dll. Saya ingin menggunakan permintaan python Kenneth Reitz karena ini adalah pekerjaan yang hebat! Namun, CAS mengharuskan untuk divalidasi melalui SSL jadi saya harus melewati langkah itu terlebih dahulu. Saya tidak tahu apa yang diinginkan permintaan Python? Di mana seharusnya sertifikat SSL ini berada?

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
TedBurrows
sumber
Bisakah Anda membagikan lebih banyak informasi kode? Sepertinya ada langkah yang hilang.
TankorSmash
5
Anda harus selalu menyebutkan versi perangkat lunak yang membutuhkan bantuan.
Piotr Dobrogost
Saya mendapat masalah ini di mana saya menggunakan python 3.5 tornado 4.4. HTTPRequest mengatur validate_cert = True, sehingga Anda dapat mengaturnya False untuk menghadapinya
pan7an
Coba ini: requests.get (' example.com ', verifikasi = certifi.where ())
Nei

Jawaban:

460

Masalah yang Anda alami disebabkan oleh sertifikat SSL yang tidak dipercaya.

Seperti @dirk yang disebutkan dalam komentar sebelumnya, perbaikan tercepat adalah pengaturan verify=False:

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

Harap dicatat bahwa ini akan menyebabkan sertifikat tidak diverifikasi. Ini akan memaparkan aplikasi Anda pada risiko keamanan, seperti serangan man-in-the-middle.

Tentu saja, terapkan penilaian. Seperti disebutkan dalam komentar, ini mungkin dapat diterima untuk aplikasi / skrip cepat / sekali pakai, tetapi sebenarnya tidak boleh pergi ke perangkat lunak produksi .

Jika hanya melewatkan pemeriksaan sertifikat tidak dapat diterima dalam konteks khusus Anda, pertimbangkan opsi berikut, opsi terbaik Anda adalah mengatur verifyparameter ke string yang merupakan jalur .pemfile sertifikat (yang harus Anda peroleh dengan semacam pengamanan cara).

Jadi, pada versi 2.0, verifyparameter menerima nilai berikut, dengan semantik masing-masing:

  • True: menyebabkan sertifikat divalidasi terhadap otoritas sertifikat tepercaya perpustakaan itu sendiri (Catatan: Anda dapat melihat Permintaan Sertifikat Akar mana yang digunakan melalui perpustakaan Certifi, basis data kepercayaan RC yang diekstraksi dari Permohonan: Certifi - Database Kepercayaan untuk Manusia ).
  • False: melewati validasi sertifikat sepenuhnya .
  • Jalur ke file CA_BUNDLE untuk Permintaan yang akan digunakan untuk memvalidasi sertifikat.

Sumber: Permintaan - Verifikasi Sertifikat SSL

Lihat juga certparameter pada tautan yang sama.

Rafael Almeida
sumber
1
Ya, ketika saya menggunakan dotCloud di ubuntu, "sertifikat verifikasi gagal" yang sama keluar. Setelah "requests.session diubah (header = header, kait = kait, verifikasi = Salah)" di "/usr/local/lib/python2.6/dist-packages/dotcloud/client/client.py", berhasil.
diyism
2
Ini tidak ditandai sebagai benar, tetapi saya dapat memverifikasi bahwa itu berfungsi (sebagai lawan dari jawaban di bawah).
khalid13
40
@ khalid13: Kapak "berfungsi" sebagai obat sakit kepala (tanpa kepala - tanpa sakit kepala). Itu tidak berarti bahwa itu adalah ide yang baik untuk menggunakannya dengan cara itu. verify=Falsemenonaktifkan pemeriksaan sertifikat SSL host.
jfs
24
@ JSFSebastian Jujur, itu tergantung pada apa yang Anda lakukan. Untuk aplikasi cepat / sekali pakai saya, itu sudah lebih dari cukup.
khalid13
5
@diyisme membuat perubahan seperti itu terdengar sangat tidak aman ...
binki
111

Dari dokumentasi permintaan pada verifikasi SSL :

Permintaan dapat memverifikasi sertifikat SSL untuk permintaan HTTPS, seperti halnya browser web. Untuk memeriksa sertifikat SSL host, Anda dapat menggunakan argumen verifikasi:

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

Jika Anda tidak ingin memverifikasi sertifikat SSL Anda, buat verify=False

Dengan keras
sumber
4
Yah, saya menambahkan verifikasi = Benar, tetapi masih menerima kesalahan yang sama persis. Tidak ada perubahan. Sesuatu yang lain harus diminta, tetapi tidak tahu seperti apa itu.
TedBurrows
Saya kira saya sekarang telah turun ke kegilaan SSL. Saya menambahkan ini ke get awal saya ... get (url1, header = header, cert = '/ etc / pki / tls / cert.pem', verifikasi = Benar, config = my_config) Jadi, sekarang saya mendapatkan kesalahan ini. requests.exceptions.SSLERror: [Errno 336265225] _ssl.c: 351: error: 140B0009: rutinitas SSL: SSL_CTX_use_PrivateKey_file: PEM lib Saya belum tahu apa artinya ini.
TedBurrows
14
Cukup setel verifikasi = Salah jika Anda tidak ingin memvalidasi sertifikat, iow jika Anda memiliki sertifikat yang ditandatangani sendiri
Dirk
16
Jika Anda memiliki sertifikat yang ditandatangani sendiri, unduh dan setel verifikasi ke nama filenya. Tidak ada alasan apa pun untuk pengaturan verifikasi = Salah. verifikasi = '/ path / ke / cert.pem'
Matthias Urlichs
14
Maaf Boud, saya harus memilih ini karena permintaan tidak menangani permintaan HTTPS "seperti browser web". Jika rantai kepercayaan SSL penuh (termasuk sertifikat perantara) tidak dinyatakan pada server dan memerlukan unduhan sertifikat tambahan, Anda akan menerima kesalahan verifikasi SSL di atas. Browser web akan melakukan unduhan tambahan dan tidak menandai kesalahan sertifikat apa pun. Ini adalah satu cara yang berbeda dari browser web dan Permintaan. Ada yang lain. Permintaan melakukan beberapa verifikasi, tetapi tidak sebagus browser.
Louis Cremen
53

Nama file CA untuk digunakan Anda dapat melewati verify:

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

Jika Anda menggunakan verify=Truemaka requestsgunakan CA sendiri yang mungkin tidak memiliki CA yang menandatangani sertifikat server Anda.

jfs
sumber
12
@ 9emE0iL18gxCqLT: mengapa Anda berpikir bahwa semua sistem menggunakan jalur yang Anda berikan? requestsdapat dikemas untuk distribusi Anda. Jalankan python -mrequests.certsuntuk mencari tahu ke mana itu menunjuk.
jfs
3
Jika bundel cacert permintaan Python sudah kedaluwarsa, bagaimana cara memperbaruinya?
CMCDragonkai
5
Anda seharusnya tidak menggunakannya cacert.pemdari curl. Ini berisi banyak sertifikat yang dicabut. Lihat Certifi (yang Diminta
Kenneth Reitz
3
@KennethReitz: 1- permintaan apa yang gagal digunakan untuk OP (jika tidak ada pertanyaan) 2- cacert.pemadalah sertifikat CA diekstraksi dari Mozilla (oleh cURL) - itu hanya sebuah contoh (jika daftar CA digunakan oleh web populer -browser tidak dapat digunakan sebagai contoh maka saya tidak tahu apa yang bisa menjadi) - titik jawaban bahwa Anda dapat melewati file CA Anda sendiri jika daftar default gagal.
jfs
Bisakah Anda melakukan ini dan menggunakan sertifikat klien secara bersamaan? Saya mendapatkan masalah dengan ini.
user1156544
42

$ pip install -U requests[security]

  • Diuji pada Python 2.7.6 @ Ubuntu 14.04.4 LTS
  • Diuji pada Python 2.7.5 @ MacOSX 10.9.5 (Mavericks)

Ketika pertanyaan ini dibuka (2012-05) versi Permintaan adalah 0.13.1. Pada versi 2.4.1 (2014-09) ekstra "keamanan" diperkenalkan, menggunakan certifipaket jika tersedia.

Saat ini (2016-09) versi utamanya adalah 2.11.1, yang berfungsi baik tanpa verify=False . Tidak perlu digunakan requests.get(url, verify=False), jika dipasang dengan requests[security]ekstra.

alanjd
sumber
7
diperbaiki oleh pip install -U requests[security] --no-cachedua kali danpip install certifi==2015.04.28
Aamir Abro
@alanjds Bagaimana jika saya ingin mengkonfigurasi python untuk mempercayai beberapa ssl cert atau menonaktifkan verifikasi sertifikat tetapi secara global di lingkungan, tanpa mengedit kode sumber? Sebagai contoh jika saya mengunduh utilitas Python yang ada (misalnya AWS CLI) dan saya ingin mempercayai sertifikat atau mengabaikan validasi sertifikat untuk alat-alat itu?
Howiecamp
@Howiecamp maka Anda dapat pergi melalui jf-sebastian jawaban, saya kira: stackoverflow.com/a/12865159/798575
alanjds
@alanjds Tapi bukankah jawabannya menganggap saya sedang menulis kode dan / atau memiliki akses ke kode? Saya ingin menerapkan ini di tingkat lingkungan.
Howiecamp
3
lakukan pip install --upgrade pipsebelum menginstal paket keamanan permintaan untuk menghindari kesalahan lain
Vincent Claes
40

Saya mengalami masalah yang sama dan sertifikat ssl memverifikasi masalah gagal ketika menggunakan aws boto3, dengan meninjau kode boto3, saya menemukan REQUESTS_CA_BUNDLEitu tidak diatur, jadi saya memperbaiki kedua masalah dengan mengaturnya secara manual:

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')

Untuk aws-cli, saya kira pengaturan REQUESTS_CA_BUNDLE di ~/.bashrcakan memperbaiki masalah ini (tidak diuji karena aws-cli saya berfungsi tanpanya).

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE
Yong
sumber
2
Ini memperbaiki masalah saya! Saya menggunakan Charles Proxy di Mac untuk men-debug perpustakaan yang membuat panggilan JSON ke HTTPS API. Saya memasang sertifikat Charless seperti yang ditentukan, menambahkannya ke gantungan kunci, tetapi Python terus gagal dengan: SSLError: ("bad handshake: Error ([('SSL rutin', 'ssl3_get_server_certificate', 'verifikasi sertifikat gagal')],)" ,) Untuk memperbaikinya, saya akhirnya mengikuti saran Anda tentang menambahkan REQUESTS_CA_BUNDLE dan mengekspor sertifikat Charles dari gantungan kunci saya sebagai file .pem. Sekarang berhasil!
mallyvai
Terima kasih, masalah yang sama terjadi pada Fiddler yang dibuka
user565447
@ user565447 Saya mencoba agar ini berfungsi dengan Fiddler sekarang. Haruskah mengatur REQUESTS_CA_BUNDLE ke Fiddler's cert work?
Howiecamp
19

Jika Anda memiliki perpustakaan yang bergantung pada requestsdan Anda tidak dapat memodifikasi jalur verifikasi (seperti dengan pyvmomi) maka Anda harus menemukan cacert.pembundel dengan permintaan dan menambahkan CA Anda di sana. Berikut ini pendekatan umum untuk menemukan cacert.pemlokasi:

windows

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

linux

#  (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. @ request-devs, mem-bundle cacerts Anda sendiri dengan permintaan benar-benar menjengkelkan ... terutama fakta bahwa Anda tampaknya tidak menggunakan sistem ca store terlebih dahulu dan ini tidak didokumentasikan di mana pun.

memperbarui

dalam situasi, di mana Anda menggunakan perpustakaan dan tidak memiliki kendali atas lokasi bundel, Anda juga bisa secara eksplisit mengatur lokasi bundel menjadi kumpulan bundel host Anda:

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-bundle.crt python -c "import requests; requests.get('https://somesite.com';)"
tintin
sumber
Seratus kali ini: kunci ketidakmampuan untuk memodifikasi verifyjalur.
ghukill
Bagaimana jika Anda menggunakan sertifikat yang ditandatangani sendiri? Akan seperti apa CA dalam kasus itu?
user1114
Pembaruan kecil - untuk python 3.6, harus ada tanda kurung untuk perintah cetak - python -c "permintaan impor; cetak (requests.certs.where ())"
user1114
15

Saya menghadapi masalah yang sama menggunakan gspread dan perintah ini berfungsi untuk saya:

sudo pip uninstall -y certifi
sudo pip install certifi==2015.04.28
pengguna941581
sumber
Ini berhasil untukku. Terima kasih :)
alex-mcleod
4
Ini memiliki kelemahan menginstal ulang sertifikat yang berpotensi dicabut / tidak dipercaya dari versi yang lebih lama dari sertifikasi, TIDAK direkomendasikan.
dragon788
jika karena alasan tertentu Anda dipaksa untuk tetap menggunakan versi awal python 2.7, menurunkan sertifikasi adalah satu-satunya pendekatan yang bekerja untuk saya
lihat
15

Jika Anda ingin menghapus peringatan, gunakan kode di bawah ini.

import urllib3

urllib3.disable_warnings()

dan verify=Falsedengan request.getatau postmetode

AniketGole
sumber
12

Saya telah menemukan pendekatan khusus untuk menyelesaikan masalah yang sama. Idenya adalah menunjuk file cacert yang disimpan di sistem dan digunakan oleh aplikasi berbasis ssl lain.

Di Debian (saya tidak yakin apakah sama di distribusi lain) file sertifikat (.pem) disimpan di /etc/ssl/certs/Jadi, ini adalah kode yang berfungsi untuk saya:

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

Untuk menebak pemfile apa yang dipilih, saya telah menelusuri url dan memeriksa Otoritas Sertifikat (CA) mana yang telah menghasilkan sertifikat.

EDIT: jika Anda tidak dapat mengedit kode (karena Anda menjalankan aplikasi ketiga), Anda dapat mencoba menambahkan pemsertifikat langsung ke /usr/local/lib/python2.7/dist-packages/requests/cacert.pem(misalnya menyalinnya ke akhir file).

chk
sumber
2
Pos terkait untuk debugging CA_BUNDLE digunakan oleh python.
chk
Bagaimana dengan mengganti /usr/local/lib/python2.7/dist-packages/requests/cacert.pemdengan symlink ke OS store?
CMCDragonkai
8

Jika Anda tidak peduli tentang sertifikat, gunakan saja verify=False.

import requests

url = "Write your url here"

returnResponse = requests.get(url, verify=False)
yogesh prasad
sumber
7

Setelah berjam-jam melakukan debug, saya hanya bisa membuatnya bekerja menggunakan paket berikut:

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

menggunakan OpenSSL 1.0.2g 1 Mar 2016

Tanpa paket-paket ini verify=False ini tidak berfungsi.

Saya harap ini membantu seseorang.

michael
sumber
5

Saya mengalami masalah yang sama. Ternyata saya belum menginstal sertifikat perantara di server saya (cukup tambahkan ke bagian bawah sertifikat Anda seperti yang terlihat di bawah).

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

Pastikan Anda telah menginstal paket ca-sertifikat:

sudo apt-get install ca-certificates

Memperbarui waktu juga dapat menyelesaikan ini:

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

Jika Anda menggunakan sertifikat yang ditandatangani sendiri, Anda mungkin harus menambahkannya ke sistem Anda secara manual.

Marius Craciunoiu
sumber
Catatan, ini hanya berlaku untuk instalasi Permintaan melalui apt-get, yang dimodifikasi oleh Debian / Ubuntu untuk menggunakan sertifikat sistem. Meminta kapal yang tepat dengan bundel CA miliknya yang telah dikuratori dengan cermat: certifi.io
Kenneth Reitz
Bukankah seharusnya root CA cukup? Mengapa Anda membutuhkan perantara?
timmy
5

Jika panggilan permintaan terkubur di suatu tempat jauh di dalam kode dan Anda tidak ingin menginstal sertifikat server, maka, hanya untuk keperluan debug saja , dimungkinkan untuk melakukan monkeypatch permintaan:

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!')

Jangan pernah gunakan dalam produksi!

xmedeko
sumber
4

Terlambat ke pesta, kurasa tapi aku ingin menempelkan perbaikan untuk sesama pengembara seperti diriku! Jadi, berikut ini berhasil bagi saya di Python 3.7.x

Ketikkan yang berikut di terminal Anda

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

Coba jalankan kembali skrip / permintaan Anda dan lihat apakah itu berfungsi (saya yakin itu belum diperbaiki!). Jika tidak berhasil maka coba jalankan perintah berikut di terminal secara langsung

open /Applications/Python\ 3.6/Install\ Certificates.command  # please replace 3.6 here with your suitable python version
d-coder
sumber
3

Saya berjuang masalah ini selama JAM.

Saya mencoba memperbarui permintaan. Kemudian saya memperbarui sertifikat. Saya menunjuk memverifikasi ke certifi.where () (Kode melakukan ini secara default lagian). Tidak ada yang berhasil.

Akhirnya saya memperbarui versi python saya ke python 2.7.11. Saya menggunakan Python 2.7.5 yang memiliki beberapa ketidakcocokan dengan cara sertifikat diverifikasi. Setelah saya memperbarui Python (dan beberapa dependensi lainnya) mulai bekerja.

sedikit
sumber
Jika Anda memperbarui OpenSSL ke versi> 1.0.1, maka mungkin itu masalahnya. Lihat jawaban saya di bawah. stackoverflow.com/a/44543047/1413201
Tim Ludwinski
Mulai dari Python 2.7.9 ke 2.7.10 memperbaiki ini untuk saya.
crazystick
3

Ini mirip dengan jawaban @ rafael-almeida, tapi saya ingin menunjukkan bahwa pada permintaan 2.11+, tidak ada 3 nilai yang verifydapat diambil, sebenarnya ada 4:

  • True: memvalidasi terhadap CA tepercaya permintaan internal.
  • False: melewati validasi sertifikat sepenuhnya . (Tidak direkomendasikan)
  • Path ke file CA_BUNDLE. permintaan akan menggunakan ini untuk memvalidasi sertifikat server.
  • Path ke direktori yang berisi file sertifikat publik. permintaan akan menggunakan ini untuk memvalidasi sertifikat server.

Sisa jawaban saya adalah tentang # 4, cara menggunakan direktori yang berisi sertifikat untuk memvalidasi:

Dapatkan sertifikat publik yang diperlukan dan letakkan di direktori.

Sebenarnya, Anda mungkin "harus" menggunakan metode out-of-band untuk memperoleh sertifikat, tetapi Anda juga bisa mengunduhnya menggunakan browser apa pun.

Jika server menggunakan rantai sertifikat, pastikan untuk mendapatkan setiap sertifikat tunggal dalam rantai tersebut.

Menurut dokumentasi permintaan, direktori yang berisi sertifikat harus terlebih dahulu diproses dengan utilitas "rehash" ( openssl rehash).

(Ini membutuhkan openssl 1.1.1+, dan tidak semua implementasi Windows openssl mendukung pengulangan. Jika openssl rehashtidak berhasil, Anda dapat mencoba menjalankan skrip pengulangan ruby ​​di https://github.com/ruby/openssl/blob/master /sample/c_rehash.rb , meskipun saya belum mencoba ini.)

Saya mengalami beberapa masalah dengan mendapatkan permintaan untuk mengenali sertifikat saya, tetapi setelah saya menggunakan openssl x509 -outform PEMperintah untuk mengubah sertifikat ke Base64.pem format , semuanya bekerja dengan sempurna.

Anda juga bisa hanya mengulangi dengan malas:

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")
cowlinator
sumber
2

Saat ini ada masalah dalam modul permintaan yang menyebabkan kesalahan ini, hadir dalam v2.6.2 hingga v2.12.4 (ATOW): https://github.com/kennethreitz/requests/issues/2573

Solusi untuk masalah ini adalah menambahkan baris berikut: 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'

Peter
sumber
FWIW, masih ada permintaan == 2.13.0. Solusi di atas masih memperbaikinya.
Tamás Szelei
1

Seperti disebutkan oleh @Rafael Almeida, masalah yang Anda alami disebabkan oleh sertifikat SSL yang tidak dipercaya. Dalam kasus saya, sertifikat SSL tidak dipercaya oleh server saya. Untuk menyiasatinya tanpa mengurangi keamanan, saya mengunduh sertifikat , dan memasangnya di server (hanya dengan mengklik dua kali pada file .crt lalu Instal Sertifikat ...).

Michael
sumber
0

Tidak mungkin menambahkan opsi jika permintaan dipanggil dari paket lain. Dalam hal itu menambahkan sertifikat ke bundel cacert adalah jalan yang lurus, misalnya saya harus menambahkan "StartCom Class 1 Server Intermediate Primer CA", yang saya unduh sertifikat root ke StartComClass1.pem. mengingat virtualenv saya bernama caldav, saya menambahkan sertifikat dengan:

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

salah satu dari mereka mungkin cukup, saya tidak memeriksa

rhoerbe
sumber
0

Saya mengalami masalah validasi sertifikasi yang sama atau sama. Saya membaca bahwa versi OpenSSL kurang dari 1.0.2, yang bergantung pada permintaan terkadang mengalami kesulitan untuk memvalidasi sertifikat yang kuat (lihat di sini ). CentOS 7 tampaknya menggunakan 1.0.1e yang tampaknya memiliki masalah.

Saya tidak yakin bagaimana mengatasi masalah ini pada CentOS, jadi saya memutuskan untuk mengizinkan sertifikat CA 1024bit yang lebih lemah.

import certifi # This should be already installed as a dependency of 'requests'
requests.get("https://example.com", verify=certifi.old_where())
Tim Ludwinski
sumber
Saya menggunakan Python 2.7.10 diinstal oleh ArcGIS dan tidak ada modul sertifikat yang diinstal. Modul permintaan yang diinstal ada di versi 2.11.1.
Lucas
0

Saya harus memutakhirkan dari Python 3.4.0 ke 3.4.6

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

Dalam kasus saya alasannya cukup sepele.

Saya telah mengetahui bahwa verifikasi SSL telah berfungsi hingga beberapa hari sebelumnya, dan ternyata bekerja pada mesin yang berbeda.

Langkah saya berikutnya adalah membandingkan konten dan ukuran sertifikat antara mesin tempat verifikasi berfungsi, dan yang tidak berfungsi.

Ini dengan cepat membuat saya menentukan bahwa Sertifikat pada mesin yang 'salah' itu tidak bagus, dan begitu saya menggantinya dengan sertifikat 'baik', semuanya baik-baik saja.

mastDrinkNimbuPani
sumber