Kesalahan SSL InsecurePlatform saat menggunakan paket Permintaan

237

Saya menggunakan Python 2.7.3 dan Permintaan. Saya menginstal Permintaan melalui pip. Saya percaya ini versi terbaru. Saya menggunakan Debian Wheezy.

Saya telah menggunakan Permintaan berkali-kali di masa lalu dan tidak pernah menghadapi masalah ini, tetapi tampaknya ketika membuat permintaan https dengan Requestssaya mendapatkan InsecurePlatformpengecualian.

Kesalahan menyebutkan urllib3, tapi saya tidak menginstalnya. Saya menginstalnya untuk memeriksa apakah itu menyelesaikan kesalahan, tetapi ternyata tidak.

/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3
/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not
available. This prevents urllib3 from configuring SSL appropriately and 
may cause certain SSL connections to fail. For more information, see 
https://urllib3.readthedocs.org/en/latest  
/security.html#insecureplatformwarning.

Ada ide mengapa saya mendapatkan ini? Saya telah memeriksa dokumen, sebagaimana ditentukan dalam pesan kesalahan, tetapi dokumen tersebut mengatakan untuk mengimpor urllib3 dan menonaktifkan peringatan, atau memberikan sertifikat.

Luke Peckham
sumber

Jawaban:

390

Gunakan fitur keamanan yang agak tersembunyi :

pip install requests[security] atau pip install pyOpenSSL ndg-httpsclient pyasn1

Kedua perintah menginstal paket tambahan berikut:

  • pyOpenSSL
  • kriptografi
  • idna

Harap dicatat bahwa ini tidak diperlukan untuk python-2.7.9 + .

Jika pip installgagal dengan kesalahan, periksa apakah Anda memerlukan paket pengembangan libffi, libssldan pythondiinstal di sistem Anda menggunakan manajer paket distribusi :

  • Debian / Ubuntu - python-dev libffi-dev libssl-devpaket.

  • Fedora - openssl-devel python-devel libffi-develpaket.

Daftar distro di atas tidak lengkap.

Penanganan masalah ( lihat jawaban asli oleh @TomDotTom ) :

Jika Anda tidak dapat menginstal beberapa paket pengembangan yang diperlukan, ada juga opsi untuk menonaktifkan peringatan itu:

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

Jika Anda pipsendiri dipengaruhi oleh InsecurePlatformWarningdan tidak dapat menginstal apa pun dari PyPI, ini dapat diperbaiki dengan panduan langkah demi langkah untuk menggunakan paket python tambahan secara manual.

plaes
sumber
3
Saya punya permintaan [keamanan], terminal baru, Python 2.7.3 dan masih mendapatkan kesalahan ini
Josh Nankin
45
Anda juga perlu menginstal perpustakaan tambahan pada sistem untuk Ubuntu / Debian:sudo apt-get install python-dev libffi-dev libssl-dev
therealmarv
2
Apakah boleh bahwa "pip" itu sendiri (menatap dari v6.1) memberikan peringatan keamanan yang sama?
jmster
5
tergantung pada cangkang Anda, Anda mungkin perlu mengetikpip install 'requests[security]'
C. Reed
5
di zshell, Anda perlu mengatakan: pip instal permintaan \ [keamanan \]
Amir Katz
68

Permintaan 2.6 memperkenalkan peringatan ini untuk pengguna python sebelum 2.7.9 dengan modul stok hanya tersedia.

Dengan asumsi Anda tidak dapat memutakhirkan ke versi python yang lebih baru, ini akan menginstal lebih banyak pustaka SSL python yang mutakhir:

pip install --upgrade ndg-httpsclient 

NAMUN, ini mungkin gagal pada beberapa sistem tanpa membangun-dependensi untuk pyOpenSSL. Pada sistem debian, menjalankan ini sebelum perintah pip di atas cukup untuk membangun pyOpenSSL:

apt-get install python-dev libffi-dev libssl-dev
Jessica Gadling
sumber
4
Saya perlu menginstal paket-paket ini 'python-dev libffi-dev libssl-dev' untuk ubuntu 14.04 juga.
Andy
Terima kasih! Saya telah menambahkan catatan ke dokumentasi: github.com/shazow/urllib3/pull/765
Wolfgang
@Jessica FTW! Terima kasih banyak - ini menjengkelkan.
Neal Magee
18

Saya tidak menggunakan ini dalam produksi, hanya beberapa pelari uji. Dan untuk mengulangi dokumentasi urllib3

Jika Anda tahu apa yang Anda lakukan dan ingin menonaktifkan ini dan peringatan lainnya

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

Edit / Perbarui:

Yang berikut ini juga harus berfungsi:

import logging
import requests

# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)
TomDotTom
sumber
1
Masalah dengan solusi ini adalah ia hanya menekan dan mengabaikan masalah yang sebenarnya. Selain itu, ini tidak akan berfungsi ketika menggunakan pip untuk menginstal atau meningkatkan paket.
Jason Parham
1
Satu-satunya solusi yang berfungsi untuk saya di ubuntu 1404 / Python 2.7.6. Terima kasih
Ignacio Vazquez
7

Jika Anda tidak dapat memutakhirkan versi Python Anda ke 2.7.9, dan ingin menekan peringatan,

Anda dapat menurunkan versi 'permintaan' Anda ke 2.5.3:

sudo pip install requests==2.5.3

Tentang versi: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html

raittes
sumber
8
Harap dicatat bahwa 2.5.3 memiliki masalah keamanan dengan penanganan cookie selama pengalihan.
plaes
2
Daripada memposting jawaban ini dua kali, Anda seharusnya menandai postingan lain sebagai duplikat. Sekarang saya sudah menutupnya.
Martijn Pieters
6
Saya kedua komentar untuk tidak downgrade karena kerentanan yang diketahui.
sergiopereira
7

Bahkan, Anda bisa mencoba ini.

requests.post("https://www.google.com", verify=False)

Anda dapat membaca kode untuk permintaan.

"C:\Python27\Lib\site-packages\requests\sessions.py"

class Session(SessionRedirectMixin):
......
 def request(self, method, url,
    params=None,
    data=None,
    headers=None,
    cookies=None,
    files=None,
    auth=None,
    timeout=None,
    allow_redirects=True,
    proxies=None,
    hooks=None,
    stream=None,
    verify=None,  # <========
    cert=None):
    """
    ...
    :param verify: (optional) if True, the SSL cert will be verified.
         A CA_BUNDLE path can also be provided.
    ...
    """
zzzz zzzz
sumber
2
Berhati - hatilah melakukan ini, tidak memverifikasi sertifikat dapat berbahaya!
jaapz
Tentu saja, tidak memverifikasi sertifikat akan berbahaya. Tapi kadang-kadang, ini adalah pilihan terakhir. Mis: easy_install, apt-get, yum atau pip ... jangan berlari, Atau lakukan sedikit Web Crawler ...
zzzz zzzz
1
Saya berada di lingkungan hosting bersama sehingga saya tidak dapat memutakhirkan python ke 2.7.9 dan saya tidak dapat menginstal libffi.pc dengan apt-get, yang diperlukan oleh permintaan pemasangan pip [keamanan] dan varian pemasangan pip lainnya atas. Jadi jawaban ini adalah yang bekerja untuk saya. Selama Anda memahami peringatan penting bahwa tanpa verifikasi https, konten halaman dapat diubah / dipalsukan, saya pikir jawaban ini baik-baik saja.
Chirael
5

Semua solusi yang diberikan di sini tidak membantu (saya terkendala oleh python 2.6.6). Saya telah menemukan jawabannya dalam saklar sederhana untuk beralih ke pip:

$ sudo pip install --trusted-host pypi.python.org <module_name>

Ini memberitahu pip bahwa tidak apa-apa untuk mengambil modul dari pypi.python.org.

Bagi saya, masalahnya adalah proksi perusahaan saya di balik firewall yang membuatnya tampak seperti klien jahat untuk beberapa server. Keamanan hore.


Pembaruan: Lihat jawaban @Alex untuk perubahan di domain PyPi, dan --trusted-hostopsi tambahan yang dapat ditambahkan. (Saya akan menyalin / menempel di sini, tetapi jawabannya, jadi memberi +1 padanya)

PfunnyGuy
sumber
Saya akhirnya dapat menginstal tensorflow menggunakan perintah ini, terima kasih banyak!
pedrobisp
3

Jawaban ini tidak terkait, tetapi jika Anda ingin menyingkirkan peringatan dan mendapatkan peringatan berikut dari permintaan:

InsecurePlatformWarning /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

Anda dapat menonaktifkannya dengan menambahkan baris berikut ke kode python Anda:

requests.packages.urllib3.disable_warnings()

daemonsl
sumber
Terima kasih untuk ini. Tidak ada jawaban lain yang bekerja untuk saya. Saya terpesona bahwa pesan menjengkelkan seperti itu akan dimasukkan secara default.
Dan
1

Saya harus pergi ke bash(dari ZSH) terlebih dahulu. Kemudian

sudo -H pip install 'requests[security]' --upgrade

memperbaiki masalah.

Martin Thoma
sumber
Saya tidak yakin. Saya pikir itu karena kurung
Martin Thoma
1

