PHP: Como resolver o erro “cURL error 60”

Fala galera.

Hoje eu estava estudando e desenvolvendo uma aplicação de testes que deve se conectar com um Realtime Database do Google Firebase. Para fazer a integração do meu projeto em PHP com o Firebase, eu acoplei a biblioteca firebase-php (Disponível em: https://github.com/kreait/firebase-php).

Pois bem. Meu projeto está sendo “executado” em ambiente local (WAMPP) e logo que fui tentar recuperar os dados previamente cadastrados no banco de dados do Firebase, eu me deparei com o seguinte erro:

Fatal error: Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

Obviamente, um erro no certificado SSL.

Pesquisando sobre tal erro, percebi que era necessário ter um “cert_file” (arquivo de certificado) em minha máquina e que o php deveria apontar pra ele. Antes de mais nada, é necessário verificar para qual “cert_file” o php está apontando. Para isso, execute o seguinte comando:

1
var_dump(openssl_get_cert_locations());

Esse comando vai gerar algo parecido com isso:

array (size=8)
  'default_cert_file' => string 'C:\Program Files\Common Files\SSL/cert.pem' (length=42)
  'default_cert_file_env' => string 'SSL_CERT_FILE' (length=13)
  'default_cert_dir' => string 'C:\Program Files\Common Files\SSL/certs' (length=39)
  'default_cert_dir_env' => string 'SSL_CERT_DIR' (length=12)
  'default_private_dir' => string 'C:\Program Files\Common Files\SSL/private' (length=41)
  'default_default_cert_area' => string 'C:\Program Files\Common Files\SSL' (length=33)
  'ini_cafile' => string '' (length=0)
  'ini_capath' => string '' (length=0)

Veja que, no meu caso, a posição “default_cert_file” está apontando para o caminho: C:\Program Files\Common Files\SSL/cert.pem

Acontece que fui até a pasta “Common Files” e nela não tinha a sub-pasta SSL (consequentemente não tinha também o arquivo cert.pem). Sendo assim, eu criei a pasta SSL e depois fui até o endereço https://curl.haxx.se/ca/cacert.pem e baixe o arquivo de certificado. Depois de baixar, eu renomeei o arquivo de “cacert.pem” para “cert.pem” e o movi para dentro da minha pasta SSL.

Dessa forma já deveria funcionar (talvez para você já tenha funcionado), mas o erro persistiu, então eu abri meu arquivo php.ini , procurei pela linha “curl.cainfo”, “descomentei” a linha (retirando o “;”) e coloquei o caminho absoluto para meu “cert_file”. Ficando assim:

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo ="C:\Program Files\Common Files\SSL\cert.pem"

Feito isso, salvei o arquivo php.ini e reiniciei meu WAMP. Pronto! O fatal error não acontece mais e os dados do meu Realtime Database são retornados normalmente.

Espero ajudar vocês com essa dica.

Abs!!!

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

  1. Ajudou muito.
    Estou acompanhando um passo a passo do site Laracasts e por conta desse problema quase tive que abandonar chegando nas últimas aulas…
    Muito agradecido.

  2. Você é muito bom! Ajudou pra caramba! Atualizei do PHP 7.4 -> 8.1 e deu esse erro, fiquei um tempão pra arrumar e você conseguiu arrumar, obrigado!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *