Erro SSL InsecurePlatform ao usar o pacote de solicitações

237

Estou usando o Python 2.7.3 e solicitações. Eu instalei solicitações via pip. Eu acredito que é a versão mais recente. Estou executando o Debian Wheezy.

Eu usei solicitações várias vezes no passado e nunca enfrentei esse problema, mas parece que ao fazer solicitações https, Requestsrecebo uma InsecurePlatformexceção.

O erro menciona urllib3, mas não o tenho instalado. Eu o instalei para verificar se o erro foi resolvido, mas não foi.

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

Alguma idéia de por que estou recebendo isso? Eu verifiquei os documentos, conforme especificado na mensagem de erro, mas eles estão dizendo para importar o urllib3 e desativar o aviso ou fornecer um certificado.

Luke Peckham
fonte

Respostas:

390

Use o recurso de segurança um tanto oculto :

pip install requests[security] ou pip install pyOpenSSL ndg-httpsclient pyasn1

Ambos os comandos instalam os seguintes pacotes extras:

  • pyOpenSSL
  • criptografia
  • idna

Observe que isso não é necessário para o python-2.7.9 + .

Se pip installfalhar com erros, verifique se você tem os pacotes necessários de desenvolvimento para libffi, libssle pythoninstalado em seu sistema usando o gerenciador de pacotes da distribuição :

  • Debian / Ubuntu - python-dev libffi-dev libssl-devpacotes.

  • Fedora - openssl-devel python-devel libffi-develpacotes.

A lista de distribuição acima está incompleta.

Solução alternativa ( consulte a resposta original de @TomDotTom ) :

Caso você não consiga instalar alguns dos pacotes de desenvolvimento necessários, também há uma opção para desativar esse aviso:

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

Se você pipé afetado InsecurePlatformWarninge não pode instalar nada do PyPI, ele pode ser corrigido com este guia passo a passo para implantar pacotes python extras manualmente.

placas
fonte
3
Tenho pedidos [de segurança], novo terminal, Python 2.7.3 e ainda obter este erro
Josh Nankin
45
você também precisa instalar bibliotecas adicionais no sistema para Ubuntu / Debian:sudo apt-get install python-dev libffi-dev libssl-dev
therealmarv
2
Tudo bem que o próprio "pip" (a partir da v6.1) emita o mesmo aviso de segurança?
precisa saber é
5
dependendo do seu shell, pode ser necessário digitarpip install 'requests[security]'
C. Reed
5
em zshell, você precisa dizer: pip instalar pedidos \ [de segurança \]
Amir Katz
68

Os Pedidos 2.6 introduziram este aviso para usuários de python anteriores ao 2.7.9, apenas com módulos SSL disponíveis.

Supondo que você não possa atualizar para uma versão mais recente do python, isso instalará mais bibliotecas SSL python atualizadas:

pip install --upgrade ndg-httpsclient 

No entanto, isso pode falhar em alguns sistemas sem as dependências de compilação para pyOpenSSL. Nos sistemas debian, executar isso antes do comando pip acima deve ser suficiente para o pyOpenSSL criar:

apt-get install python-dev libffi-dev libssl-dev
Jessica Gadling
fonte
4
Eu precisava instalar esses pacotes 'python-dev libffi-dev libssl-dev' para o ubuntu 14.04 também.
217 Andy
Obrigado! Adicionei
Wolfgang
@Jessica FTW! Muito obrigado - isso foi chato.
Neal Magee
18

Eu não uso isso na produção, apenas alguns corredores de teste. E para reiterar a documentação urllib3

Se você sabe o que está fazendo e deseja desativar este e outros avisos

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

Editar / Atualizar:

O seguinte também deve funcionar:

import logging
import requests

# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)
TomDotTom
fonte
1
O problema com esta solução é que ela simplesmente suprime e ignora o problema real. Além disso, isso não funcionará ao usar o pip para instalar ou atualizar pacotes.
Jason Parham
1
A única solução que funciona para mim em um ubuntu 1404 / Python 2.7.6. Obrigado
Ignacio Vazquez
7

Se você não conseguir atualizar sua versão do Python para 2.7.9 e quiser suprimir avisos,

você pode fazer o downgrade da sua versão de 'pedidos' para a 2.5.3:

sudo pip install requests==2.5.3

Sobre a versão: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html

raittes
fonte
8
Observe que o 2.5.3 tem um problema de segurança no manuseio de cookies durante os redirecionamentos.
plaes
2
Em vez de postar esta resposta duas vezes, você deve ter marcado a outra postagem como duplicada. Agora eu a fechei como tal.
Martijn Pieters
6
Eu apóio o comentário para não fazer o downgrade por causa da vulnerabilidade conhecida.
Sergiopereira
7

De fato, você pode tentar isso.

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

você pode ler o código para solicitações.

