ระงับ InsecureRequestWarning: การร้องขอ HTTPS ที่ไม่ผ่านการตรวจสอบกำลังทำใน Python2.6


345

ฉันกำลังเขียนสคริปต์ใน Python2.6 ด้วยการใช้pyVmomiและในขณะที่ใช้วิธีการเชื่อมต่ออย่างใดอย่างหนึ่ง:

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

ฉันได้รับคำเตือนต่อไปนี้:

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

สิ่งที่น่าสนใจคือฉันไม่ได้ติดตั้ง urllib3 ด้วย pip (แต่มีใน/usr/lib/python2.6/site-packages/requests/packages/urllib3/ )

ฉันได้ลองตามที่แนะนำที่นี่

import urllib3
...
urllib3.disable_warnings()

แต่นั่นไม่ได้เปลี่ยนแปลงอะไรเลย


คุณอาจลองตั้งค่าระดับการบันทึกสำหรับโมดูลเฉพาะดังที่อธิบายไว้ในคำตอบนี้stackoverflow.com/questions/7234262/ …
Reina Abolofia

โซลูชันระดับโลกและการทำงานที่สมบูรณ์นั้นอยู่ที่นั่น: stackoverflow.com/questions/14463277/…
jmcollin92

2
คำเตือน:ปิดใช้งานการตรวจสอบใบรับรองเท่านั้นหากคุณไม่สนใจว่ามีคนแอบอ้างเป็นเซิร์ฟเวอร์ระยะไกล!
ivan_pozdeev

4
คำเตือนไม่ได้ป้องกันสิ่งที่เกิดขึ้นจริง ๆ มันไม่ได้ปิดใช้งานการตรวจสอบ แต่เป็นการปิดการเตือนเกี่ยวกับการขาดการตรวจสอบ
dwanderson

คำตอบ:


795

คุณสามารถปิดการใช้งานคำเตือนของ Python ผ่านPYTHONWARNINGSตัวแปรสภาพแวดล้อม ในกรณีนี้คุณต้องการ:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

หากต้องการปิดใช้งานโดยใช้รหัส Python ( requests >= 2.16.0):

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

สำหรับrequests < 2.16.0ดูคำตอบต้นฉบับด้านล่าง

คำตอบเดิม

เหตุผลที่ทำurllib3.disable_warnings()ไม่ได้ผลสำหรับคุณเพราะดูเหมือนว่าคุณใช้อินสแตนซ์ urllib3 ที่แยกต่างหากภายในคำขอ

ฉันรวบรวมสิ่งนี้ตามเส้นทางที่นี่: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

หากต้องการปิดใช้งานคำเตือนใน urllib3 ที่ถูกร้องขอของคำขอคุณจะต้องนำเข้าอินสแตนซ์เฉพาะของโมดูลนั้น:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

ฉันบล็อกเกี่ยวกับการพัฒนาที่ฉันทำกับ pyvmomi และกล่าวถึงปัญหานี้ในเดือนตุลาคม 2014 ฉันแค่แบ่งปันลิงก์นี้เพื่อช่วยให้ผู้อื่นค้นหาข้อมูล pyvmomi ที่มีประโยชน์ในอนาคต: errr-online.com/index.php/tag/pyvmomi
Michael Rice

37
PYTHONWARNINGS="ignore:Unverified HTTPS request"
ราหุลปาติล

2
เพื่อความสมบูรณ์:from requests.packages.urllib3.exceptions import InsecureRequestWarning
propjk007

2
คำตอบนี้ล้าสมัยแล้ว สำหรับรุ่นที่ทันสมัยดูคำตอบของ Nayana Adassuriya
Dakkaron

3
คัดลอกมาจากคำตอบของ Nayana import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)Adassuriya:
ซามูเอล

117

นี่คือคำตอบในปี 2560 urllib3ไม่ใช่ส่วนหนึ่งของrequestsอีกต่อไป

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

7
ปีนี้นำเข้าน้อยกว่าจำนวนการแก้ไขของไพ ธ อนที่คุณใช้
CodeMonkey

3
ใช่การแก้ไขสำคัญกว่าปี มีไว้สำหรับrequests >= 2.16.0
dwanderson

ใครบางคนสามารถโพสต์รุ่น urllib3 ได้เมื่อฉันลองทำสิ่งนี้มันบอกว่า urllib3 ไม่มีแอตทริบิวต์ 'disable_warnings'
steff_bdh

1
ฉันสับสนกับคำตอบนี้ ฉันrequestsรุ่นและมี2.21.0 urllib3ฉันพยายาม2.16.0`2.16.1 , and 2.17.0` urllib3และพวกเขาทั้งหมดมี ฉันพยายาม2.4.0แล้วก็ไม่มีใครทำได้ พวกเขาเพิ่มมันกลับมาหรือไม่?
Mike Furlender

35

ตามความคิดเห็นGitHub นี้หนึ่งสามารถปิดการใช้งานurllib3คำเตือนคำขอผ่านrequestsในซับ 1:

requests.packages.urllib3.disable_warnings()

สิ่งนี้จะระงับการเตือนทั้งหมดแม้ว่าจะไม่ใช่แค่InsecureRequest(เช่นมันจะทำการปราบปรามและInsecurePlatformอื่น ๆ ) ในกรณีที่เราต้องการให้สิ่งต่าง ๆ ทำงานฉันก็พบว่ามันกระชับสะดวก


