ข้อผิดพลาด SSL InsecurePlatform เมื่อใช้แพ็คเกจคำขอ


237

ฉันใช้ Python 2.7.3 และการร้องขอ ฉันติดตั้งคำขอผ่าน pip ฉันเชื่อว่าเป็นรุ่นล่าสุด ฉันวิ่งบน Debian Wheezy

ฉันเคยใช้ Requests หลายครั้งในอดีตและไม่เคยประสบปัญหานี้ แต่ดูเหมือนว่าเมื่อทำการร้องขอ https กับRequestsฉันจะได้รับการInsecurePlatformยกเว้น

ข้อผิดพลาดกล่าวถึงurllib3แต่ฉันไม่ได้ติดตั้ง ฉันติดตั้งมันเพื่อตรวจสอบว่ามันแก้ไขข้อผิดพลาด แต่มันไม่ได้

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

ความคิดใด ๆ ที่ทำให้ฉันได้รับสิ่งนี้? ฉันได้ตรวจสอบเอกสารตามที่ระบุในข้อความแสดงข้อผิดพลาด แต่เอกสารกำลังบอกว่าจะนำเข้า urllib3 และปิดใช้งานคำเตือนหรือให้ใบรับรอง

คำตอบ:


390

ใช้คุณสมบัติความปลอดภัยที่ซ่อนอยู่บ้าง:

pip install requests[security] หรือ pip install pyOpenSSL ndg-httpsclient pyasn1

ทั้งสองคำสั่งติดตั้งแพ็กเกจพิเศษต่อไปนี้:

  • pyOpenSSL
  • การอ่านรหัส
  • IDNA

โปรดทราบว่านี้ไม่จำเป็นสำหรับหลาม 2.7.9 +

หากpip installล้มเหลวด้วยข้อผิดพลาดตรวจสอบว่าคุณจำเป็นต้องมีแพคเกจการพัฒนาlibffi, libsslและpythonติดตั้งในระบบของคุณโดยใช้แพคเกจผู้จัดการการจัดจำหน่ายของ :

  • Debian / Ubuntu - python-dev libffi-dev libssl-devแพ็คเกจ

  • Fedora - openssl-devel python-devel libffi-develแพ็คเกจ

รายการ Distro ด้านบนไม่สมบูรณ์

วิธีแก้ปัญหา ( ดูคำตอบต้นฉบับโดย @TomDotTom ) :

ในกรณีที่คุณไม่สามารถติดตั้งแพ็กเกจการพัฒนาที่จำเป็นบางตัวได้ก็มีตัวเลือกให้ปิดใช้งานการเตือนนั้น:

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

หากpipตัวคุณเองได้รับผลกระทบจากInsecurePlatformWarningและไม่สามารถติดตั้งอะไรจาก PyPI ก็สามารถแก้ไขได้ด้วยคำแนะนำทีละขั้นตอนนี้เพื่อปรับใช้แพคเกจหลามพิเศษด้วยตนเอง


3
ฉันมีการร้องขอ [ความปลอดภัย], terminal ใหม่, Python 2.7.3 และยังคงได้รับข้อผิดพลาดนี้
Josh Nankin

45
คุณต้องติดตั้งไลบรารีเพิ่มเติมในระบบสำหรับ Ubuntu / Debian:sudo apt-get install python-dev libffi-dev libssl-dev
therealmarv

2
ตกลงหรือไม่ที่ "pip" ตัวเอง (การจ้องจาก v6.1) ให้คำเตือนความปลอดภัยเดียวกันหรือไม่
jmster

5
ขึ้นอยู่กับเปลือกของคุณคุณอาจต้องพิมพ์pip install 'requests[security]'
C. Reed

5
ใน zshell คุณต้องพูดว่า: pip install ร้องขอ \ [ความปลอดภัย \]
Amir Katz

68

คำขอ 2.6 แนะนำคำเตือนนี้สำหรับผู้ใช้ python ก่อน 2.7.9 โดยมีเฉพาะโมดูล SSL ที่มีอยู่ในสต็อคเท่านั้น

