Suprimir InsecureRequestWarning: A solicitação HTTPS não verificada está sendo feita no Python2.6


345

Estou escrevendo scripts em Python2.6 com o uso de pyVmomi e enquanto estiver usando um dos métodos de conexão:

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

Recebo o seguinte aviso:

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

O interessante é que eu não tenho o urllib3 instalado com o pip (mas existe em /usr/lib/python2.6/site-packages/requests/packages/urllib3/ ).

Eu tentei como sugerido aqui

import urllib3
...
urllib3.disable_warnings()

mas isso não mudou nada.


Você pode tentar definir o nível de log para esse módulo específico, conforme descrito nesta resposta stackoverflow.com/questions/7234262/…
Reina Abolofia

Existe uma solução global e totalmente funcional: stackoverflow.com/questions/14463277/…
jmcollin92 4/16/16

2
AVISO: desative a validação de certificado apenas se você não se importar com alguém que se faça passar pelo servidor remoto!
ivan_pozdeev

4
bem, o aviso realmente não impede o que está acontecendo. Não está desativando a validação, está desativando o aviso sobre a falta de validação.
dwanderson

Respostas:


794

Você pode desativar qualquer aviso do Python através da PYTHONWARNINGSvariável de ambiente. Nesse caso, você deseja:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Para desativar o uso do código Python ( requests >= 2.16.0):

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

Para requests < 2.16.0, veja a resposta original abaixo.

Resposta original

O motivo de urllib3.disable_warnings()não funcionar para você é porque parece que você está usando uma instância separada do urllib3 vendida dentro de solicitações.

Eu recolho isso com base no caminho aqui: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

Para desativar os avisos no urllib3 fornecido pelas solicitações, você precisará importar essa instância específica do módulo:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

Tenho um blog sobre o desenvolvimento que faço no pyvmomi e cobri esse problema em outubro de 2014. Estou compartilhando este link para ajudar outras pessoas a encontrar informações úteis sobre o pyvmomi no futuro: errr-online.com/index.php/tag/pyvmomi
Michael Rice

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

2
Para completar:from requests.packages.urllib3.exceptions import InsecureRequestWarning
propjk007

2
Esta resposta está desatualizada. Para uma versão moderna, consulte a resposta de Nayana Adassuriya.
Dakkaron

3
Copiado de resposta de Nayana Adassuriya: import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning).
Samuel

117

Esta é a resposta em 2017. urllib3não faz requestsmais parte

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

7
O ano é menos importado que o número de revisão do python que você está usando.
CodeMonkey 28/09

3
Sim, revisão mais importante que ano. Isto é pararequests >= 2.16.0
dwanderson

Alguém pode postar a versão do urllib3, quando eu tento isso, ele diz urllib3 tem nenhum atributo 'disable_warnings'
steff_bdh

11
Estou confuso com esta resposta. Minha requestsversão é 2.21.0e tem urllib3. Eu tentei 2.16.0, `2.16.1 , and 2.17.0` e todos eles tinham urllib3. Eu tentei 2.4.0e aquele não tinha, no entanto. Eles adicionaram de volta?
Mike Furlender

trabalhou para mim !!
deepdive

35

De acordo com este comentário do github , é possível desativar os urllib3avisos de solicitação via requestsem um liner:

requests.packages.urllib3.disable_warnings()

Isso suprimirá todos os avisos, não apenas InsecureRequest(isto é, também suprimirá InsecurePlatformetc). Nos casos em que apenas queremos que as coisas funcionem, acho a concisão útil.


4
Esta é a melhor opção para 2,7 como eu não precisa urllib3 importação apenas para suprimir o aviso
codemonkey

3
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)parece funcionar.
mattalxndr 8/01

29

A maneira correta é ler a seção relevante no link fornecido e fazer o que ele diz. A maneira específica de requests(que agrupa sua própria cópia urllib3), conforme a documentação de Certificados da CA - Uso avançado - Solicitações 2.8.1 :

  • requests é fornecido com seu próprio pacote de certificados (mas só pode ser atualizado com o módulo)
  • ele usará (já que requests v2.4.0) o certifipacote, se estiver instalado

A medida de segurança da verificação de certificado HTTPS não é algo a ser descartado com entusiasmo. O ataque Man-in-the-middle que impede que você o proteja de terceiros, por exemplo, invadindo um vírus ou adulterando ou roubando seus dados.

O que, com as operações globais atuais de hackers, apoiadas pelo governo, como as Operações de Acesso Personalizado e o Grande Firewall da China, direcionadas à infraestrutura de rede, é mais provável do que você pensa.


Tenho pedidos 2.8.1 e certifi 2015.11.20.1 e ainda recebo o aviso.
Alex Bartiş 9/12/2015

3
@ AlexBartiş pode ser se você (ou algum código que você chamar) passar verify=False.
ivan_pozdeev

2
Por que há tão poucos votos para esta resposta? É realmente seguro ignorar esses avisos?
sgryzko

11
@sgryzko Somente se você não se importa com alguém se passando por um servidor remoto. Provavelmente, muitos de fato não se importam e / ou não leem além da primeira resposta, contribuindo para o ciclo de feedback positivo. Essa resposta também foi publicada quase um ano depois.
ivan_pozdeev

2
Sim, você deve fazer a coisa certa em um ambiente de produção e suprimir cegamente o erro é ruim. Mas é uma coisa completamente válida querer suprimir esses erros em um ambiente de teste.
Vroo

12

Para impaciente, uma maneira rápida de desativar o aviso HTTPS não verificado do python:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

Para o PowerShell, o comando é$env:PYTHONWARNINGS="ignore:Unverified HTTPS request"
Gwen Au

10

A resposta aceita não funcionará se alguns fornecedores de pacotes tiverem sua própria cópia do urllib3; nesse caso, isso ainda funcionará:

import warnings

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

1

Eu tive um problema semelhante com o PyVmomi Client. Com o Python versão 2.7.9, resolvi esse problema com a seguinte linha de código:

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

Observe que, para que isso funcione, você precisa do Python 2.7.9 pelo menos.


1

Por que não usar a função original pyvmomi SmartConnectNoSSL. Eles adicionaram essa função June 14, 2016e o nomearam ConnectNoSSL, um dia depois de alterar o nome para SmartConnectNoSSL, use-o em vez de passar o aviso com linhas de código desnecessárias no seu projeto?

Fornece um método padrão para conectar-se a um servidor especificado sem verificação SSL. Útil ao conectar-se a servidores com certificados autoassinados ou quando você deseja ignorar completamente o SSL

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

0

Para Python 2.7

Inclua a variável de ambiente PYTHONWARNINGS como chave e o valor correspondente a ser ignorado, como:

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.