Código de erro 60 do PHP cURL

85

Enquanto tento configurar um ambiente php no Windows (usando wamp) para usar o Amazon PHP SDK, quando tento executar um teste de amostra, recebo o seguinte erro:

Fatal error: Uncaught exception 'cURL_Exception' with message 'cURL resource: Resource id #10; cURL error: SSL certificate problem: unable to get local issuer certificate (cURL error code 60). See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of error codes.' in C:\wamp\www\AWSSDKforPHP\lib\requestcore\requestcore.class.php on line 848

Já adicionei a seguinte linha ao meu php.ini

curl.cainfo = C:\Windows\ca-bundle.crt

qual é a localização de um certificado que criei usando este script VBS VBS-Script

Eu reiniciei meu serviço WAMP também.

Referência de curva de índice PHP

Ciaran
fonte
6
Caso você não se importe com o processo de certificação, você pode desativá-lo completamente curl_setopt($rest, CURLOPT_SSL_VERIFYPEER, false);
denispyr
Isso resolveu o problema para mim - stackoverflow.com/a/32095378/178163 Basicamente, pode haver 2 arquivos php.ini
George Kagan
3
Para aqueles que se depararam com esse problema pela primeira vez, como eu, o motivo por trás disso, pelo que eu entendo (corrija-me se eu estiver errado), é que, ao contrário da situação de uma conexão HTTPS por meio de um navegador, uma solicitação CURL não obtém o certificado do servidor. Portanto, precisamos baixar manualmente o certificado do site e adicioná-lo ao PHP ini. Esta verificação do certificado no final do cliente faz parte do processo de conexão HTTPS e, ao que parece, pode ser contornada. É aqui que curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);entra em cena.
Sandeepan Nath
funcionou como um encanto !!!! obrigado!
Rodrigo Serzedello

Respostas:

226

Use este pacote de certificado raiz de certificado:

https://curl.haxx.se/ca/cacert.pem

Copie este pacote de certificado em seu disco. E usar isso emphp.ini

curl.cainfo = "path_to_cert\cacert.pem"
Hüseyin BABAL
fonte
10
E caso isso não resolva o problema? Eu defini curl_setopt($ch, CURLOPT_CAINFO, ini_get('curl.cainfo'));e no php.ini [cURL] curl.cainfo = C:\dev\xampp\php\cacert.pem . O arquivo está lá, mas ainda recebo o erro 60. Há algo que estou faltando?
Estouro de
3
@Overflowh existem dois tipos de php.ini: Um para php-cli segundo para php-web (apache, nginx, ...). Você precisa definir um curl.cainfo = "path_to_cert\cacert.pem"para web. Por outro lado, se você pode ver que curl.cainfoé verdade em sua visualização de informações do php, talvez haja um problema de permissão.
Hüseyin BABAL
Bem, na verdade eu não consigo ver curl.cainfominhas informações de php. Isso significa que coloquei o valor no arquivo errado?
Overflowh
1
Sim, verifique novamente a localização do arquivo php.ini. Você precisa colocar isso na versão web
Hüseyin BABAL
Eu adicionei no apache php.ini, mas isso não funcionou
kasim badami
31

eu consertei isso modificando o php.iniarquivo emC:\wamp\bin\apache\apache2.4.9\bin\

curl.cainfo = "C:/wamp/bin/php/php5.5.12/cacert.pem"

primeiro eu estava tentando modificar o php.iniarquivo em C:\wamp\bin\php\php5.5.12\e não funcionou.

espero que isso ajude alguém que está procurando o direito php.inide modificar

apontar-me
fonte
1
Obrigado. Bastou baixar o arquivo curl.haxx.se/ca/cacert.pem e definir o caminho para ele no arquivo apache php.ini como você disse. Por favor, estejam atentos, pessoal, você pode colocar o cacert onde quiser, apenas certifique-se de colocar o caminho corretamente. Além disso, certifique-se de remover o ponto-e-vírgula!
Dan Zuzevich
1
Não se esqueça de recarregar o apache depois disso.
hcker2000
17
php --ini

Isso lhe dirá exatamente qual arquivo php.ini está sendo carregado, para que você saiba qual modificar. Perdi muito tempo alterando o arquivo php.ini errado porque eu tinha WAMP e XAMPP instalados.

Além disso, não se esqueça de reiniciar o servidor WAMP (ou o que você usar) após alterar o php.ini.

Anazul
fonte
1
salva-vidas! 3 dias de solução de problemas e esse é o problema
suo
13

@Overflowh Tentei a resposta acima também sem sorte. Mudei a versão do php de 5.3.24 para 5.5.8, pois esta configuração só funciona no php 5.3.7 e superior. Então, encontrei este http://flwebsites.biz/posts/how-fix-curl-error-60-ssl-issue . Baixei o cacert.pem de lá e substituí aquele que baixei / fiz em curl.hxxx.se ligado acima e tudo começou a funcionar. Eu estava tentando fazer o paypal sandbox IPN verificar. Fico feliz em dizer que após a troca de .pem tudo está ok usando a configuração curl.cainfo no php.ini que ainda não estava no 5.3.24.

