urllib e erro "SSL: CERTIFICATE_VERIFY_FAILED"

279

Eu estou recebendo o seguinte erro:

Exception in thread Thread-3:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in        __bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in  run
self.__target(*self.__args, **self.__kwargs)
File "/Users/Matthew/Desktop/Skypebot 2.0/bot.py", line 271, in process
info = urllib2.urlopen(req).read()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1240, in https_open
context=self._context)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>

Este é o código que está causando este erro:

if input.startswith("!web"):
    input = input.replace("!web ", "")      
    url = "https://domainsearch.p.mashape.com/index.php?name=" + input
    req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXX' })
    info = urllib2.urlopen(req).read()
    Message.Chat.SendMessage ("" + info)

A API que estou usando exige que eu use HTTPS. Como faço para ignorar a verificação?

user3724476
fonte
2
Não há nada errado com o URL e ele pode ser verificado com êxito com os certificados confiáveis ​​comuns. Portanto, é melhor não tentar ignorar a validação de certificado, mas corrigi-la. Qual versão do python você está usando?
Steffen Ullrich
Isso pode estar relacionado a stackoverflow.com/a/27826829/3081018 . O servidor usa o mesmo tipo de cadeia de certificados com vários caminhos de confiança. Veja lá qual café você pode precisar usar para verificação.
Steffen Ullrich
7
Este erro também ocorre no Python 3.5 após a atualização para o yosemite
pyCthon 3/15/15
2
Isso explica a situação. access.redhat.com/articles/2039753
Charlie Burns
4
"Como posso ignorar a verificação?" é a pergunta errada. Você provavelmente deve perguntar como validar o certificado fornecido pelo domínio.
JWW

Respostas:

296

Se você quiser apenas ignorar a verificação, poderá criar um novo SSLContext . Por padrão, os contextos recém-criados usam CERT_NONE .

Tenha cuidado com isso, conforme indicado na seção 17.3.7.2.1

Ao chamar o construtor SSLContext diretamente, CERT_NONE é o padrão. Como não autentica o outro par, pode ser inseguro, especialmente no modo cliente, onde na maioria das vezes você deseja garantir a autenticidade do servidor com o qual está falando. Portanto, no modo cliente, é altamente recomendável usar CERT_REQUIRED.

Mas se você quer que ele funcione agora por algum outro motivo, você pode fazer o seguinte, também precisará import ssl:

input = input.replace("!web ", "")      
url = "https://domainsearch.p.mashape.com/index.php?name=" + input
req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' })
gcontext = ssl.SSLContext()  # Only for gangstars
info = urllib2.urlopen(req, context=gcontext).read()
Message.Chat.SendMessage ("" + info)

Isso deve contornar o seu problema, mas você realmente não está resolvendo nenhum deles, mas não o verá [SSL: CERTIFICATE_VERIFY_FAILED]porque agora não está verificando o certificado!

Para adicionar ao exposto, se você quiser saber mais sobre o motivo de estar vendo esses problemas, consulte o PEP 476 .

Esse PEP propõe habilitar a verificação de assinaturas de certificado X509, bem como a verificação de nome de host para clientes HTTP do Python por padrão, sujeita à exclusão por chamada. Essa alteração seria aplicada ao Python 2.7, Python 3.4 e Python 3.5.

Existe uma opção recomendada de exclusão que não é diferente do meu conselho acima:

import ssl

# This restores the same behavior as before.
context = ssl._create_unverified_context()
urllib.urlopen("https://no-valid-cert", context=context)

Ele também possui uma opção altamente desencorajada via monkeypatching, que você geralmente não vê em python:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

Que substitui a função padrão para criação de contexto pela função de criar um contexto não verificado.

Observe com isso, conforme declarado no PEP:

