Código de error PHP cURL 60

85

Al intentar configurar un entorno php en Windows (usando wamp) para usar el SDK de Amazon PHP, cuando intento ejecutar una prueba de muestra, aparece el siguiente error:

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

Ya agregué la siguiente línea a mi php.ini

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

cuál es la ubicación de un certificado que creé usando este script VBS VBS-Script

También reinicié mi servicio WAMP.

Referencia de curl de índice PHP

Ciaran
fuente
6
En caso de que no le importe el proceso de certificación, puede desactivarlo por completo curl_setopt($rest, CURLOPT_SSL_VERIFYPEER, false);
denispyr
Esto me resolvió el problema - stackoverflow.com/a/32095378/178163 Básicamente puede haber 2 archivos php.ini
George Kagan
2
Para aquellos que se encuentran con este problema por primera vez, como lo hice yo, la razón detrás de esto, hasta donde tengo entendido (corríjame si me equivoco), es que, a diferencia de la situación de una conexión HTTPS a través de un navegador, una solicitud CURL no obtiene el certificado del servidor. Entonces, necesitamos descargar manualmente el certificado del sitio y agregarlo al PHP ini. Esta verificación del certificado al final del cliente es parte del proceso de conexión HTTPS y, al parecer, se puede omitir. Aquí es donde curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);entra en escena.
Sandeepan Nath
funcionó como un encanto !!!! ¡Gracias!
Rodrigo Serzedello

Respuestas:

226

Utilice este paquete de certificado raíz de certificado:

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

Copie este paquete de certificados en su disco. Y usa esto enphp.ini

curl.cainfo = "path_to_cert\cacert.pem"
Hüseyin BABAL
fuente
10
¿Y en caso de que esto no solucione el problema? Configuré curl_setopt($ch, CURLOPT_CAINFO, ini_get('curl.cainfo'));y en php.ini [cURL] curl.cainfo = C:\dev\xampp\php\cacert.pem . El archivo está ahí, pero sigo recibiendo el error 60. ¿Me falta algo?
Overflowh
3
@Overflowh hay dos tipos de php.ini: Uno para php-cli segundo para php-web (apache, nginx, ...). Debe configurarlo curl.cainfo = "path_to_cert\cacert.pem"para la web uno. Por otro lado, si puede ver que curl.cainfoes verdadero en la vista de información de php, esa vez podría haber un problema de permiso.
Hüseyin BABAL
Bueno, en realidad no puedo ver curl.cainfoen mi php info. ¿Significa esto que puse el valor en el archivo incorrecto?
Desbordamiento
1
Sí, verifique la ubicación de su archivo php.ini. Necesitas poner eso en la versión web
Hüseyin BABAL
He agregado en apache php.ini, pero esto no funcionó
kasim badami
31

arreglé esto modificando el php.iniarchivo enC:\wamp\bin\apache\apache2.4.9\bin\

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

Primero lo intenté modificando el php.iniarchivo en C:\wamp\bin\php\php5.5.12\y no funcionó.

espero que esto ayude a alguien que está buscando el derecho php.inide modificar

apuntarme
fuente
1
Gracias. Todo lo que necesitó fue descargar el archivo de curl.haxx.se/ca/cacert.pem y configurar la ruta en el archivo apache php.ini como dijiste. Tenga en cuenta que puede poner el cacert en cualquier lugar que desee, solo asegúrese de colocar la ruta correctamente. Además, asegúrese de quitar el punto y coma.
Dan Zuzevich
1
No olvide volver a cargar apache después de esto.
hcker2000
17
php --ini

Esto le dirá exactamente qué archivo php.ini se está cargando, para que sepa cuál modificar. Perdí mucho tiempo cambiando el archivo php.ini incorrecto porque tenía WAMP y XAMPP instalados.

Además, no olvide reiniciar el servidor WAMP (o lo que sea que use) después de cambiar php.ini.

Anazul
fuente
1
salvavidas! 3 malditos días de resolución de problemas y este resulta ser el problema
suo
13

@Overflowh Probé la respuesta anterior también sin suerte. Cambié la versión de php de 5.3.24 a 5.5.8 ya que esta configuración solo funcionará en php 5.3.7 y superior. Luego encontré este http://flwebsites.biz/posts/how-fix-curl-error-60-ssl-issue . Descargué el cacert.pem desde allí y reemplacé el que había descargado / hecho de curl.hxxx.se vinculado arriba y todo comenzó a funcionar. Estaba tratando de verificar la IPN de la caja de arena de PayPal. Feliz de decir que después del intercambio de .pem todo está bien usando la configuración curl.cainfo en php.ini que aún no estaba en 5.3.24.

pgkerr76
fuente
2
Estaba enfrentando el mismo problema y lo solucioné simplemente descargando el formulario de archivo .pem mencionado anteriormente. Gracias
saqibahmad
4
¡Jaja, no puedo creer esto! Soy dueño de FLWebsites.biz y me encontré con esta publicación sin saber completamente que me mencionaron ... ¡Escribí ese blog!
HTMLGuy
He estado tratando de resolver el problema, y ​​después de 3-4 horas finalmente encontré esta respuesta. Dije, bueno, ¿por qué no intentar con otro archivo pem de nuevo? Y sorpresa: finalmente funcionó. Gracias por encontrar ese blog :)
Sauleil
Esto resolvió mi problema de cacert.pem en Windows 10, IIS. Gracias.
jacouh
3
Lo siento, eliminé mi sitio. Vaya directamente a la fuente: curl.haxx.se/docs/caextract.html
HTMLGuy
8

