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.