Esta orientação é direcionada principalmente aos administradores de sistema que desejam adotar versões mais recentes do Python que implementam esse PEP em ambientes herdados que ainda não suportam a verificação de certificado em conexões HTTPS. Por exemplo, um administrador pode optar por não incluir o monkeypatch acima em sitecustomize.py em seu Ambiente operacional padrão para Python. Aplicativos e bibliotecas NÃO DEVEM tornar esse processo de alteração amplo (exceto talvez em resposta a uma configuração de configuração controlada pelo administrador do sistema).

Se você quiser ler um artigo sobre por que não validar certificados é ruim em software, você pode encontrá-lo aqui !

Noelkd
fonte
1
Portanto, se esse erro está me impedindo de usar, setup.py uploadcomo posso corrigir isso?
precisa saber é
5
ssl._create_default_https_context = ssl._create_unverified_context isso funcionou para mim como mencionado por Noelkd no final. Como o nosso é um site de intranet para impressoras HP ... usado apenas para raspagem ... não temos problemas em usar esse método.
ihightower
Seu primeiro método é o menos desejável para a validação de desvio. Por que aquele que realmente valida o certificado não está listado primeiro?
JWW
1
isso também pode acontecer se você tiver uma versão desatualizada do openSSL. Então, para mim, o que funcionou foi atualizar para a versão mais recente certifi e atualizar o openssl nas caixas.
myusuf3
1
context é o que eu precisava # 10
prayagupd
382

Esta não é uma solução para o seu problema específico, mas estou colocando aqui porque este tópico é o principal resultado do Google para "SSL: CERTIFICATE_VERIFY_FAILED" e me levou a uma loucura.

Se você instalou o Python 3.6 no OSX e está recebendo o erro "SSL: CERTIFICATE_VERIFY_FAILED" ao tentar se conectar a um site https: //, é provável que o Python 3.6 no OSX não possua nenhum certificado e não possa validar nenhum SSL conexões. Esta é uma alteração para 3.6 no OSX e requer uma etapa pós-instalação, que instala o certifipacote de certificados. Isso está documentado no Leia-me, que você deve encontrar em/Applications/Python\ 3.6/ReadMe.rtf

O ReadMe solicitará que você execute este script pós-instalação, que apenas instala certifi:/Applications/Python\ 3.6/Install\ Certificates.command

As notas de versão têm mais algumas informações: https://www.python.org/downloads/release/python-360/

Craig Glennie
fonte
105
Execute diretamente / Aplicativos / Python \ 3.6 / Install \ Certificates.com e solucione meu problema no OSX. Obrigado.
muyong
2
Estou usando o OS X El Capitan 10.11.6, Python 3.6.0 e esta solução funcionou perfeitamente.
precisa saber é o seguinte
2
Estou usando o macOS Sierra 10.12.5, Python 3.6.1 e esta solução funcionou perfeitamente.
James
4
Isso o corrigiu para mim, /Applications/Python\ 3.7/Install\ Certificates.command executando isso diretamente no terminal! Obrigado @CraigGlennie & @muyong Agradeço a out-of-the-box-thinkingsua colocação aqui!
precisa saber é o seguinte
6
Python 3.7 no macOS Mojave: não funciona aqui. Eu desinstalado / reinstalado / executar o certificado instalar, reiniciado, etc .. não funciona para mim
Thomas
71

Para expandir a resposta de Craig Glennie:

no Python 3.6.1 no MacOs Sierra

Inserir isso no terminal bash resolveu o problema:

pip install certifi
/Applications/Python\ 3.6/Install\ Certificates.command
jnPy
fonte
3
tente sudo /Applications/Python\ 3.6/Install\ Certificates.commandse as permissões forem negadas.
KingKongCoder
De fato, isso não corrige o problema no Python 3.6. -1
hyperum
1
Se você estiver usando a linha de comando, você também pode encontrar a pasta Aplicativos (ou equivalente em outros sistemas operacionais) criada pelo Python na instalação e abrir o script clicando duas vezes. O nome específico da pasta depende da versão do Python que você instalou.
Erdős-Bacon
Funcionou como um encanto para o Python 3.7.3. Obrigado.
klbytec
Obrigado. Eu literalmente procurei centenas de soluções e as suas funcionaram.
NND
43

