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?


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 !


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/


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

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!

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"

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.


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

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


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

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

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 .


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.


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

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

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.


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.


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

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.


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


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.


1

Dê uma olhada

/ Aplicativos / Python 3.6 / Instalar Certificates.command

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


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.


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

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


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

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


0

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

pip install PyOpenSSL

0

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


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

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.