Intento enviar una solicitud curl con mi APP_ID, APP_SECRET, etc. correctos al
https://oauth.vk.com/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a&redirect_uri=REDIRECT_URI
Necesito obtener access_token de él, pero obtengo un FALSO e imprimo el curl_error()
siguiente mensaje de lo contrario:
60: SSL certificate problem: self signed certificate in certificate chain
Mi codigo es:
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, $url);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
if ( ! $output) {
print curl_errno($ch) .': '. curl_error($ch);
}
// close curl resource to free up system resources
curl_close($ch);
return $output;
Cuando me muevo manualmente al enlace de arriba, obtengo access_token bien. ¿Por qué no funciona con rizos? Ayuda por favor.
.crt
extensión? Pero no sé cómo conseguirloRespuestas:
CURLOPT_SSL_VERIFYPEER
No se deben aceptar respuestas que sugieran deshabilitar . La pregunta es "¿Por qué no funciona con cURL?", Y como correctamente señaló Martijn Hols, es peligroso.El error probablemente se deba a que no se dispone de un paquete actualizado de certificados raíz de CA. Este suele ser un archivo de texto con un montón de firmas criptográficas que curl usa para verificar el certificado SSL de un host.
Debe asegurarse de que su instalación de PHP tenga uno de estos archivos y que esté actualizado (de lo contrario, descargue uno aquí: http://curl.haxx.se/docs/caextract.html ).
Luego configúrelo en php.ini :
Si lo configura en tiempo de ejecución, use:
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
fuente
Esta solución alternativa es peligrosa y no se recomienda :
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
No es una buena idea desactivar la verificación de pares SSL. Hacerlo podría exponer sus solicitudes a atacantes MITM.
De hecho, solo necesita un paquete de certificado raíz de CA actualizado. Instalar uno actualizado es tan fácil como:
Descargando un
cacert.pem
archivo actualizado del sitio web cURL yEstablecer una ruta en su archivo php.ini, por ejemplo, en Windows:
curl.cainfo=c:\php\cacert.pem
¡Eso es!
Mantente seguro y protegido.
fuente
php.ini
archivo global :curl_setopt ($curl_ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
Si los certificados SSL no están instalados correctamente en su sistema, puede recibir este error:
Puede resolver este problema de la siguiente manera:
Descargue un archivo con la lista actualizada de certificados de https://curl.haxx.se/ca/cacert.pem
Mueva el
cacert.pem
archivo descargado a una ubicación segura en su sistemaActualice su
php.ini
archivo y configure la ruta a ese archivo:fuente
openssl.cafile="C:/dev/ssl/mywebsite.local.crt"
php.iniImportante: Este problema me volvió loco durante un par de días y no pude averiguar qué estaba pasando con mis instalaciones de curl y openssl. Finalmente descubrí que era mi certificado intermedio (en mi caso, GoDaddy) el que estaba desactualizado. Volví a mi panel de administración de godaddy SSL, descargué el nuevo certificado intermedio y el problema desapareció.
Estoy seguro de que este es el problema para algunos de ustedes.
Aparentemente, GoDaddy había cambiado su certificado intermedio en algún momento, debido a problemas de seguridad, ya que ahora muestran esta advertencia:
"Asegúrese de utilizar los nuevos certificados intermedios SHA-2 incluidos en su paquete descargado".
Espero que esto ayude a algunos de ustedes, porque me estaba volviendo loco y esto solucionó el problema en TODOS mis servidores.
fuente
Solution: curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
fuente