Ini muncul untuk saya di Ubuntu 14.04 (dengan Python 2.7.6) minggu lalu setelah saya melakukan apt-get dist-upgradeitu termasuk libssl1.1:amd64dari deb.sury.org.

Karena saya lari certbot-auto renewdari pekerjaan cron, saya juga menggunakan --no-self-upgradeuntuk mengurangi pemeliharaan yang tidak terjadwal. Ini tampaknya menjadi sumber masalah.

Untuk memperbaiki kesalahan, semua yang perlu saya lakukan adalah menjadi root (dengan su's --loginswitch) dan membiarkan certbot-autoupgrade sendiri. Yaitu:

sudo su --login
/usr/local/bin/certbot-auto renew 
# ... Upgrading certbot-auto 0.8.1 to 0.18.2... blah blah blah ...

alih-alih apa yang biasanya dijalankan dari crontab root:

5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade

Setelah itu, memungkinkan renkripsi enkripsi berjalan normal sekali lagi.

Dale Anderson
sumber
Saya mendapat masalah yang sama dijelaskan di sini. peringatan: /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: Objek SSLContext sejati tidak tersedia. Ini mencegah urllib3 mengkonfigurasi SSL dengan tepat dan dapat menyebabkan koneksi SSL tertentu gagal. Anda dapat memutakhirkan ke versi Python yang lebih baru untuk menyelesaikan ini. Untuk informasi lebih lanjut, lihat urllib3.readthedocs.io/en/latest/… . InsecurePlatformWarning Saya cukup mengetik perintah: sudo apt-get dist-upgrade Kesalahan telah diperbaiki.
Didierh
0

Bagi saya tidak ada pekerjaan saya perlu upgrade pip ....

Debian / Ubuntu

instal dependensi

sudo apt-get install libpython-dev libssl-dev libffi-dev

perbarui pip dan instal paket

sudo pip install -U pip
sudo pip install -U pyopenssl ndg-httpsclient pyasn1

Jika Anda ingin menghapus dependensi

sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
sudo apt-get autoremove
Thedemon007
sumber
0

Saya baru saja mengalami masalah serupa pada server CentOS 5 di mana saya menginstal python 2.7.12 di / usr / local di atas versi python2.7 yang jauh lebih lama. Memutakhirkan ke CentOS 6 atau 7 bukanlah pilihan di server ini sekarang.

Beberapa modul python 2.7 masih ada dari versi python yang lebih lama, tetapi pip gagal untuk memutakhirkan karena paket kriptografi yang lebih baru tidak didukung oleh paket CentOS 5.

Secara khusus, 'pip install request [security]' gagal karena versi openssl pada CentOS 5 adalah 0.9.8e yang tidak lagi didukung oleh kriptografi> 1.4.0.

Untuk mengatasi masalah awal OPs yang saya lakukan:

1) pip install 'cryptography<1.3.5,>1.3.0'.  

Kriptografi yang terinstal 1.3.4 ini bekerja dengan openssl-0.9.8e. cryptograpy 1.3.4 juga cukup untuk memenuhi persyaratan untuk perintah berikut.

2) pip install 'requests[security]'

Perintah ini sekarang dipasang karena tidak mencoba menginstal kriptografi> 1.4.0.

Perhatikan bahwa pada Centos 5 saya juga perlu:

yum install openssl-devel

Untuk memungkinkan kriptografi dibangun

DavidG
sumber
0

Di bawah ini adalah cara kerjanya untuk saya di Python 3.6:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()
Luiz Vaz
sumber
0

Jangan instal pyOpenSSL karena akan segera ditinggalkan. Pendekatan terbaik saat ini adalah-

import requests
requests.packages.urllib3.disable_warnings()
Mohammad Shahid Siddiqui
sumber
0

jika Anda hanya ingin menghentikan peringatan tidak aman seperti:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: Permintaan HTTPS yang tidak diverifikasi sedang dibuat. Menambahkan verifikasi sertifikat sangat disarankan. Lihat: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)

melakukan:

requests.METHOD("https://www.google.com", verify=False)

verifikasi = Salah

adalah kuncinya, berikut ini tidak baik dalam hal itu:

requests.packages.urllib3.disable_warnings ()

atau

urllib3.disable_warnings ()

tetapi, Anda HARUS tahu, itu mungkin menyebabkan risiko keamanan potensial .

JZ
sumber
0

Saya memiliki masalah yang sama dengan komunitas
Mac
Pycharm edisi 2019.3
Python interpreter 3.6.
Memutakhirkan pip dengan 20.0.2 bekerja untuk saya.
Pycharm --> Preferences --> Project Interpreter --> click on pip --> specify version 20.0.2 --> Install package

GPopat
sumber