No Windows, o Python não analisa o certificado do sistema, ele usa o seu próprio localizado em ?\lib\site-packages\certifi\cacert.pem.

A solução para o seu problema:

  1. faça o download do certificado de validação de domínio como arquivo * .crt ou * pem
  2. abra o arquivo no editor e copie o conteúdo para a área de transferência
  3. encontre sua cacert.pemlocalização:from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
  4. edite o cacert.pemarquivo e cole seu certificado de validação de domínio no final do arquivo.
  5. Salve o arquivo e aproveite as solicitações!
Bruno Gabuzomeu
fonte
6
lib\site-packages\certifi\cacert.pemnão existe no Python 2.7.10. E a pergunta é sobre urllib2nãorequests
Kevin Smyth
2
Melhor solução até agora, a API do twitter usa o certificado DigiCert, que não está no arquivo cacert.pem do meu python. Eu adicionei lá e VOILA!
digz6666
2
Trabalhou no Debian. Para os registros, o caminho do arquivo no meu sistema foi: /usr/local/lib/python2.7/dist-packages/certifi-2015.09.06.2-py2.7.egg/certifi/cacert.pem. Obrigado!
ofavre 23/03
Infelizmente, as solicitações python não usam o armazenamento confiável da CA de nenhum sistema operacional. github.com/requests/requests/issues/2966 . Você deve definir REQUESTS_CA_BUNDLE github.com/bloomreach/s4cmd/issues/111#issuecomment-406839514 .
Jamshid
Funciona no Windows 10, Python 3.6, com as APIs do Google e Twitter e o módulo de solicitações em geral.
Brittb
36

Minha solução para Mac OS X:

1) Atualize para o Python 3.6.5 usando o instalador nativo do aplicativo Python baixado do site oficial da linguagem Python https://www.python.org/downloads/

Descobri que este instalador está cuidando da atualização dos links e links simbólicos para o novo Python muito melhor do que o homebrew.

2) Instale um novo certificado usando "./Install Certificates.command", que está no diretório Python 3.6 atualizado

> cd "/Applications/Python 3.6/"
> sudo "./Install Certificates.command"
Claude COULOMBE
fonte
Trabalhou como charme em Mac OS X.
Manu mathew
31

Você pode tentar adicionar isso às suas variáveis ​​de ambiente:

PYTHONHTTPSVERIFY=0 

Observe que isso desabilitará toda a verificação HTTP, o que é um pouco uma abordagem de marreta; no entanto, se a verificação não for necessária, pode ser uma solução eficaz.

Chris Halcrow
fonte
17
Eu suspeito que desabilitar toda a verificação HTTP para todo o python é um pouco excessivo para lidar com um erro na verificação. Existem muitos casos em que um pode querer verificação por padrão.
trevorKirkby
Trabalhou para mim no Windows Server 2016 no python 2.7.13. Normalmente, não tenho o python instalado nos servidores Windows, mas precisava dele para uma atualização do vCenter com migração do Nexus 1000v para o VDS, e isso resolve o problema com um certificado vCenter autoassinado no momento (usará VMCA e certificados válidos em ambiente atualizado). Eu não tive nenhuma sorte para conseguir o certificado para ser aceito pela edição do cacert.pem no pacote pedido python
Christopher Thorjussen
3
Além disso, defino a variável diretamente na janela da linha de comando antes de executar o script, para que não desabilite todas as verificações como @ alguém ou outro tem medo, o que eu também não recomendaria.
Christopher Thorjussen
Isso é perfeito para o meu caso de uso: teste. Eu nunca faria isso na produção, mas para executar testes que não têm nada a ver com SSL, essa é uma opção maravilhosa.
21817 Sorin
Obrigado, esta solução fez isso por mim: import os os.environ [ "PYTHONHTTPSVERIFY"] = "0"
mbello
28

