Python Programming

Resolvendo erros SSL CERTIFICATE_VERIFY_FAILED em Python

Spread the love

A comunicação segura na internet depende fortemente de certificados Secure Sockets Layer (SSL). Quando seu código Python encontra um erro “SSL CERTIFICATE_VERIFY_FAILED”, isso sinaliza uma falha na verificação da autenticidade do certificado SSL do servidor. Este guia abrangente analisará as causas desse erro e fornecerá soluções práticas.

Sumário

Entendendo Certificados SSL

Um certificado SSL é uma credencial digital que autentica a identidade de um site, permitindo a comunicação HTTPS segura. Ele utiliza criptografia de chave pública para criptografar os dados trocados entre o cliente (seu programa Python) e o servidor. Durante uma conexão HTTPS, seu código Python (ou navegador) verifica o certificado do servidor verificando sua validade, emissor e status de revogação.

Causas Raiz de SSL CERTIFICATE_VERIFY_FAILED

O temido erro “SSL CERTIFICATE_VERIFY_FAILED” surge quando esse processo de verificação falha. Vários fatores podem contribuir:

  • Certificados autoassinados: Certificados emitidos pelo proprietário do site, não por uma Autoridade Certificadora (CA) confiável, são frequentemente sinalizados. O Python, por padrão, confia apenas em CAs conhecidas.
  • Certificados expirados: Um certificado expirado torna a conexão não confiável.
  • Imprecisões no relógio do sistema: A validade do certificado é sensível ao tempo; um relógio do sistema incorreto pode causar falha na verificação.
  • Certificados revogados: Um certificado comprometido pode ser revogado por seu emissor.
  • Inconsistência de nome de host: O Nome Comum (CN) ou Nomes Alternativos de Assunto (SANs) do certificado devem corresponder ao nome de host ao qual você está se conectando.
  • Problemas na cadeia CA: Problemas na cadeia de confiança da autoridade certificadora interromperão a verificação. O certificado precisa de uma cadeia de confiança verificável até uma CA raiz confiável.
  • Problemas de conectividade de rede: Interrupções de rede podem impedir a verificação do certificado.

Estratégias Eficazes de Resolução de Problemas

A solução depende da causa subjacente. Aqui está uma abordagem estruturada:

  1. Verificar o certificado (com cautela): Para certificados autoassinados ou não confiáveis, você pode desabilitar temporariamente a verificação (fortemente desaconselhado para produção):
    
    import ssl
    import urllib.request
    
    context = ssl._create_unverified_context()
    response = urllib.request.urlopen('https://seu-website.com', context=context)
    # ... processar a resposta ...
      
  2. Adicionar o certificado ao seu repositório de certificados confiáveis: Para certificados autoassinados, adicione-o ao repositório de certificados confiáveis do seu sistema. Esse processo varia de acordo com o sistema operacional.
  3. Corrigir a hora do sistema: Certifique-se de que o relógio do seu sistema esteja preciso.
  4. Verificar o nome de host: Verifique se o nome de host em seu código corresponde ao CN ou SANs do certificado.
  5. Utilizar a biblioteca requests (Recomendado): A biblioteca requests oferece tratamento SSL robusto. verify=True (padrão) habilita a verificação adequada. Para pacotes CA personalizados:
    
    import requests
    
    try:
        response = requests.get('https://seu-website.com', verify=True) 
        response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
        # ... processar a resposta ...
    except requests.exceptions.RequestException as e:
        print(f"Ocorreu um erro: {e}")
    
    #Usando um pacote CA personalizado:
    response = requests.get('https://seu-website.com', verify='/caminho/para/seu/ca_bundle.pem')
      
  6. Verificar a conectividade de rede: Descarte problemas de rede.

Melhores Práticas para Conexões Seguras

Priorize o uso de certificados válidos de CAs confiáveis. Utilize a biblioteca requests com verificação adequada (verify=True). Evite desabilitar a verificação, exceto durante testes controlados. Atualize regularmente os certificados e o relógio do seu sistema para segurança ideal.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *