Suppress InsecureRequestWarning: Yêu cầu HTTPS chưa được xác minh đang được thực hiện trong Python2.6


345

Tôi đang viết các tập lệnh trong Python2.6 với việc sử dụng pyVmomi và trong khi sử dụng một trong các phương thức kết nối:

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

Tôi nhận được cảnh báo sau:

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

Điều thú vị là tôi không cài đặt urllib3 với pip (nhưng nó có trong /usr/lib/python2.6/site-packages/requests/packages/urllib3/ ).

Tôi đã thử như đề xuất ở đây

import urllib3
...
urllib3.disable_warnings()

nhưng điều đó đã không thay đổi bất cứ điều gì.


Bạn có thể thử đặt mức ghi nhật ký cho mô-đun cụ thể đó như được mô tả trong câu trả lời này stackoverflow.com/questions/7234262/iêu
Reina Abolofia

Một giải pháp toàn cầu và hoàn toàn hiệu quả là có: stackoverflow.com/questions/14463277/NH
jmcollin92

2
CẢNH BÁO: chỉ tắt xác thực chứng chỉ nếu bạn không quan tâm đến việc ai đó mạo danh máy chủ từ xa!
ivan_pozdeev

4
tốt, cảnh báo không thực sự ngăn chặn bất cứ điều gì đang xảy ra. Nó không vô hiệu hóa xác nhận, nó vô hiệu hóa cảnh báo về việc thiếu xác nhận.
lùn

Câu trả lời:


794

Bạn có thể vô hiệu hóa bất kỳ cảnh báo Python nào thông qua PYTHONWARNINGSbiến môi trường. Trong trường hợp này, bạn muốn:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Để vô hiệu hóa bằng mã Python ( requests >= 2.16.0):

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

Đối với requests < 2.16.0, xem câu trả lời ban đầu dưới đây.

Câu trả lời gốc

Lý do urllib3.disable_warnings()không phù hợp với bạn là vì có vẻ như bạn đang sử dụng một phiên bản urllib3 riêng biệt được yêu cầu bên trong các yêu cầu.

Tôi thu thập điều này dựa trên con đường ở đây: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

Để vô hiệu hóa các cảnh báo trong urllib3 được yêu cầu, bạn sẽ cần nhập phiên bản cụ thể của mô-đun:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

Tôi viết blog về sự phát triển tôi làm trên pyvmomi và đề cập đến vấn đề này vào tháng 10 năm 2014. Tôi chỉ chia sẻ liên kết này để giúp những người khác tìm thấy thông tin pyvmomi hữu ích trong tương lai: errr-online.com/index.php/tag/pyvmomi
Michael Rice

37
PYTHONWARNINGS="ignore:Unverified HTTPS request"
Rahul Patil

2
Để hoàn thiện:from requests.packages.urllib3.exceptions import InsecureRequestWarning
propjk007

2
Câu trả lời này đã lỗi thời. Đối với phiên bản hiện đại, xem câu trả lời của Nayana Adassuriya.
Dakkaron

3
Sao chép từ câu trả lời của Nayana Adassuriya : import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Samuel

116

Đây là câu trả lời trong năm 2017. urllib3không phải là một phần của requestsnữa

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

7
Năm nhập ít hơn số sửa đổi của python bạn đang sử dụng.
CodeMonkey

3
Vâng, sửa đổi quan trọng hơn năm. Cái này dành chorequests >= 2.16.0
lùn

ai đó có thể đăng phiên bản của urllib3 không, khi tôi thử cái này, nó nói rằng urllib3 không có thuộc tính 'vô hiệu hóa'
steff_bdh

1
Tôi bối rối trước phản ứng này. requestsPhiên bản của tôi là 2.21.0và nó có urllib3. Tôi đã thử 2.16.0, `2.16.1 , and 2.17.0` và tất cả đều có urllib3. Tôi đã thử 2.4.0và người ta không có nó, mặc dù. Họ đã thêm nó trở lại?
Mike Furlender

đã làm cho tôi!!
Deepdive

35

Mỗi bình luận github này , người ta có thể vô hiệu hóa urllib3các cảnh báo yêu cầu thông qua requeststrong 1-liner:

requests.packages.urllib3.disable_warnings()

Điều này sẽ ngăn chặn tất cả các cảnh báo mặc dù, không chỉ InsecureRequest(tức là nó cũng sẽ đàn áp InsecurePlatformvv). Trong trường hợp chúng tôi chỉ muốn công cụ hoạt động, tôi thấy sự đồng nhất tiện dụng.


4
Đây là tùy chọn tốt nhất cho 2.7 vì tôi không cần nhập urllib3 chỉ để chặn cảnh báo
CodeMonkey

3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)dường như làm việc
mattalxndr

29

Cách chính xác là đọc phần có liên quan trên liên kết được cung cấp và làm như nó nói. Cách cụ thể cho requests(gói nào có bản sao của chính nó urllib3), theo Chứng chỉ CA - Sử dụng nâng cao - Tài liệu yêu cầu 2.8.1 :

  • requests vận chuyển với gói chứng chỉ riêng (nhưng chỉ có thể được cập nhật cùng với mô-đun)
  • nó sẽ sử dụng (kể từ khi requests v2.4.0) các certifigói thay vì nếu nó đã được cài đặt

Biện pháp bảo mật xác minh chứng chỉ HTTPS không phải là thứ gì đó bị loại bỏ một cách nhẹ nhàng. Cuộc tấn công giữa chừng mà nó ngăn chặn bảo vệ bạn khỏi bên thứ ba, vd nhấm nháp virus hoặc giả mạo hoặc đánh cắp dữ liệu của bạn.

Mà, với các hoạt động hack toàn cầu được chính phủ hỗ trợ ngày nay như Hoạt động truy cập phù hợpTường lửa vĩ đại của Trung Quốc nhắm vào cơ sở hạ tầng mạng, có thể xảy ra nhiều hơn bạn nghĩ.


Tôi có yêu cầu 2.8.1 và certifi 2015.11.20.1 và tôi vẫn nhận được cảnh báo.
Alex Bartiş

3
@ AlexBartiş điều này có thể là nếu bạn (hoặc một số mã mà bạn gọi) vượt qua verify=False.
ivan_pozdeev

2
Tại sao có quá ít phiếu cho câu trả lời này? Có thực sự an toàn để bỏ qua những cảnh báo?
sgryzko

1
@sgryzko Chỉ khi bạn không quan tâm đến việc ai đó mạo danh máy chủ từ xa. Có lẽ, nhiều người thực sự không quan tâm và / hoặc không đọc ngoài câu trả lời đầu tiên, góp phần vào chu kỳ phản hồi tích cực. Câu trả lời này cũng đã được đăng gần một năm sau đó.
ivan_pozdeev

2
Có, bạn nên làm điều đúng đắn trong môi trường sản xuất, và ngăn chặn một cách mù quáng lỗi là xấu. Nhưng đó là một điều hoàn toàn hợp lệ khi muốn loại bỏ các lỗi này trong môi trường thử nghiệm.
Vroo

12

Đối với người thiếu kiên nhẫn, một cách nhanh chóng để vô hiệu hóa cảnh báo HTTPS chưa được xác minh của python:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Đối với quyền hạn, lệnh là$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au

10

Câu trả lời được chấp nhận không hoạt động nếu một số nhà cung cấp gói đó là bản sao của urllib3, trong trường hợp này, nó sẽ vẫn hoạt động:

import warnings

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

1

Tôi đã có một vấn đề tương tự với PyVmomi Client. Với Python Phiên bản 2.7.9, tôi đã giải quyết vấn đề này bằng dòng mã sau:

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

Lưu ý rằng, để làm việc này, bạn cần ít nhất Python 2.7.9.


1

Tại sao không sử dụng chức năng ban đầu pyvmomi SmartConnectNoSSL. Họ đã thêm chức năng này June 14, 2016và đặt tên cho nó ConnectNoSSL, một ngày sau khi họ đổi tên thành SmartConnectNoSSL, sử dụng nó thay vì chuyển cảnh báo với các dòng mã không cần thiết trong dự án của bạn?

Cung cấp một phương thức tiêu chuẩn để kết nối với một máy chủ được chỉ định mà không cần xác minh SSL. Hữu ích khi kết nối với máy chủ có chứng chỉ tự ký hoặc khi bạn muốn bỏ qua SSL hoàn toàn

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

0

Đối với Python 2.7

Thêm biến môi trường PYTHONWARNING làm khóa và giá trị tương ứng được bỏ qua như:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.