4
นี่เป็นตัวเลือกที่ดีที่สุดสำหรับ 2.7 เพราะฉันไม่จำเป็นต้องนำเข้า urllib3 เพียงเพื่อยับยั้งคำเตือน
CodeMonkey

3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)ดูเหมือนว่าจะทำงาน
mattalxndr

29

วิธีที่ถูกต้องคือการอ่านส่วนที่เกี่ยวข้องในลิงก์ที่ให้ไว้และทำตามที่ระบุไว้ วิธีเฉพาะสำหรับrequests(ซึ่งบันเดิลพร้อมสำเนาของตนเองurllib3), ตามใบรับรอง CA - การใช้งานขั้นสูง - เอกสารประกอบคำขอ 2.8.1 :

  • requests มาพร้อมกับชุดใบรับรองของตนเอง (แต่สามารถอัพเดตพร้อมกับโมดูลเท่านั้น)
  • มันจะใช้ (ตั้งแต่requests v2.4.0) แพคเกจแทนถ้ามีการติดตั้งcertifi

มาตรการความปลอดภัยในการตรวจสอบใบรับรอง HTTPS ไม่ใช่สิ่งที่จะถูกทิ้งอย่างเบาใจ การโจมตีแบบ Man-in-the-the-middle ที่ช่วยป้องกันคุณจากบุคคลที่สามเช่นการจิบไวรัสหรือการเข้าไปยุ่งเกี่ยวกับหรือขโมยข้อมูลของคุณ

ซึ่งด้วยการดำเนินการแฮ็คทั่วโลกในปัจจุบันซึ่งได้รับการสนับสนุนจากรัฐบาลเช่นTailored Access OperationsและGreat Firewall ของจีนที่กำหนดเป้าหมายโครงสร้างพื้นฐานเครือข่ายจะเป็นไปได้มากกว่าที่คุณคิด


ฉันมีคำขอ 2.8.1 และรับรอง 2015.11.20.1 และฉันยังคงได้รับคำเตือน
Alex Bartiş

3
@ AlexBartişนี้สามารถถ้าคุณ (หรือรหัสบางอย่างที่คุณเรียก) verify=Falseผ่าน
ivan_pozdeev

2
เหตุใดจึงมีการโหวตน้อยสำหรับคำตอบนี้ ปลอดภัยหรือไม่ที่จะเพิกเฉยต่อคำเตือนเหล่านี้
sgryzko

1
@sgryzko เฉพาะในกรณีที่คุณไม่แคร์ใครบางคนที่แอบอ้างเป็นเซิร์ฟเวอร์ระยะไกล อาจเป็นไปได้ว่าหลายคนไม่สนใจและ / หรือไม่อ่านเกินคำตอบแรกซึ่งส่งผลให้เกิดวงจรตอบรับเชิงบวก คำตอบนี้ก็โพสต์เกือบหนึ่งปีต่อมา
ivan_pozdeev

2
ใช่คุณควรทำสิ่งที่ถูกต้องในสภาพแวดล้อมการผลิตและการระงับข้อผิดพลาดนั้นไม่ดี แต่เป็นสิ่งที่ถูกต้องสมบูรณ์ที่ต้องการระงับข้อผิดพลาดเหล่านี้ในสภาพแวดล้อมการทดสอบ
Vroo

12

สำหรับคนที่ใจร้อนวิธีที่รวดเร็วในการปิดการใช้งานคำเตือน HTTPS ที่ไม่ได้ตรวจสอบ:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

สำหรับ powershell คำสั่งคือ$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au

10

คำตอบที่ได้รับการยอมรับไม่สามารถใช้งานได้หากผู้จำหน่ายแพคเกจบางรายเป็น urllib3 ของตัวเองซึ่งในกรณีนี้ก็ยังใช้งานได้:

import warnings

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

1

ฉันมีปัญหาคล้ายกันกับไคลเอนต์ PyVmomi ด้วย Python เวอร์ชัน 2.7.9 ฉันได้แก้ไขปัญหานี้ด้วยรหัสบรรทัดต่อไปนี้:

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

โปรดทราบว่าเพื่อให้สิ่งนี้ใช้งานได้คุณต้องใช้ Python 2.7.9 อย่างน้อยที่สุด


1

ทำไมไม่ใช้ pyvmomi ฟังก์ชั่นเดิม SmartConnectNoSSLพวกเขาได้เพิ่มฟังก์ชั่นนี้June 14, 2016และตั้งชื่อมันConnectNoSSL, วันหนึ่งหลังจากที่พวกเขาเปลี่ยนชื่อSmartConnectNoSSL, การใช้งานที่แทนโดยผ่านคำเตือนที่มีเส้นที่ไม่จำเป็นของรหัสในโครงการของคุณหรือไม่

จัดเตรียมวิธีมาตรฐานสำหรับการเชื่อมต่อกับเซิร์ฟเวอร์ที่ระบุโดยไม่มีการตรวจสอบ SSL มีประโยชน์เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ที่มีใบรับรองที่ลงนามเองหรือเมื่อคุณต้องการละเว้น SSL ทั้งหมด

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

0

สำหรับPython 2.7

เพิ่มตัวแปรสภาพแวดล้อม PYTHONWARNINGS เป็นคีย์และค่าที่สอดคล้องกันที่จะถูกละเว้นเช่น:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.