Menekan InsecureRequestWarning: Permintaan HTTPS tidak diverifikasi sedang dibuat di Python2.6

345

Saya menulis skrip dalam Python2.6 dengan menggunakan pyVmomi dan saat menggunakan salah satu metode koneksi:

service_instance = connect.SmartConnect(host=args.ip,
                                        user=args.user,
                                        pwd=args.password)

Saya mendapatkan peringatan berikut:

/usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py:734: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)

Yang menarik adalah bahwa saya tidak menginstal urllib3 dengan pip (tetapi ada di /usr/lib/python2.6/site-packages/requests/packages/urllib3/ ).

Saya sudah mencoba seperti yang disarankan di sini

import urllib3
...
urllib3.disable_warnings()

tapi itu tidak mengubah apa pun.

Patryk
sumber
Anda dapat mencoba mengatur level log untuk modul tertentu seperti yang dijelaskan dalam jawaban ini stackoverflow.com/questions/7234262/…
Reina Abolofia
Ada solusi global dan berfungsi penuh ada di sana: stackoverflow.com/questions/14463277/…
jmcollin92
2
PERINGATAN: hanya nonaktifkan validasi sertifikat jika Anda tidak peduli dengan seseorang yang meniru server jarak jauh!
ivan_pozdeev
4
Yah, peringatan itu tidak benar-benar mencegah apa pun yang terjadi. Itu tidak menonaktifkan validasi, itu menonaktifkan peringatan tentang kurangnya validasi.
dwanderson

Jawaban:

794

Anda dapat menonaktifkan peringatan Python melalui PYTHONWARNINGSvariabel lingkungan. Dalam hal ini, Anda ingin:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Untuk menonaktifkan menggunakan kode Python ( requests >= 2.16.0):

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

Untuk requests < 2.16.0, lihat jawaban asli di bawah ini.

Jawaban asli

Alasan melakukan urllib3.disable_warnings()tidak berfungsi untuk Anda adalah karena sepertinya Anda menggunakan contoh terpisah urllib3 yang dibatalkan dalam permintaan.

Saya mengumpulkan ini berdasarkan jalur di sini: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

Untuk menonaktifkan peringatan di urllib3 permintaan yang dibatalkan, Anda harus mengimpor contoh spesifik modul tersebut:

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
Shazow
sumber
Saya menulis blog tentang perkembangan yang saya lakukan di pyvmomi dan membahas masalah ini kembali pada Oktober 2014. Saya baru saja membagikan tautan ini untuk membantu orang lain menemukan info pyvmomi yang bermanfaat di masa mendatang: errr-online.com/index.php/tag/pyvmomi
Michael Rice
37
PYTHONWARNINGS="ignore:Unverified HTTPS request"
Rahul Patil
2
Untuk kelengkapan:from requests.packages.urllib3.exceptions import InsecureRequestWarning
propjk007
2
Jawaban ini sudah usang. Untuk versi modern, lihat jawaban Nayana Adassuriya.
Dakkaron
3
Disalin dari jawaban Nayana Adassuriya ini: import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Samuel
117

Ini adalah jawabannya pada tahun 2017. urllib3bukan bagian dari requestslagi

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Nayana Adassuriya
sumber
7
Tahun ini lebih sedikit impor daripada jumlah revisi python yang Anda gunakan.
CodeMonkey
3
Ya, revisi lebih penting daripada tahun. Ini untukrequests >= 2.16.0
dwanderson
dapat seseorang memposting versi urllib3, ketika saya mencoba ini, dikatakan urllib3 tidak memiliki atribut 'disable_warnings'
steff_bdh
1
Saya bingung dengan jawaban ini. requestsVersi saya sudah 2.21.0dan sudah ada urllib3. Saya mencoba 2.16.0, `2.16.1 , and 2.17.0` dan mereka semua memilikinya urllib3. Saya mencoba 2.4.0dan yang satu tidak memilikinya. Apakah mereka menambahkannya kembali?
Mike Furlender
bekerja untukku !!
deepdive
35

Per komentar github ini , seseorang dapat menonaktifkan urllib3peringatan permintaan melalui requestsdalam 1-liner:

requests.packages.urllib3.disable_warnings()

Ini akan menekan semua peringatan, bukan hanya InsecureRequest(yaitu juga akan menekan InsecurePlatformdll). Dalam kasus di mana kami hanya ingin barang-barang bekerja, saya menemukan keringkasan berguna.

