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!!!
Ajudou demais, muito obrigado!
Muito obrigado pelo Post! Ajudou muito!!
Olá Bruno.
Valeu!!!
Abs!
De grande ajuda!
Obrigado Rafael!
Funcionou para mim, obrigado.
Funcionou aqui, muito obrigado.
Rafael muito obrigado cara.Vlw
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.
Fala Fabio,
Orbigado pelo feedback.
Abs!
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!