Eu estava tendo um problema semelhante, embora estivesse usando urllib.request.urlopenno Python 3.4, 3.5 e 3.6 . (Essa é uma parte do equivalente ao Python 3 urllib2, conforme nota na cabeça da urllib2página de documentação do Python 2. )

Minha solução foi pip install certifiinstalar certifi, que possui:

... uma coleção cuidadosamente selecionada de certificados raiz para validar a confiabilidade dos certificados SSL enquanto verifica a identidade dos hosts TLS.

Então, no meu código, onde anteriormente eu tinha:

import urllib.request as urlrq

resp = urlrq.urlopen('https://example.com/bar/baz.html')

Eu a revisei para:

import urllib.request as urlrq
import certifi

resp = urlrq.urlopen('https://example.com/bar/baz.html', cafile=certifi.where())

Se eu li a urllib2.urlopendocumentação corretamente, ela também tem um cafileargumento. Portanto, urllib2.urlopen([...], certifi.where())pode funcionar para o Python 2.7 também.


UPDATE (2020-01-01): A partir do Python 3.6, o cafileargumento to urlopenfoi descontinuado e o contextargumento deveria ser especificado. Eu encontrei o seguinte para trabalhar igualmente bem em 3.5 a 3.8:

import urllib.request as urlrq
import certifi
import ssl

resp = urlrq.urlopen('https://example.com/bar/baz.html', context=ssl.create_default_context(cafile=certifi.where()))
hBy2Py
fonte
1
load_verify_locationsmuda a SSLContextinstância e retorna None. Você deve usar em seu context=ssl.create_default_context(cafile=certifi.where())lugar. Veja os ssldocumentos para mais informações.
ostrokach 20/01
1
@ostrokach Huh, tentei algo assim, mas devo ter usado a sslfunção errada . Veja editar; OK?
hBy2Py 21/01
13
import requests
requests.packages.urllib3.disable_warnings()

import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

Retirado daqui https://gist.github.com/michaelrice/a6794a017e349fc65d01

Prostak
fonte
testou esta solução no ambiente Jenkins, ambiente pessoal, isso funciona!
rapport89
2
Isso é extremamente inseguro, pois ignora TODAS as verificações de certificados, use por sua conta e risco e, pelo amor de NINGUÉM, não use isso no código de produção.
precisa saber é o seguinte
Obrigado. Finalmente funcionou. Não é necessário que o Python 3.6 esteja instalado em / Aplicativos no Mac OS. Essa deve ser a resposta aceita.
Biranchi
Você nunca deve fazer esse tipo de captura de tela. É extremamente perigoso e afetará todo o uso posterior do código.
Acumenus 21/02/19
10

Como escrevi em um comentário, esse problema provavelmente está relacionado a esta resposta do SO .

Em resumo: existem várias maneiras de verificar o certificado. A verificação usada pelo OpenSSL é incompatível com os certificados raiz confiáveis ​​que você possui no seu sistema. O OpenSSL é usado pelo Python.

Você pode tentar obter o certificado ausente da Autoridade de Certificação Primária Pública da Classe 3 da Verisign e usar a cafileopção de acordo com a documentação do Python :

urllib2.urlopen(req, cafile="verisign.pem")
Steffen Ullrich
fonte
Você pode me ajudar plz resolver este problema relevante na validação python e SSL ligação
Nenhum
8

Eu tive um problema semelhante em uma das minhas máquinas Linux. A geração de certificados novos e a exportação de uma variável de ambiente apontando para o diretório de certificados corrigiram isso para mim:

$ sudo update-ca-certificates --fresh
$ export SSL_CERT_DIR=/etc/ssl/certs
ritiek
fonte
7