@ Hüseyin BABAL

Recibo un error con el certificado anterior, pero intento este certificado y está funcionando.

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

Gaurang Ghinaiya
fuente
GUAU. Esto es Loco. Estaba buscando una manera de establecer cacert.pem globalmente y me encontré con esto. YO SOY VersatilityWerks jaja. Usaste mi esencia.
HTMLGuy
5

Primero, necesitamos descargar este paquete de certificado raíz:

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

Mueva este archivo a algún lugar, como la carpeta PHP en la carpeta Wamp / Xampp.

Luego edite su "php.ini":

curl.cainfo = "C: /ruta/a/su/cacert.pem"

y

openssl.cafile = "C: /ruta/a/su/cacert.pem"

IMPORTANTE:

Asegúrese de abrir el archivo "php.ini" directamente con el Explorador de Windows. (en mi caso: "C: \ DevPrograms \ wamp64 \ bin \ php \ php5.6.25 \ php.ini").

No utilice el acceso directo a "php.ini" en el menú del icono de Wamp / Xampp en la bandeja del sistema. Este atajo no funcionó en algunos casos que enfrenté.

Después de guardar "php.ini" no es necesario "Reiniciar todos los servicios" en el icono de Wamp o cerrar / volver a abrir CMD.

Prueba con "var_dump (openssl_get_cert_locations ());" y mira la línea: ["ini_cafile"] => string (40) "C: /path/to/your/cacert.pem"

Hecho.

Quang Nguyen Tri
fuente
¡Su nota sobre la apertura del archivo php.ini a través del explorador realmente funcionó! Y finalmente descubrí que el php.ini del icono de wamp tiene una ruta diferente. ¡¡¡Gracias!!!
Doctiger
3

Problema solucionado, descargue https://curl.haxx.se/ca/cacert.pem y colóquelo "en algún lugar", y agregue esta línea en php.ini:

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

PD: Recibí este error al intentar instalar el módulo en drupal con xampp.

pequeño zorro
fuente
3

La solución más sencilla al problema es agregar el siguiente comando en el campo.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);

Al usar esto, no será necesario agregar ningún certificado ni nada.

Arjun Londhey
fuente
2

Agregue lo siguiente a php.ini [use '/' en lugar de '\' en la ruta] curl.cainfo = "ruta / cacert.pem"

Reinicié mi XAMPP. Funcionó bien para mí. Gracias

TTS Raja
fuente
1

Primero tienes que descargar el certificado desde este enlace

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

y colóquelo en una ubicación donde desee que el nombre del archivo descargable sea: cacert.pem Entonces, en mi caso, lo pondré en C: \ wamp64 \ bin \ php \ cacert.pem

Luego debe especificar la ubicación del archivo php.ini

Por ejemplo, estoy usando php 7, el archivo php.ini se encuentra en: C: \ wamp64 \ bin \ php \ php7.0.10 \ php.ini

Así que acceda a ese archivo y elimine esta línea; openssl.cafile

también actualícelo para que se vea así openssl.cafile = "C: \ wamp64 \ bin \ php \ cacert.pem"

Finalmente reinicia tu servidor apache y eso es todo

MUSTAPHA GHLISSI
fuente
1

IMPORTANTE : después de 4 horas, trabajando con laravel 5.7 y php 7. + y ejecute / use php artison serve en localhost tratando de conectarse a mailgun.

IMPORTANTE para resolver el problema no funciona con ip http://127.0.0.1:8000 use localhost o establezca el nombre de dominio por archivo de host

Okay ,

lior ben yosef
fuente
0

La solución es editar el archivo php.ini ubicado en su versión de php (para mí es php7.0.10), no el php.ini de apache. Encontrará un archivo comentado como este; curl.cainfo Simplemente cambie esta línea como este curl.cainfo = "C: \ permCertificate \ cacert.pem"

No olvide crear el directorio "permCertificate" y copiar el archivo "cacert.pem" dentro de él.

Sami FAREH
fuente
Funciona para mí en Ampps, gracias
Alejandro Aranda
-1

Solo para que sepas lo que funcionó para mí, el archivo en https://curl.haxx.se/ca/cacert .... no funcionó, sin embargo, el que está en la carpeta zip en la publicación en ( http: // flwebsites .biz / posts / how-fix-curl-error-60-ssl-issue ) funcionó para mí sin ningún problema.

Como han dicho otros, copie el archivo del certificado en una ubicación en su disco duro, actualice la línea

;curl.cainfo 

en su archivo php.ini para leer

curl.cainfo= "path_to_cert\cacert.pem"

Reinicie su servidor Apache.

Compilador
fuente
El sitio web vinculado es spam.
Rick Kukiela