Pular para o conteúdo
ecdsa.com
pipGerenciadores de pacotes

Mensagem de erro

There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

Também aparece como

  • Could not fetch URL https://pypi.example.com/simple/requests/: There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

O pip imprime o erro como “Could not fetch URL <url>: There was a problem confirming the ssl certificate: … - skipping”, depois de várias linhas “WARNING: Retrying (Retry(total=…)) after connection broken by 'SSLError(…)'”. A URL e o motivo final variam.

pip — index or find-links URL over HTTPS (pip 24.2+ verifies with truststore by default)

O que significa

O pip não conseguiu verificar o certificado TLS do índice de pacotes (ou de uma URL de find-links), por isso pulou essa página e geralmente termina com “Could not find a version that satisfies the requirement”. O motivo depois dos dois-pontos é o resultado da verificação do OpenSSL. Desde o pip 24.2, o pip verifica com o trust store do sistema operacional por meio do pacote truststore; portanto, ou a CA não está no repositório do sistema operacional, ou o pip foi instruído a usar outro bundle.

Por que acontece

Como corrigir

  1. 1.

    Instalar a CA no trust store do sistema operacional

    Com o pip 24.2+ no Python 3.10+, o pip confia automaticamente nas raízes do repositório do sistema (ou do chaveiro do macOS / do repositório do Windows). Atualize o pip se ele for mais antigo.

    bash
    # pip >= 24.2 uses the OS trust store (truststore): add the CA there
    sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt
    sudo update-ca-certificates
    python3 -m pip --version     # upgrade pip itself if it is older than 24.2
  2. 2.

    Fornecer ao pip um bundle de CAs explicitamente

    global.cert na configuração do pip, PIP_CERT ou --cert fazem o pip verificar com esse arquivo. Inclua também as raízes públicas se o pip também acessar o pypi.org.

    bash
    # A CA bundle for pip only (one of these):
    python3 -m pip config set global.cert /etc/ssl/private-ca/corp-ca-bundle.pem
    export PIP_CERT=/etc/ssl/private-ca/corp-ca-bundle.pem
    python3 -m pip install --cert /etc/ssl/private-ca/corp-ca-bundle.pem requests
  3. 3.

    Configurar o índice privado uma única vez

    Coloque index-url e cert no pip.conf (ou pip.ini) para que toda execução do pip, inclusive as que acontecem dentro de ferramentas de build, use esses valores.

    ini
    # pip.conf (Linux: ~/.config/pip/pip.conf, Windows: %APPDATA%\pip\pip.ini)
    [global]
    index-url = https://pypi.example.com/simple/
    cert = /etc/ssl/private-ca/corp-ca-bundle.pem
  4. 4.

    Diagnóstico temporário: --trusted-host

    A opção --trusted-host desativa a verificação de certificados para esse host e permite que o pip use HTTP não criptografado nele. Ela confirma o diagnóstico, mas qualquer coisa baixada dessa forma pode ter sido substituída no caminho; não a mantenha na configuração.

    bash
    # Temporary diagnostic only: --trusted-host disables certificate checks for that host
    python3 -m pip download --no-deps -d /tmp/dl --index-url https://pypi.example.com/simple/ \
      --trusted-host pypi.example.com requests

Erros relacionados

Ver toda a base de erros de assinatura