สมมติว่าคุณไม่สามารถอัพเกรดเป็นไพ ธ อนรุ่นใหม่ได้สิ่งนี้จะติดตั้งไลบรารี่ SSL หลามที่อัปเดตแล้ว:

pip install --upgrade ndg-httpsclient 

อย่างไรก็ตามสิ่งนี้อาจล้มเหลวในบางระบบโดยไม่มี build-dependencies สำหรับ pyOpenSSL บนระบบเดเบียนการรันสิ่งนี้ก่อนคำสั่ง pip ข้างต้นควรจะเพียงพอสำหรับ pyOpenSSL ในการสร้าง:

apt-get install python-dev libffi-dev libssl-dev

4
ฉันต้องการติดตั้งแพ็คเกจเหล่านี้ 'python-dev libffi-dev libssl-dev' สำหรับ ubuntu 14.04 เช่นกัน
Andy

ขอบคุณ! ฉันได้เพิ่มบันทึกย่อลงในเอกสาร: github.com/shazow/urllib3/pull/765
Wolfgang

@ เจสสิก้า FTW! ขอบคุณมาก - มันน่ารำคาญ
Neal Magee

18

ฉันไม่ได้ใช้สิ่งนี้ในการผลิต แต่มีนักวิ่งทดสอบอยู่บ้าง และเพื่อย้ำเอกสาร urllib3

หากคุณรู้ว่าคุณกำลังทำอะไรอยู่และต้องการปิดการใช้งานคำเตือนนี้และคำเตือนอื่น ๆ

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

แก้ไข / อัปเดต:

ต่อไปนี้ควรทำงาน:

import logging
import requests

# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)

1
ปัญหาเกี่ยวกับวิธีแก้ไขปัญหานี้ก็คือมันจะหยุดและไม่สนใจปัญหาที่เกิดขึ้นจริง นอกจากนี้สิ่งนี้จะไม่ทำงานเมื่อใช้ pip เพื่อติดตั้งหรืออัพเกรดแพ็คเกจ
Jason Parham

1
ทางออกเดียวที่ใช้ได้สำหรับฉันบน Ubuntu 1404 / Python 2.7.6 ขอบคุณ
Ignacio Vazquez

7

หากคุณไม่สามารถอัพเกรดเวอร์ชั่น Python ของคุณเป็น 2.7.9 และต้องการระงับคำเตือน

คุณสามารถปรับลดรุ่น 'คำขอ'เป็น 2.5.3:

sudo pip install requests==2.5.3

เกี่ยวกับรุ่น: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html


8
โปรดทราบว่า 2.5.3 มีปัญหาด้านความปลอดภัยเกี่ยวกับการจัดการคุกกี้ระหว่างการเปลี่ยนเส้นทาง
ค.

2
แทนที่จะโพสต์คำตอบนี้สองครั้งคุณควรตั้งค่าสถานะโพสต์อื่นว่าซ้ำซ้อน ตอนนี้ฉันปิดมันแล้ว
Martijn Pieters

6
ฉันสองความคิดเห็นที่จะไม่ลดระดับเนื่องจากช่องโหว่ที่รู้จัก
sergiopereira

7

ที่จริงแล้วคุณสามารถลองสิ่งนี้

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

คุณสามารถอ่านรหัสเพื่อขอได้