"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.
    ...
    """
zzzz zzzz
fonte
2
Tenha muito cuidado ao fazer isso, não verificar certificados pode ser perigoso!
21409 jaapz
Obviamente, não verificar documentos será perigoso. Mas, às vezes, esse é o último recurso. Ex: easy_install, apt-get, yum ou pip ... não funcionou, ou fazer um pouco de Web Crawler ...
zzzz zzzz
1
Estou em um ambiente de hospedagem compartilhada, portanto não posso atualizar o python para 2.7.9 e não consigo instalar o libffi.pc com o apt-get, o que é exigido pelos pedidos de instalação do pip [security] e pelas outras variantes de instalação do pip acima. Então essa resposta foi a que funcionou para mim. Desde que você entenda a ressalva importante de que, sem a verificação https, o conteúdo da página pode ser alterado / falsificado, acho que essa resposta está correta.
Chirael
5

Todas as soluções fornecidas aqui não ajudaram (estou restrito ao python 2.6.6). Encontrei a resposta em uma opção simples para passar para o pip:

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

Isso indica ao pip que não há problema em pegar o módulo em pypi.python.org.

Para mim, o problema é o proxy da minha empresa por trás do firewall que faz com que pareça um cliente mal-intencionado para alguns servidores. Viva segurança.


Atualização: consulte a resposta do @Alex para alterações nos domínios PyPi e --trusted-hostopções adicionais que podem ser adicionadas. (Copiei / colei aqui, mas a resposta dele, marcou com +1)

PfunnyGuy
fonte
Finalmente consegui instalar o tensorflow usando este comando, muito obrigado!
pedrobisp
3

Esta resposta não tem relação, mas se você quiser se livrar do aviso e receber o seguinte aviso de solicitações:

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.

Você pode desativá- lo adicionando a seguinte linha ao seu código python:

requests.packages.urllib3.disable_warnings()

daemonsl
fonte
Obrigado por isso. Nenhuma das outras respostas funcionou para mim. Estou impressionado que uma mensagem tão irritante e detalhada seja colocada por padrão.
Dan
1

Eu tive que ir para bash(do ZSH) primeiro. Então

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

corrigiu o problema.

Martin Thoma
fonte
Não tenho certeza. Eu acho que é devido aos colchetes
Martin Thoma
1

Este veio para mim no Ubuntu 14.04 (com Python 2.7.6) na semana passada depois que eu fiz uma apt-get dist-upgradeque incluía libssl1.1:amd64a partir deb.sury.org.

Desde que eu corro certbot-auto renewde um trabalho cron, também uso o --no-self-upgradepara reduzir a manutenção não programada. Esta parece ter sido a fonte do problema.

Para corrigir o erro, tudo o que eu precisava fazer era tornar-se root (com suo --loginswitch) e deixar a certbot-autoatualização em si. Ou seja:

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

em vez do que normalmente é executado no crontab do root:

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

Depois disso, permite que as renwals de criptografia sejam executadas normalmente mais uma vez.

Dale Anderson
fonte
Eu tenho o mesmo problema descrito aqui. avisos: /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: Um objeto SSLContext verdadeiro não está disponível. Isso impede que o urllib3 configure o SSL adequadamente e pode causar a falha de certas conexões SSL. Você pode atualizar para uma versão mais recente do Python para resolver isso. Para obter mais informações, consulte urllib3.readthedocs.io/en/latest/… . InsecurePlatformWarning Acabei de digitar o comando: sudo apt-get dist-upgrade O erro foi corrigido.
Didierh
0

Para mim, nenhum trabalho eu preciso atualizar pip ....

Debian / Ubuntu

instalar dependências

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

atualizar pip e instalar pacotes

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

Se você deseja remover dependências

sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
sudo apt-get autoremove
Thedemon007
fonte
0

Acabei de ter um problema semelhante em um servidor CentOS 5, onde instalei o python 2.7.12 em / usr / local, sobre uma versão muito mais antiga do python2.7. A atualização para o CentOS 6 ou 7 não é uma opção neste servidor no momento.

Alguns dos módulos python 2.7 ainda existiam na versão mais antiga do python, mas o pip falhou ao atualizar porque o pacote de criptografia mais recente não é suportado pelos pacotes do CentOS 5.

Especificamente, 'solicitações de instalação do pip [segurança]' estava falhando porque a versão openssl no CentOS 5 era 0.9.8e, que não é mais suportada pela criptografia> 1.4.0.

Para resolver o problema original dos POs, fiz o seguinte:

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

Esta criptografia instalada 1.3.4, que funciona com o openssl-0.9.8e. A criptografia 1.3.4 também é suficiente para satisfazer o requisito para o seguinte comando.

2) pip install 'requests[security]'

Este comando agora é instalado porque não tenta instalar a criptografia> 1.4.0.

Observe que no Centos 5 eu também precisava:

yum install openssl-devel

Para permitir a criação de criptografia

DavidG
fonte
0

Abaixo está como está funcionando para mim no Python 3.6:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()
Luiz Vaz
fonte
0

Não instale pyOpenSSL, pois em breve ele será descontinuado. A melhor abordagem atual é

import requests
requests.packages.urllib3.disable_warnings()
Mohammad Shahid Siddiqui
fonte
0

se você quiser interromper um aviso inseguro, como:

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: uma solicitação HTTPS não verificada está sendo feita. A adição de verificação de certificado é altamente recomendável. Consulte: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)

Faz:

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

Verifique = Falso

é a chave, os seguintes não são bons nisso:

orders.packages.urllib3.disable_warnings ()

ou

urllib3.disable_warnings ()

mas, você PRECISA SABER, isso pode causar riscos em potencial à segurança .

JZ
fonte
0

Eu tive o mesmo problema com o
Mac
Pycharm community edition 2019.3
interpretador Python 3.6.
A atualização do pip com 20.0.2 funcionou para mim.
Pycharm --> Preferences --> Project Interpreter --> click on pip --> specify version 20.0.2 --> Install package

GPopat
fonte