hamx0r
sumber
4
Ini adalah pilihan terbaik untuk 2.7 karena saya tidak perlu mengimpor urllib3 hanya untuk menekan peringatan
CodeMonkey
3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)sepertinya berhasil.
mattalxndr
29

Cara yang benar adalah dengan membaca bagian yang relevan pada tautan yang disediakan dan melakukan apa yang dikatakan. Cara khusus untuk requests(yang digabungkan dengan salinannya sendiri urllib3), sesuai Sertifikat CA - Penggunaan Lanjutan - Permintaan 2.8.1 dokumentasi :

  • requests dikirimkan bersama bundel sertifikat sendiri (tetapi hanya dapat diperbarui bersama dengan modul)
  • ia akan menggunakan (karena requests v2.4.0) yang certifipaket bukan jika itu terinstal

Tindakan keamanan verifikasi sertifikat HTTPS bukanlah sesuatu yang harus dibuang dengan hati-hati. Serangan Man-in-the-middle yang mencegah Anda melindungi dari pihak ketiga misalnya menyesap virus atau merusak atau mencuri data Anda.

Yang mana, dengan operasi peretasan global yang didukung pemerintah saat ini seperti Operasi Akses Tersesuaikan dan Great Firewall China yang menargetkan infrastruktur jaringan, lebih memungkinkan daripada yang Anda pikirkan.

ivan_pozdeev
sumber
Saya memiliki permintaan 2.8.1 dan sertifikasi 2015.11.20.1 dan saya masih mendapatkan peringatan.
Alex Bartiş
3
@ AlexBartiş ini bisa terjadi jika Anda (atau beberapa kode yang Anda panggil) lulus verify=False.
ivan_pozdeev
2
Mengapa ada begitu sedikit suara untuk jawaban ini? Apakah sebenarnya aman untuk mengabaikan peringatan ini?
sgryzko
1
@sgryzko Hanya jika Anda tidak peduli dengan seseorang yang meniru server jarak jauh. Mungkin, banyak memang tidak peduli dan / atau tidak membaca di luar jawaban pertama, berkontribusi pada siklus umpan balik positif. Jawaban ini juga diposting hampir setahun kemudian.
ivan_pozdeev
2
Ya, Anda harus melakukan hal yang benar dalam lingkungan produksi, dan secara buta menekan kesalahan itu buruk. Tetapi itu adalah hal yang benar-benar valid untuk ingin menekan kesalahan ini dalam lingkungan pengujian.
Vroo
12

Untuk tidak sabar, cara cepat untuk menonaktifkan python HTTPS peringatan yang tidak diverifikasi:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"
Wenbing Li
sumber
Untuk PowerShell, perintahnya adalah$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au
10

Jawaban yang diterima tidak berfungsi jika beberapa vendor paket memiliki salinan urllib3 sendiri, yang dalam hal ini masih berfungsi:

import warnings

warnings.filterwarnings('ignore', message='Unverified HTTPS request')
Yigal
sumber
1

Saya memiliki masalah serupa dengan Klien PyVmomi. Dengan Python Versi 2.7.9, saya telah memecahkan masalah ini dengan baris kode berikut:

default_sslContext = ssl._create_unverified_context()
self.client = \
                Client(<vcenterip>, username=<username>, password=<passwd>,
                       sslContext=default_sslContext )

Perhatikan bahwa, agar ini berfungsi, Anda memerlukan Python 2.7.9 minimal.

Rajive Pai
sumber
1

Mengapa tidak menggunakan fungsi asli pyvmomi SmartConnectNoSSL. Mereka menambahkan fungsi ini June 14, 2016dan menamainya ConnectNoSSL, satu hari setelah mereka mengubah namanya SmartConnectNoSSL, menggunakannya alih-alih dengan memberikan peringatan dengan baris kode yang tidak perlu dalam proyek Anda?

Menyediakan metode standar untuk menghubungkan ke server tertentu tanpa verifikasi SSL. Berguna saat menghubungkan ke server dengan sertifikat yang ditandatangani sendiri atau ketika Anda ingin mengabaikan SSL sama sekali

service_instance = connect.SmartConnectNoSSL(host=args.ip,
                                             user=args.user,
                                             pwd=args.password)
SpazaM
sumber
0

Untuk Python 2.7

Tambahkan variabel lingkungan PYTHONWARNING sebagai kunci dan nilai yang sesuai untuk diabaikan seperti:

os.environ['PYTHONWARNINGS']="ignore:Unverified HTTPS request"

Imran Al Noor
sumber