Preciso adicionar outra resposta, porque, assim como Craig Glennie, fui atrás de um ganso selvagem devido às muitas postagens referentes a esse problema na Web.

Estou usando o MacPorts, e o que originalmente pensei ser um problema do Python era de fato um problema do MacPorts: ele não instala um certificado raiz com a instalação do openssl. A solução é port install curl-ca-bundle, como mencionado nesta postagem do blog .

corwin.amber
fonte
5

Eu encontrei isso aqui

Encontrei esta solução, insira este código no início do seu arquivo de origem:

import ssl

try:
   _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

Esse código faz a verificação desfeita para que a certificação ssl não seja verificada.

Ganesh Chowdhary Sadanala
fonte
ver este vídeo me ajudou muito a entender o que é ssl. URL do vídeo: youtu.be/dsuVPxuU_hc
Ganesh Chowdhary Sadanala
4

Para o Python 3.4+ no Centos 6/7 , Fedora , basta instalar a CA confiável desta maneira:

  1. Copie o CA.crt para /etc/pki/ca-trust/source/anchors/
  2. update-ca-trust force-enable
  3. update-ca-trust extract
Cherif KAOUA
fonte
2
Pode ser uma pergunta estúpida, mas o que é o CA.crt e onde posso encontrá-lo?
Iqbal
4

Solução para Anaconda

Minha configuração é o Anaconda Python 3.7 no MacOS com um proxy. Os caminhos são diferentes.

  • É assim que você obtém o caminho correto dos certificados:
import ssl
ssl.get_default_verify_paths()

que no meu sistema produziu

Out[35]: DefaultVerifyPaths(cafile='/miniconda3/ssl/cert.pem', capath=None,
 openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/miniconda3/ssl/cert.pem',
 openssl_capath_env='SSL_CERT_DIR', openssl_capath='/miniconda3/ssl/certs')

Depois de saber para onde o certificado vai, concatenará o certificado usado pelo proxy até o final desse arquivo.

Eu já havia configurado o conda para trabalhar com meu proxy, executando:

conda config --set ssl_verify <pathToYourFile>.crt

Se você não se lembra onde está o seu certificado, pode encontrá-lo em ~/.condarc:

ssl_verify: <pathToYourFile>.crt

Agora concatene esse arquivo até o final /miniconda3/ssl/cert.pem e as solicitações deverão funcionar, e sklearn.datasetsferramentas específicas e similares deverão funcionar.

Advertências adicionais

As outras soluções não funcionaram porque a configuração do Anaconda é um pouco diferente:

  • O caminho Applications/Python\ 3.Xsimplesmente não existe.

  • O caminho fornecido pelos comandos abaixo é o caminho ERRADO

from requests.utils import DEFAULT_CA_BUNDLE_PATH
DEFAULT_CA_BUNDLE_PATH
Leo
fonte
3

Eu penduro minha cabeça de meio vergonha, pois tive o mesmo problema, exceto que, no meu caso, o URL que eu estava acessando era válido, o certificado era válido. O que não era válido foi a minha conexão com a web. Falha ao adicionar detalhes do proxy no navegador (neste caso, o IE). Isso impediu que o processo de verificação acontecesse corretamente.
Adicionado nos detalhes do proxy e meu python ficou muito feliz.

Publicidades
fonte
1
Não fique envergonhado por esquecer algo e depois descobrir e compartilhar, alguém pode achar isso útil. Usando IE embora ... vergonha: p
Davos
3

O Python 2.7.12 (padrão, 29 de julho de 2016, 15:26:22) corrigiu o problema mencionado. Esta informação pode ajudar outra pessoa.

caot
fonte
3
Eu encontrei-o em 2.7.12 no Mac, usando a biblioteca urllib2, usando a biblioteca requets parece bem embora
marcadian
@marcadian A instalação e o uso certifi, que aparentemente são uma cópia dos certificados mantidos por requests, corrigiram o problema para mim no Python 3.4 a 3.6 .
Hby2Py
3

