Lỗi SSL InsecurePl Platform khi sử dụng gói Yêu cầu


237

Tôi đang sử dụng Python 2.7.3 và Yêu cầu. Tôi đã cài đặt Yêu cầu qua pip. Tôi tin rằng đó là phiên bản mới nhất. Tôi đang chạy trên Debian Wheezy.

Tôi đã sử dụng Yêu cầu rất nhiều lần trong quá khứ và chưa bao giờ gặp phải vấn đề này, nhưng dường như khi thực hiện các yêu cầu https với Requeststôi đều có InsecurePlatformngoại lệ.

Lỗi đề cập urllib3, nhưng tôi không cài đặt. Tôi đã cài đặt nó để kiểm tra xem nó có khắc phục được lỗi không, nhưng không được.

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

Có ý tưởng nào về lý do tại sao tôi nhận được điều này? Tôi đã kiểm tra các tài liệu, như được chỉ định trong thông báo lỗi, nhưng các tài liệu đang nói nhập urllib3 và vô hiệu hóa cảnh báo hoặc cung cấp chứng chỉ.

Câu trả lời:


390

Sử dụng tính năng bảo mật có phần bị ẩn :

pip install requests[security] hoặc là pip install pyOpenSSL ndg-httpsclient pyasn1

Cả hai lệnh đều cài đặt các gói bổ sung sau:

  • pyOpenSSL
  • mật mã
  • bình thường

Xin lưu ý rằng điều này là không bắt buộc đối với python-2.7.9 + .

Nếu pip installkhông có lỗi, hãy kiểm tra xem bạn đã yêu cầu các gói phát triển libffi, libsslpythonđược cài đặt trong hệ thống của bạn sử dụng quản lý gói phân phối của :

  • Debian / Ubuntu - python-dev libffi-dev libssl-devgói.

  • Fedora - openssl-devel python-devel libffi-develgói.

Danh sách phân phối ở trên là không đầy đủ.

Giải pháp thay thế ( xem câu trả lời ban đầu của @TomDotTom ) :

Trong trường hợp bạn không thể cài đặt một số gói phát triển được yêu cầu, cũng có một tùy chọn để tắt cảnh báo đó:

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

Nếu pipbản thân bạn bị ảnh hưởng bởi InsecurePlatformWarningvà không thể cài đặt bất cứ thứ gì từ PyPI, thì có thể khắc phục bằng hướng dẫn từng bước này để triển khai các gói python bổ sung theo cách thủ công.


3
Tôi có yêu cầu [bảo mật], thiết bị đầu cuối mới, Python 2.7.3 và vẫn gặp lỗi này
Josh Nankin

45
bạn cũng cần cài đặt các thư viện bổ sung trên hệ thống cho Ubuntu / Debian:sudo apt-get install python-dev libffi-dev libssl-dev
Therealmarv

2
Có ổn không khi bản thân "pip" (nhìn chằm chằm từ phiên bản 6.1) đưa ra cảnh báo bảo mật tương tự?
jmster

5
tùy thuộc vào vỏ của bạn, bạn có thể cần phải nhậppip install 'requests[security]'
C. Reed

5
trong zshell, bạn cần nói: pip install request \ [security \]
Amir Katz

68

Yêu cầu 2.6 đưa ra cảnh báo này cho người dùng python trước 2.7.9 chỉ với các mô-đun SSL có sẵn.

Giả sử bạn không thể nâng cấp lên phiên bản python mới hơn, điều này sẽ cài đặt các thư viện SSL python cập nhật hơn:

pip install --upgrade ndg-httpsclient 

TUY NHIÊN, điều này có thể thất bại trên một số hệ thống mà không phụ thuộc vào bản dựng cho pyOpenSSL. Trên các hệ thống debian, chạy cái này trước lệnh pip ở trên là đủ để pyOpenSSL xây dựng:

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

4
Tôi cần phải cài đặt các gói này 'python-dev libffi-dev libssl-dev' cho ubfox 14.04.
Andy

Cảm ơn! Tôi đã thêm một ghi chú vào tài liệu: github.com/shazow/urllib3/pull/765
Wolfgang

@Jessica FTW! Cảm ơn rất nhiều - điều này thật khó chịu.
Neal Magee

18

Tôi không sử dụng điều này trong sản xuất, chỉ là một số vận động viên thử nghiệm. Và để nhắc lại tài liệu urllib3

