Hoje iremos explicar como acessar sites seguros (https) com cURL, ao tentar acessar como no exemplo abaixo:
$url = "https://endereco.do.site"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $resposta = curl_exec($ch); curl_close($ch);
Recebemos o seguinte erro:
Failed: Error Number: 60. Reason: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Existem duas formas de corrigir este problema:
1. Ignorar a verificação do certificado SSL (menos segura):
Adicione a linha abaixo:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Exemplo:
$url = "https://endereco.do.site"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $resposta = curl_exec($ch); curl_close($ch);
Ao fazer isto o servidor aceitará qualquer certificado, não sendo a forma mais segura/recomendada se dados sensíveis estão sendo trocados entre servidores.
2. Forma correta (segura):
Primeiro precisamos obter o certificado usado no site, você pode fazer isto acessando o site e clicando no ícone de segurança da página (cadeado), em seguida exporte o certificado e envie o arquivo para o servidor.
Agora adicionaremos o certificado na verificação do cURL:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_CAINFO, "/caminho/do/certificado.crt");
Exemplo:
$url = "https://endereco.do.site"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_CAINFO, "/caminho/do/certificado.crt"); $resposta = curl_exec($ch); curl_close($ch);
Fazendo isto o cURL verificará se o certificado SSL usado no site é o mesmo informado por você e nenhuma mensagem de erro será exibida.