Estou surpreso que todas essas instruções não tenham resolvido meu problema. No entanto, o diagnóstico está correto (BTW, estou usando Mac e Python3.6.1). Então, para resumir a parte correta:

  • No Mac, a Apple está descartando o OpenSSL
  • O Python agora usa seu próprio conjunto de certificado raiz da CA
  • A instalação binária do Python forneceu um script para instalar o certificado raiz da CA que o Python precisa ("/ Applications / Python 3.6 / Install Certificates.command")
  • Leia "/ Aplicativos / Python 3.6 / ReadMe.rtf" para obter detalhes

Para mim, o script não funciona e todas as instalações certifi e openssl também não foram corrigidas. Talvez porque eu tenha várias instalações python 2 e 3, além de muitas virtualenv. No final, preciso corrigi-lo manualmente.

pip install certifi   # for your virtualenv
mkdir -p /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl
cp -a <your virtualenv>/site-package/certifi/cacert.pem \
  /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/cert.pem

Se isso ainda falhar com você. Em seguida, reinstale o OpenSSL também.

port install openssl
Berniey
fonte
2

Como você, estou usando python 2.7 no meu antigo iMac (OS X 10.6.8), também encontrei o problema usando o urllib2.urlopen:

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]

Meus programas estavam funcionando bem sem problemas de certificado SSL e, de repente (após a transferência de programas), eles travaram com esse erro de SSL.

O problema foi a versão do python usada:

  1. Não há problema com https://www.python.org/downloads e python-2.7.9-macosx10.6.pkg

  2. problema com o instalado pela ferramenta Homebrew : "brew install python", versão localizada em / usr / local / bin.

Um capítulo, chamado Certificate verification and OpenSSL [CHANGED for Python 2.7.9], /Applications/Python 2.7/ReadMe.rtfexplica o problema com muitos detalhes.

Portanto, verifique, faça o download e coloque em seu PATH a versão correta do python.

Thierry Maillard
fonte
2

Python 2.7 no Amazon EC2 com centOS 7

Eu tive que definir a variável env SSL_CERT_DIRpara apontar para o ca-bundleque estava localizado em/etc/ssl/certs/ca-bundle.crt

Brian McCall
fonte
Sua resposta me levou ao caminho certo para mim. No Ubuntu, eu tive que definir SSL_CERT_DIRa /etc/ssl/certs, e também a certeza o ca-certificatespacote foi instalado e atualizado.
Norman Breau
1

Experimentar

instalação do pip --trusted-host pypi.python.org packagename

Funcionou para mim.

swapnilghorpade
fonte
1

Dê uma olhada

/ Aplicativos / Python 3.6 / Instalar Certificates.command

Você também pode acessar Aplicações e clicar em Certificates.com

Danielle Cohen
fonte
1

No meu caso eu estava recebendo este erro porque requestse urllib3versões eram incompatíveis, dando o seguinte erro durante a instalação:

ERROR: requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25 which is incompatible.
pip install 'urllib3<1.25' --force-reinstall

fez o truque.

fabio.sang
fonte
1

Outra solução Anaconda. Eu estava obtendo CERTIFICATE_VERIFY_FAILED no meu ambiente Python 2.7 no macOS. Acontece que os caminhos da conda eram ruins:

ambiente base (3.7):