Nếu bạn biết những gì bạn đang làm và muốn vô hiệu hóa điều này và các cảnh báo khác

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

Chỉnh sửa / Cập nhật:

Sau đây cũng nên làm việc:

import logging
import requests

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

1
Vấn đề với giải pháp này là nó chỉ đơn giản là triệt tiêu và bỏ qua vấn đề thực tế. Hơn nữa, điều này sẽ không hoạt động khi sử dụng pip để cài đặt hoặc nâng cấp các gói.
Jason Parham

1
Giải pháp duy nhất phù hợp với tôi trên Ubuntu 1404 / Python 2.7.6. Cảm ơn
Ignacio Vazquez

7

Nếu bạn không thể nâng cấp phiên bản Python của mình lên 2.7.9 và muốn loại bỏ các cảnh báo,

bạn có thể hạ phiên bản 'yêu cầu' của mình xuống 2.5.3:

sudo pip install requests==2.5.3

Giới thiệu về phiên bản: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html


8
Xin lưu ý rằng 2.5.3 có vấn đề bảo mật với việc xử lý cookie trong quá trình chuyển hướng.
plaes

2
Thay vì đăng câu trả lời này hai lần, bạn nên đánh dấu bài đăng khác là trùng lặp. Bây giờ tôi đã đóng nó như vậy.
Martijn Pieters

6
Tôi thứ hai bình luận để không hạ cấp vì lỗ hổng đã biết.
sergiopereira

7

Trong thực tế, bạn có thể thử điều này.

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

bạn có thể đọc mã cho các yêu cầu.

"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
Hãy rất cẩn thận làm điều này, không xác minh certs có thể nguy hiểm!
jaapz

Tất nhiên, không xác minh certs sẽ nguy hiểm. Nhưng đôi khi, đây là một phương sách cuối cùng. Ví dụ: easy_install, apt-get, yum hoặc pip ... không chạy, Hoặc làm một Trình thu thập dữ liệu web nhỏ ...
zzzz zzzz

1
Tôi đang ở trong môi trường lưu trữ được chia sẻ vì vậy tôi không thể nâng cấp python lên 2.7.9 và tôi không thể cài đặt libffi.pc bằng apt-get, được yêu cầu bởi các yêu cầu cài đặt pip [bảo mật] và các biến thể cài đặt pip khác ở trên. Vì vậy, câu trả lời này là một trong những làm việc cho tôi. Miễn là bạn hiểu được cảnh báo quan trọng mà không cần xác minh https, nội dung trang có thể bị thay đổi / giả mạo, tôi nghĩ câu trả lời này là ổn.
Chirael

5

Tất cả các giải pháp được đưa ra ở đây đều không có ích (Tôi bị ràng buộc với python 2.6.6). Tôi đã tìm thấy câu trả lời trong một công tắc đơn giản để chuyển sang pip:

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

Điều này nói với pip rằng bạn có thể lấy mô-đun từ pypi.python.org.

Đối với tôi, vấn đề là proxy của công ty tôi đằng sau tường lửa của nó khiến nó trông giống như một máy khách độc hại đối với một số máy chủ. Hoan hô an ninh.


Cập nhật: Xem câu trả lời của @Alex để biết các thay đổi trong miền PyPi và các --trusted-hosttùy chọn bổ sung có thể được thêm vào. (Tôi sẽ sao chép / dán ở đây, nhưng câu trả lời của anh ấy, vì vậy +1 anh ấy)


Cuối cùng tôi cũng có thể cài đặt tenorflow bằng lệnh này, cảm ơn rất nhiều!
pedrobisp

3

Câu trả lời này không liên quan, nhưng nếu bạn muốn thoát khỏi cảnh báo và nhận cảnh báo sau từ các yêu cầu:

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.

Bạn có thể vô hiệu hóa nó bằng cách thêm dòng sau vào mã python của bạn:

requests.packages.urllib3.disable_warnings()


Cảm ơn vì điều đó. Không có câu trả lời nào khác làm việc cho tôi. Tôi bị thổi phồng rằng một tin nhắn phiền phức dài dòng như vậy sẽ được đặt theo mặc định.
Dan

1

Tôi đã phải đi đến bash(từ ZSH) trước. Sau đó

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

đã khắc phục sự cố.


