Erro cURL 60 no PHP: problema com o certificado SSL, e porque não desligar a verificação

“cURL error 60: SSL certificate problem” quer dizer que o PHP ligou-se a um serviço por HTTPS e não confiou no certificado que esse serviço apresentou. O PHP está a fazer o que deve: recusar falar com um servidor cuja identidade não consegue provar. A solução quase nunca é desligar a verificação. É descobrir de que lado está a falha: no certificado do outro serviço, ou nos certificados de confiança do seu lado.

As mensagens e o que apontam

A mensagem Causa provável De quem é
certificate has expired O certificado do serviço de destino caducou. Do serviço de destino. Avise-o.
unable to get local issuer certificate Falta um certificado intermédio no servidor de destino, ou o seu lado tem uma lista de certificados de confiança antiga ou incompleta. Dos dois: veja os passos abaixo.
self signed certificate O destino usa um certificado criado por si próprio e não emitido por uma entidade reconhecida. Do destino. Comum em ambientes de teste.
no alternative certificate subject name matches O certificado é de outro nome do que o endereço chamado. Do código (endereço errado) ou do destino.

Descobrir de que lado está a falha

1 Abra o endereço do serviço no navegador. Se o navegador também avisa, o problema é do certificado do destino. O navegador por vezes “remenda” um certificado intermédio em falta que o PHP não remenda: se o navegador não avisa e o PHP sim, suspeite disso.
2 Veja os detalhes com o cURL, se a sua conta tem Terminal: curl -vI https://servico.tld/. A saída mostra a cadeia e a razão da recusa.
3 Use um verificador de SSL público sobre o endereço de destino. Mostra se a cadeia de certificados está completa e quando caduca.
4 Confira o seu lado. Aqui a configuração de origem do PHP não fixa um ficheiro de certificados (as opções curl.cainfo e openssl.cafile vêm vazias), por isso o PHP usa os do sistema. Se o erro é só de uma aplicação, ela pode trazer o seu próprio ficheiro de certificados antigo: actualize a aplicação, ou o plugin que faz a chamada. Veja actualizar temas e plugins sem partir nada.

A solução, conforme a causa

Causa O que fazer
Certificado do destino caducado ou mal instalado Avisar quem gere o serviço. Do seu lado não há reparação honesta.
Aplicação com certificados antigos Actualizar a aplicação ou o plugin. Veja também que versão do PHP usar.
Certificado próprio (teste) que quer mesmo aceitar Dizer ao PHP em que certificado confiar, com CURLOPT_CAINFO a apontar para o ficheiro da entidade. Não desligue a verificação.
Num VPS seu Actualizar o pacote de certificados do sistema (ca-certificates). Os comandos são seus; o suporte não os trata. Veja até onde vai o nosso suporte.
Não ponha CURLOPT_SSL_VERIFYPEER a false e deixe ficar. Isso faz o PHP aceitar qualquer certificado, incluindo o de alguém que se meteu pelo meio da ligação. Serve, no máximo, durante um minuto, num teste, para confirmar o diagnóstico, e tira-se logo. Se um plugin ou um tutorial lhe diz para o deixar assim, desconfie.
Apareceu do nada? O mais comum é um certificado que caducou ou foi renovado com uma cadeia nova. Veja primeiro a data de validade do certificado do serviço. Para o seu próprio site, veja o que é um certificado SSL.

Quer que olhemos para o lado do servidor? Envie-nos o endereço do serviço chamado e a mensagem completa do erro.

Abrir um pedido de suporte

VEJA TAMBÉM

Erro cURL 28, 7 e 6 no PHP

Onde está o registo de erros do PHP

O que é um certificado SSL e porque importa

Actualizar temas e plugins sem partir nada

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?