Pular para o conteúdo
ecdsa.com
PHP ext-curl (Guzzle, Laravel HTTP client)PHP

Mensagem de erro

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

Também aparece como

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

O Guzzle formata o erro como “cURL error 77: error setting certificate file: <path> (see https://curl.se/libcurl/c/libcurl-errors.html) for <url>”; curl_error() retorna a parte depois de “cURL error 77: ”. A opção verify do próprio Guzzle falha antes, com “SSL CA bundle not found: <path>”, quando o arquivo não existe.

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

O que significa

A libcurl não conseguiu carregar o bundle de CAs que o PHP mandou usar, então nenhuma requisição HTTPS pelo ext-curl pode ser feita. O caminho depois dos dois-pontos geralmente vem de curl.cainfo no php.ini (ou de CURLOPT_CAINFO definido no código). Nada foi enviado ao servidor.

Por que acontece

Como corrigir

  1. 1.

    Encontrar a configuração e verificar o arquivo

    Os comandos php --ini e php -i mostram qual arquivo define curl.cainfo; confira se o caminho existe para o usuário que executa o PHP (o FPM pode carregar um php.ini diferente do da CLI).

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

    Apontar curl.cainfo para um bundle que exista

    Use o bundle da distribuição no Linux ou um cacert.pem mantido em dia no Windows, e recarregue o PHP-FPM ou o 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"

Erros relacionados

Ver toda a base de erros de assinatura