>>> import ssl
>>> ssl.get_default_verify_paths()
DefaultVerifyPaths(cafile='/usr/local/anaconda3/ssl/cert.pem', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/ssl/certs')

2.7 ambiente (caminhos não existiam!):

DefaultVerifyPaths(cafile='', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/envs/py27/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/envs/py27/ssl/certs')

O conserto:

cd /usr/local/anaconda3/envs/py27/
mkdir ssl
cd ssl
ln -s ../../../ssl/cert.pem
Peter Tseng
fonte
1

O erro SSL: CERTIFICATE_VERIFY_FAILED também pode ocorrer porque um Certificado Intermediário está ausente no ca-certificatespacote no Linux. Por exemplo, no meu caso, o certificado intermediário " CA do Servidor Seguro DigiCert SHA2 " estava ausente no ca-certificatespacote, mesmo que o navegador Firefox o inclua. Você pode descobrir qual certificado está faltando, executando diretamente o wgetcomando no URL que está causando esse erro. Em seguida, você pode procurar o link correspondente ao arquivo CRT para esse certificado no site oficial (por exemplo, https://www.digicert.com/digicert-root-certificates.htm no meu caso) da Autoridade de certificação. Agora, para incluir o certificado que está faltando no seu caso, você pode executar os comandos abaixo usando o link de download do arquivo CRT:

wget https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt

mv DigiCertSHA2SecureServerCA.crt DigiCertSHA2SecureServerCA.der

openssl x509 -inform DER -outform PEM -in DigiCertSHA2SecureServerCA.der -out DigicertSHA2SecureServerCA.pem.crt

sudo mkdir /usr/share/ca-certificates/extra

sudo cp DigicertSHA2SecureServerCA.pem.crt /usr/share/ca-certificates/extra/

sudo dpkg-reconfigure ca-certificates

Depois disso, você pode testar novamente com o wgetseu URL, bem como usando o urllibpacote python . Para mais detalhes, consulte: https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/1795242

WebDev
fonte
0

Se você estiver no vCenter 6, adicione o certificado de autoridade de certificação vmware do vCenter à lista de CAs confiáveis ​​de seu sistema operacional. Para baixar seu certificado, faça o seguinte

  1. Abra o seu navegador da Web.
  2. Navegue para https: //
  3. No canto inferior direito, clique no link Download da CA raiz confiável

No Fedora

  1. descompacte e altere a extensão de .0 para .cer
  2. Copie-o para / etc / pki / ca-trust / source / anchors /
  3. execute o comando update-ca-trust.

Ligações:

  1. https://virtualizationreview.com/articles/2015/04/02/install-root-self-signed-certificate-vcenter-6.aspx?m=1
  2. http://forums.fedoraforum.org/showthread.php?t=293856
nobler1050
fonte
Ele afirmou que ele está no OS X, não vCenter 6.
JWW
0

etapas de instalação do nltk (eu já tinha o python3 (3.6.2) instalado no MAC OS X

sudo easy_install pip

use a opção ignorar instalada para ignorar a desinstalação da versão anterior de seis, caso contrário, ele apresenta um erro durante a desinstalação e não encaminha o filme

sudo pip3 install -U nltk --ignore-installed six

Verifique a instalação do pip e python, use as versões '3'

which python python2 python3
which pip pip2 pip3

Verifique se o NLTK está instalado

python3
import nltk
nltk.__path__
['/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/nltk']

Instale o certificado SSL antes de instalar o livro de exemplos, caso contrário, iremos certificar o erro ao instalar os exemplos

/Applications/Python\ 3.6/Install\ Certificates.command
python3 -m nltk.downloader book

Isso concluiu a instalação com sucesso de nltk e nltk_ata para exemplos de livros

Narasimha Sai
fonte
0

Instalar PyOpenSSLusando pipfuncionou para mim (sem converter para PEM):

pip install PyOpenSSL
averma93
fonte
0

Resolvi esse problema fechando o Fiddler (um proxy de depuração HTTP), se você tem um proxy ativado e tente novamente.

vperezb
fonte
0

No python 2.7, a adição de detalhes da CA raiz confiável no final do arquivo C: \ Python27 \ lib \ pacotes de sites \ certifi \ cacert.pem ajudou

depois disso, executei (usando direitos de administrador) a instalação do pip --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org packageName

MD5
fonte