"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.
    ...
    """

2
ใช้ความระมัดระวังมากในการทำเช่นนี้การไม่แสดงหลักฐานอาจเป็นอันตรายได้!
jaapz

แน่นอนว่าการไม่แสดงยืนยันจะเป็นอันตราย แต่บางครั้งนี่เป็นทางเลือกสุดท้าย ตัวอย่าง: easy_install, apt-get, yum หรือ pip ... ไม่ได้รัน, หรือทำโปรแกรมรวบรวมข้อมูลเว็บเล็กน้อย ...
zzzz zzzz

1
ฉันอยู่ในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันดังนั้นฉันจึงไม่สามารถอัปเกรด python เป็น 2.7.9 และฉันไม่สามารถติดตั้ง libffi.pc ด้วย apt-get ซึ่งจำเป็นสำหรับการร้องขอการติดตั้ง pip [ความปลอดภัย] และตัวแปรอื่น ๆ ของการติดตั้ง pip ข้างบน. ดังนั้นคำตอบนี้เป็นคำตอบที่เหมาะกับฉัน ตราบใดที่คุณเข้าใจข้อแม้ที่สำคัญซึ่งหากไม่มีการยืนยัน https เนื้อหาอาจมีการเปลี่ยนแปลง / ปลอมแปลงได้ฉันคิดว่าคำตอบนี้ใช้ได้
Chirael

5

โซลูชันทั้งหมดที่ให้ไว้ที่นี่ไม่ได้ช่วย (ฉันถูก จำกัด ให้ python 2.6.6) ฉันได้พบคำตอบในสวิตช์ง่าย ๆ เพื่อส่งต่อไปยัง pip:

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

นี่บอก pip ว่าตกลงเพื่อคว้าโมดูลจาก pypi.python.org

สำหรับฉันปัญหาคือพร็อกซีของ บริษัท ของฉันอยู่ด้านหลังมันเป็นไฟร์วอลล์ซึ่งทำให้ดูเหมือนว่าลูกค้าที่เป็นอันตรายไปยังเซิร์ฟเวอร์บางแห่ง การรักษาความปลอดภัยไชโย


ปรับปรุง: ดูคำตอบของ @Alex สำหรับการเปลี่ยนแปลงในโดเมน PyPi และ--trusted-hostตัวเลือกเพิ่มเติมที่สามารถเพิ่มได้ (ฉันจะคัดลอก / วางที่นี่ แต่คำตอบของเขาดังนั้น +1 เขา)


ในที่สุดฉันก็สามารถติดตั้ง tensorflow โดยใช้คำสั่งนี้ขอบคุณมาก!
pedrobisp

3

คำตอบนี้ไม่เกี่ยวข้อง แต่ถ้าคุณต้องการกำจัดคำเตือนและรับคำเตือนจากคำขอ:

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.

คุณสามารถปิดการใช้งานได้โดยเพิ่มบรรทัดต่อไปนี้ในรหัสหลามของคุณ:

requests.packages.urllib3.disable_warnings()


ขอบคุณสำหรับสิ่งนี้. ไม่มีคำตอบอื่นใดที่เหมาะกับฉัน ฉันปลิวไปว่าข้อความที่น่ารำคาญเช่นนี้จะถูกใส่เข้าไปโดยปริยาย
ด่าน


1

นี้ขึ้นมาสำหรับผมบน Ubuntu 14.04 (กับงูหลาม 2.7.6) สัปดาห์ที่ผ่านมาหลังจากที่ผมได้apt-get dist-upgradeที่รวมจากlibssl1.1:amd64deb.sury.org

ตั้งแต่ฉันทำงานcertbot-auto renewจากงาน cron ฉันยังใช้--no-self-upgradeเพื่อลดการบำรุงรักษาที่ไม่ได้กำหนดไว้ นี่ดูเหมือนจะเป็นต้นเหตุของปัญหา

แก้ไขข้อผิดพลาดที่ฉันทั้งหมดที่จำเป็นต้องทำคือกลายเป็นราก (มีsuของ--loginสวิทช์) และให้certbot-autoปรับตัวเอง เช่น:

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

แทนสิ่งที่ปกติจะเรียกใช้จาก crontab ของรูท:

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

หลังจากนั้นให้การเข้ารหัส renwals ทำงานได้ตามปกติอีกครั้ง


ฉันได้รับปัญหาเดียวกันที่อธิบายไว้ที่นี่ คำเตือน: /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: วัตถุ SSLContext จริงไม่พร้อมใช้งาน สิ่งนี้จะป้องกัน urllib3 จากการกำหนดค่า SSL อย่างเหมาะสมและอาจทำให้การเชื่อมต่อ SSL บางอย่างล้มเหลว คุณสามารถอัพเกรดเป็น Python เวอร์ชันใหม่เพื่อแก้ปัญหานี้ สำหรับข้อมูลเพิ่มเติมโปรดดูที่urllib3.readthedocs.io/en/latest/... InsecurePlatformWarning ฉันเพิ่งพิมพ์คำสั่ง: sudo apt-get dist-upgrade ข้อผิดพลาดได้รับการแก้ไข
Didierh

0

สำหรับฉันไม่ทำงานฉันต้องอัพเกรด pip ....

Debian / Ubuntu

ติดตั้งการอ้างอิง

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

อัพเกรด pip และแพ็คเกจการติดตั้ง

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

หากคุณต้องการลบการอ้างอิง

sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
sudo apt-get autoremove

0

ฉันเพิ่งมีปัญหาคล้ายกันบนเซิร์ฟเวอร์ CentOS 5 ที่ฉันติดตั้ง python 2.7.12 ใน / usr / local ด้านบนของ python2.7 รุ่นเก่ากว่ามาก การอัปเกรดเป็น CentOS 6 หรือ 7 ไม่ใช่ตัวเลือกในเซิร์ฟเวอร์นี้ในตอนนี้

โมดูล python 2.7 บางตัวยังคงมีอยู่จากไพ ธ อนรุ่นเก่า แต่ pip ไม่สามารถอัพเกรดได้เนื่องจากแพ็คเกจการเข้ารหัสที่ใหม่กว่าไม่ได้รับการสนับสนุนโดยแพ็คเกจ CentOS 5

'การร้องขอการติดตั้ง pip [ความปลอดภัย]' ล้มเหลวเนื่องจากรุ่น openssl บน CentOS 5 คือ 0.9.8e ซึ่งไม่ได้รับการสนับสนุนโดยการเข้ารหัสอีกต่อไป> 1.4.0

เพื่อแก้ปัญหาเดิมของ OP ฉันได้ทำ:

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

วิทยาการเข้ารหัสลับที่ติดตั้ง 1.3.4 ซึ่งทำงานกับ openssl-0.9.8e cryptograpy 1.3.4 ก็เพียงพอที่จะตอบสนองความต้องการสำหรับคำสั่งต่อไปนี้

2) pip install 'requests[security]'

ตอนนี้คำสั่งนี้จะติดตั้งเพราะมันไม่ได้พยายามติดตั้งการเข้ารหัส> 1.4.0

โปรดทราบว่าใน Centos 5 ฉันต้อง:

yum install openssl-devel

เพื่อให้การเข้ารหัสสามารถสร้างได้


0

ด้านล่างเป็นวิธีการทำงานกับฉันใน Python 3.6:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()

0

อย่าติดตั้ง pyOpenSSL เพราะจะเลิกใช้ในไม่ช้า แนวทางที่ดีที่สุดในปัจจุบันคือ -

import requests
requests.packages.urllib3.disable_warnings()

0

หากคุณต้องการหยุดคำเตือนที่ไม่ปลอดภัยเช่น:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: กำลังทำการร้องขอ HTTPS ที่ไม่ได้ตรวจสอบ ขอแนะนำให้เพิ่มการตรวจสอบใบรับรอง ดู: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)

ทำ:

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

ตรวจสอบ = false

เป็นกุญแจสำคัญดังต่อไปนี้ไม่ดี:

requests.packages.urllib3.disable_warnings ()

หรือ

urllib3.disable_warnings ()

แต่คุณต้องรู้ว่าที่อาจก่อให้เกิดความเสี่ยงด้านความปลอดภัยที่อาจเกิดขึ้น


0

ฉันมีปัญหาเดียวกันกับ ล่ามชุมชน
Mac
Pycharm รุ่น 2019.3
Python 3.6
การอัพเกรด pip กับ 20.0.2 ใช้งานได้สำหรับฉัน
Pycharm --> Preferences --> Project Interpreter --> click on pip --> specify version 20.0.2 --> Install package

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