pgkerr76
fonte
2
Eu estava enfrentando o mesmo problema e resolvi apenas baixando o formulário de arquivo .pem mencionado acima. Obrigado
saqibahmad de
4
Haha Eu não posso acreditar nisso! Eu possuo o FLWebsites.biz e encontrei este post sem saber que fui mencionado ... Escrevi esse blog!
HTMLGuy
Tenho tentado descobrir o problema e, depois de 3-4 horas, finalmente descobri esta resposta. Eu disse oh bem, por que não tentar outro arquivo pem novamente. E surpresa: finalmente funcionou. Obrigado por encontrar esse blog :)
Sauleil
Isso resolveu meu problema cacert.pem no Windows 10, IIS. Obrigado.
jacouh
3
Desculpe, tirei meu site do ar. Vá diretamente para a fonte: curl.haxx.se/docs/caextract.html
HTMLGuy
8

@ Hüseyin BABAL

Estou recebendo um erro com o certificado acima, mas tentei este certificado e está funcionando.

https://gist.github.com/VersatilityWerks/5719158/download

Gaurang Ghinaiya
fonte
UAU. Isso é loucura. Eu estava procurando uma maneira de definir o cacert.pem globalmente e me deparei com isso. EU SOU VersatilidadeWerks haha. Você usou minha essência.
HTMLGuy
5

Primeiro, precisamos baixar este pacote de certificado raiz de certificado:

https://curl.haxx.se/ca/cacert.pem

Mova este arquivo para algum lugar como a pasta PHP na pasta Wamp / Xampp.

Em seguida, edite o seu "php.ini":

curl.cainfo = "C: /path/to/your/cacert.pem"

e

openssl.cafile = "C: /path/to/your/cacert.pem"

IMPORTANTE:

Certifique-se de abrir o arquivo "php.ini" diretamente no Windows Explorer. (no meu caso: “C: \ DevPrograms \ wamp64 \ bin \ php \ php5.6.25 \ php.ini”).

Não use o atalho para "php.ini" no menu do ícone Wamp / Xampp na bandeja do sistema. Este atalho não funcionou em alguns casos que enfrentei.

Depois de salvar "php.ini", você não precisa "Reiniciar Todos os Serviços" no ícone Wamp ou fechar / reabrir o CMD.

Tente com "var_dump (openssl_get_cert_locations ());" e observe a linha: ["ini_cafile"] => string (40) "C: /path/to/your/cacert.pem"

Feito.

Quang Nguyen Tri
fonte
Sua nota sobre a abertura do arquivo php.ini através do explorer realmente funcionou! E finalmente descobri que o ícone php.ini do wamp tem um caminho diferente. Obrigado!!!
Doctiger
4

A solução mais fácil para o problema é adicionar o comando abaixo no campo.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);

Usando isso, não será necessário adicionar nenhum certificado ou nada.

Arjun Londhey
fonte
3

Problema corrigido, baixe https://curl.haxx.se/ca/cacert.pem e coloque "em algum lugar" e adicione esta linha em php.ini:

curl.cainfo = "C:/somewhere/cacert.pem"

PS: Recebi este erro ao tentar instalar o módulo no drupal com o xampp.

pequena raposa
fonte
2

Adicione o seguinte ao php.ini [use '/' em vez de '\' no caminho] curl.cainfo = "path / cacert.pem"

Reiniciei meu XAMPP. Funcionou bem para mim. obrigado

TTS Raja
fonte
1

Primeiro você tem que baixar o certificado deste link

https://curl.haxx.se/ca/cacert.pem

e colocá-lo em um local que você deseja que o nome do arquivo para download seja: cacert.pem Portanto, no meu caso, vou colocá-lo em C: \ wamp64 \ bin \ php \ cacert.pem

Então você deve especificar a localização do arquivo php.ini

Por exemplo, estou usando php 7, o arquivo php.ini está localizado em: C: \ wamp64 \ bin \ php \ php7.0.10 \ php.ini

Portanto, acesse esse arquivo e descomprima esta linha; openssl.cafile

também atualize-o para ficar parecido com este openssl.cafile = "C: \ wamp64 \ bin \ php \ cacert.pem"

Finalmente reinicie seu servidor apache e isso é tudo

MUSTAPHA GHLISSI
fonte
1

IMPORTANTE : após 4 horas, trabalhar com laravel 5.7 e php 7. + e executar / usar php artison servir em localhost tentando conectar-se ao mailgun.

IMPORTANTE para resolver o problema não funcione com ip http://127.0.0.1:8000 use localhost ou defina o nome de domínio pelo arquivo host

Está bem ,

lior ben yosef
fonte
0

A solução é editar o arquivo php.ini localizado na sua versão php (para mim é php7.0.10) e não o php.ini do apache. Você encontrará um arquivo comentado como este; curl.cainfo Basta alterar esta linha como curl.cainfo = "C: \ permCertificate \ cacert.pem"

Não se esqueça de criar o diretório "permCertificate" e copiar o arquivo "cacert.pem" dentro dele.

Sami FAREH
fonte
Funciona para mim em Ampps, Obrigado
Alejandro Aranda
-1

Só para você saber o que funcionou para mim, o arquivo em https://curl.haxx.se/ca/cacert .... não funcionou, entretanto, o da pasta zip no post em ( http: // flwebsites .biz / posts / how-fix-curl-error-60-ssl-issue ) funcionou para mim sem problemas.

Como já foi dito, copie o arquivo do certificado para um local em seu disco rígido, atualize a linha

;curl.cainfo 

em seu arquivo php.ini para ler

curl.cainfo= "path_to_cert\cacert.pem"

Reinicie seu servidor Apache.

Compilador
fonte
O site vinculado é spam.
Rick Kukiela