php curl oauth vk

php - Curl error 60, problema del certificado SSL: certificado autofirmado en la cadena de certificados



oauth vk (6)

Dado que el protocolo es https, para el modo de desarrollo puede establecer esta opción curl para evitar errores de verificación de SSL como una solución rápida.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Pero para su entorno de producción, no implemente con esta solución sencilla. Le causará un problema de seguridad ya que la transferencia de datos será transparente entre las capas de red. Consulte la corrección correcta de la sección de la siguiente url:

http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

Intento enviar una solicitud curl con mi APP_ID, APP_SECRET correcta, etc. a la

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 siguiente mensaje de impresión FALSE y curl_error() .

60: SSL certificate problem: self signed certificate in certificate chain

Mi código 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 Curl? Ayuda por favor.


Esta solución alternativa es peligrosa y no recomendada :

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

No es una buena idea desactivar la verificación de pares SSL. Si lo hace, podría exponer sus solicitudes a los atacantes de MITM.

De hecho, solo necesita un paquete de certificados raíz de CA actualizado. Instalar uno actualizado es tan fácil como:

  1. Descarga del archivo cacert.pem actualizado del http://curl.haxx.se/docs/caextract.html y
  2. Establecer una ruta hacia él en su archivo php.ini, por ejemplo, en Windows:

    curl.cainfo=c:/php/cacert.pem

¡Eso es!

Manténgase seguro y protegido.


HEY CHICOS: ¡MUY IMPORTANTE! Este problema me volvió loco por un par de días y no pude entender qué estaba pasando con mis instalaciones curl y openssl. Finalmente descubrí que era mi certificado INTERMEDIATE (en mi caso, GoDaddy) 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 usar 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 limpió el problema en TODOS mis servidores ...


La respuesta aceptada no debe ser aceptada. La pregunta es "¿Por qué no funciona con cURL?", Y como señaló correctamente Martijn Hols, es peligroso.

El error probablemente se deba a que no tiene un paquete actualizado de certificados raíz de CA. Suele tratarse de un archivo de texto con un montón de firmas criptográficas que Curl utiliza 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 configura en php.ini :

curl.cainfo = <absolute_path_to> cacert.pem

Si lo está configurando en tiempo de ejecución, use:

curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");


Si los certificados SSL no están instalados correctamente en su sistema, puede obtener este error:

cURL error 60: Problema de certificado SSL: no se puede obtener el certificado de emisor local.

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 archivo cacert.pem descargado a una ubicación segura en su sistema

Actualice su archivo php.ini y configure la ruta a ese archivo:


¡No use esta solución alternativa en la producción! Usar solo con fines de desarrollo

Encontré una respuesta, debes deshabilitar SSL verificando:

// 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, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // $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;

y funciona bien! Gracias a todos :)