1
resposta

Certificado SSL invalido

Vi que no curso se usa a url com HTTPS, porém quando uso a mesma URL a request retorna o erro "ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1045)". Gostaria de saber se isso é um erro de biblioteca ou se o certificado SSL do site expirou(visto que o curso é de 2020), pois quando mudei a url para HTTP funcionou normalmente.

1 resposta

Oii João Pedro, tudo certo por aí?

Antes de falarmos sobre esse erro, vamos entender um pouquinho melhor sobre o funcionamento do certificado SSL.

O que é um certificado SSL?

De forma resumida, é um certificado digital que autentica a identidade de um site e possibilita uma conexão criptografada. O SSL mantém a segurança das conexões de internet e impede que criminosos leiam ou modifiquem as informações transferidas entre dois sistemas. Esses certificados são gerados por uma autoridade de certificação (CA, Certificate Authority).

Imagem com fundo branco onde a primeira parte representa o protocolo HTTP sem SSL por meio de um desenho de um computador que é ligado aos dados e os dados são interligados ao site. A imagem demonstra que com o protocolo HTTP há a possibilidade de ataques maliciosos. Já na segunda parte da imagem que se encontra logo abaixo da primeira, há o mesmo fluxo, porém, com uma barreira indicando que ao utilizar o protocolo HTTPS há um risco menor de ataques maliciosos

Quando estamos realizando o scraping de uma página, as bibliotecas Python também fazem essa verificação da validade e autenticidade do certificado SSL do site que estamos tentando acessar, por meio de uma assinatura. O que acontece é que existem diferentes tipos de certificados SSL, e alguns deles não possuem uma assinatura digital diretamente da autoridade certificadora.

Sendo assim, geralmente, essa mensagem de erro "certificate verify failed: self signed certificate in certificate chain" é gerada quando estamos tentando acessar um site que não possui um certificado SSL assinado pela CA. Ele pode estar sendo auto-assinado ou assinado pelo próprio provedor daquele site, isso varia de acordo com o certificado SSL adquirido pelo servidor web. Também é necessário que você atualize sua base de certificados do computador, para que quando efetuar uma solicitação haja o reconhecimento dos certificados e isso pode ser feito através do comando:

pip install certifi

Tente executar novamente o código com o HTTPS. Caso o erro continue a ocorrer, você pode desabilitar a verificação de contexto para esse site, digitando no cabeçalho do arquivo o seguinte código:

import os, ssl

if (not os.environ.get('PYTHONHTTPSVERIFY', '') and getattr(ssl, '_create_unverified_context', None)):
  ssl._create_default_https_context = ssl._create_unverified_context

Espero que isso te ajude. Qualquer dúvida estou por aqui :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!