Saltar al contenido
ecdsa.com
pipGestores de paquetes

Mensaje de error

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

También se muestra 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

pip lo imprime como «Could not fetch URL <url>: There was a problem confirming the ssl certificate: … - skipping», después de varias líneas «WARNING: Retrying (Retry(total=…)) after connection broken by 'SSLError(…)'». La URL y el motivo final varían.

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

Qué significa

pip no pudo verificar el certificado TLS del índice de paquetes (o de una URL de find-links), así que omitió esa página y suele terminar con «Could not find a version that satisfies the requirement». El motivo que aparece después de los dos puntos es el resultado de la verificación de OpenSSL. Desde pip 24.2, pip verifica con el almacén de confianza del sistema operativo a través de truststore, así que o bien la CA falta en el almacén del sistema operativo, o bien se le indica a pip que use otro bundle.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Instalar la CA en el almacén de confianza del sistema operativo

    Con pip 24.2+ en Python 3.10+, las raíces del almacén del sistema (o del llavero de macOS / del almacén de Windows) se consideran de confianza automáticamente. Actualiza pip si es más antiguo.

    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.

    Indicar a pip un bundle de CA explícitamente

    global.cert en la configuración de pip, PIP_CERT o --cert hacen que pip verifique con ese archivo. Si pip también se conecta a pypi.org, incluye además las raíces públicas.

    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 el índice privado una sola vez

    Pon index-url y cert en pip.conf (o pip.ini) para que todas las invocaciones de pip, incluidas las que hacen las herramientas de compilación, los usen.

    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 temporal: --trusted-host

    --trusted-host desactiva la verificación de certificados para ese host y permite que pip use allí HTTP sin cifrar. Confirma el diagnóstico, pero cualquier cosa descargada así podría haberse sustituido por el camino; no lo dejes en la configuración.

    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

Errores relacionados

Explorar toda la base de datos de errores de firma