Saltar al contenido
ecdsa.com
PHP ext-curl (Guzzle, Laravel HTTP client)PHP

Mensaje de error

cURL error 77: error setting certificate file: /etc/ssl/missing-ca.pem

También se muestra como

  • error setting certificate file: /etc/ssl/missing-ca.pem

Guzzle lo formatea como «cURL error 77: error setting certificate file: <path> (see https://curl.se/libcurl/c/libcurl-errors.html) for <url>»; curl_error() devuelve la parte que sigue a «cURL error 77: ». La propia opción verify de Guzzle falla antes, con «SSL CA bundle not found: <path>», cuando falta el archivo.

PHP ext-curl (Guzzle, Laravel HTTP client) — CURLE_SSL_CACERT_BADFILE: curl.cainfo names a file that cannot be loaded

Qué significa

libcurl no pudo cargar el bundle de CA que PHP le indicó, así que no se puede hacer ninguna solicitud HTTPS a través de ext-curl. La ruta que aparece después de los dos puntos suele proceder de curl.cainfo en php.ini (o de CURLOPT_CAINFO, definido en el código). No se envió nada al servidor.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Localizar el ajuste y comprobar el archivo

    php --ini y php -i muestran qué archivo define curl.cainfo; comprueba que la ruta existe para el usuario que ejecuta PHP (FPM puede cargar un php.ini distinto del de la CLI).

    bash
    php --ini
    php -i | grep -E 'curl.cainfo|openssl.cafile'
    ls -l "$(php -r 'echo ini_get("curl.cainfo");')"
  2. 2.

    Apuntar curl.cainfo a un bundle existente

    Usa el bundle de la distribución en Linux o un cacert.pem mantenido al día en Windows, y recarga PHP-FPM o el servidor web.

    ini
    ; Linux (Debian/Ubuntu): the system bundle
    curl.cainfo = "/etc/ssl/certs/ca-certificates.crt"
    ; Windows: absolute path to an existing cacert.pem
    ; curl.cainfo = "C:\php\extras\ssl\cacert.pem"

Errores relacionados

Explorar toda la base de datos de errores de firma