Tôi không chắc. Tôi nghĩ rằng đó là do dấu ngoặc
Martin Thoma

1

Điều này đã xuất hiện với tôi trên Ubuntu 14.04 (với Python 2.7.6) vào tuần trước sau khi tôi thực hiện một apt-get dist-upgradetính năng bao gồm libssl1.1:amd64từ đó deb.sury.org.

Vì tôi chạy certbot-auto renewtừ một công việc định kỳ, tôi cũng sử dụng --no-self-upgradeđể cắt giảm bảo trì đột xuất. Đây dường như là nguồn gốc của rắc rối.

Để khắc phục lỗi này, tất cả những gì cần thiết để làm được trở thành root (với su's --loginswitch) và để certbot-autotự nâng cấp. I E:

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

thay vì những gì thường chạy từ crontab gốc:

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

Sau đó, letwrypt renwals chạy bình thường một lần nữa.


Tôi có cùng một vấn đề được mô tả ở đây. cảnh báo: /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePl platformWarning: Không có đối tượng SSLContext thực sự. Điều này ngăn urllib3 cấu hình SSL một cách thích hợp và có thể khiến một số kết nối SSL nhất định không thành công. Bạn có thể nâng cấp lên phiên bản Python mới hơn để giải quyết vấn đề này. Để biết thêm thông tin, xem urllib3.readthedocs.io/en/latest/ ,. InsecurePl PlatformWarning Tôi chỉ cần gõ lệnh: sudo apt-get dist-Nâng cấp Lỗi đã được sửa.
Didierh

0

Đối với tôi không có công việc tôi cần nâng cấp pip ....

Debian / Ubuntu

cài đặt phụ thuộc

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

nâng cấp gói và cài đặt gói

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

Nếu bạn muốn loại bỏ phụ thuộc

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

0

Tôi vừa gặp sự cố tương tự trên máy chủ CentOS 5 nơi tôi đã cài đặt python 2.7.12 in / usr / local trên phiên bản python2.7 cũ hơn nhiều. Nâng cấp lên CentOS 6 hoặc 7 không phải là một tùy chọn trên máy chủ này ngay bây giờ.

Một số mô-đun python 2.7 vẫn còn tồn tại từ phiên bản cũ hơn của python, nhưng pip đã không nâng cấp được vì gói mật mã mới hơn không được gói CentOS 5 hỗ trợ.

Cụ thể, 'yêu cầu cài đặt pip [bảo mật]' đã không thành công vì phiên bản openssl trên CentOS 5 là 0.9.8e không còn được hỗ trợ bởi mật mã> 1.4.0.

Để giải quyết vấn đề ban đầu của OP tôi đã làm:

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

Mã hóa được cài đặt 1.3.4 này hoạt động với openssl-0.9.8e. cryptograpy 1.3.4 cũng đủ để đáp ứng yêu cầu cho lệnh sau.

2) pip install 'requests[security]'

Lệnh này hiện cài đặt vì nó không cố cài đặt mật mã> 1.4.0.

Lưu ý rằng trên Centos 5 tôi cũng cần phải:

yum install openssl-devel

Để cho phép mật mã xây dựng


0

Dưới đây là cách nó hoạt động với tôi trên Python 3.6:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()

0

Không cài đặt pyOpenSSL vì nó sẽ sớm bị phản đối. Cách tiếp cận tốt nhất hiện nay là-

import requests
requests.packages.urllib3.disable_warnings()

0

nếu bạn chỉ muốn dừng cảnh báo không an toàn như:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: Yêu cầu HTTPS chưa được xác minh đang được thực hiện. Thêm xác nhận chứng chỉ được khuyến khích. Xem: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)

làm:

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

xác minh = Sai

là chìa khóa, những điều sau đây không tốt về nó:

request.packages.urllib3.disable_warnings ()

hoặc là

urllib3.disable_warnings ()

nhưng, bạn phải biết, điều đó có thể gây ra rủi ro bảo mật tiềm ẩn .


0

Tôi gặp vấn đề tương tự với phiên bản cộng đồng
Mac
Pycharm 2019.3 Trình
thông dịch Python 3.6.
Nâng cấp pip với 20.0.2 làm việc cho tôi.
Pycharm --> Preferences --> Project Interpreter --> click on pip --> specify version 20.0.2 --> Install package

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.