PHP CURL CURLOPT_SSL_VERIFYPEER ignorado

117

Por alguna razón, no puedo usar CURL con HTTPS. Todo funcionaba bien hasta que ejecuté la actualización de las bibliotecas de curl. Ahora estoy experimentando esta respuesta cuando intento realizar solicitudes CURL: Problema con el certificado de CA SSL (¿ruta? ¿Derechos de acceso?)

Siguiendo las sugerencias publicadas aquí sobre problemas relacionados, he intentado hacer lo siguiente:

  • Deshabilitar la verificación para el host y el par

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
    
  • Habilite CURLOPT_SSL_VERIFYPEERy apunte a cacert.pem descargado de http://curl.haxx.se/docs/caextract.html

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
    
  • También intenté hacer lo mismo con PositiveSSL.ca-bundle, que se proporcionó como certificado de CA de paquete para el servidor al que estoy tratando de conectarme.

  • Edite la configuración de php ini con curl.cainfo=cacert.pem(archivo en el mismo directorio y accesible por apache)

  • Cambiar nombre /etc/pki/nssdba/etc/pki/nssdb.old

Desafortunadamente, ninguno de los anteriores puede resolver mi problema y constantemente recibo el mensaje Problema con el certificado SSL CA (¿ruta? ¿Derechos de acceso?).

Y no necesito esta verificación en primer lugar (soy consciente de los problemas de seguridad).

¿Alguien tiene alguna otra sugerencia?

ACTUALIZAR

Después de actualizar a las últimas bibliotecas y reiniciar todo el cuadro, ¡no solo Apache, que estaba haciendo, parece estar funcionando ahora nuevamente!

Greg
fuente
1
¿Ha actualizado la biblioteca Curl compilada contra una pila SSL diferente (GnuTLS vs OpenSSL, quizás)?
Bruno
Yo no lo creo. El sistema es Fedora 16 y realmente fue el caso de yum update. Lo más molesto es que no necesito / quiero esta validación completa y parece que no puedo simplemente deshabilitarla.
Greg
Si su objetivo es utilizar HTTPS por seguridad, siempre querrá tener este proceso de validación en su lugar.
Bruno
Soy consciente de eso, sin embargo, mi caso de uso aquí hace que todo sea un poco redundante. Además, he actualizado curl a la última versión disponible y php a 5.4. Ahora, el mensaje de error desapareció, pero tampoco recibo ningún mensaje de curl :)
Greg
Ja, ahora llego a algún lugar, la función curl_errno informa el estado 77 que, según el manual, es CURLE_SSL_CACERT_BADFILE.
Greg

Respuestas:

240

Según la documentación: para verificar el certificado del host o del mismo nivel, debe especificar certificados alternativos con la CURLOPT_CAINFOopción o se puede especificar un directorio de certificados con la CURLOPT_CAPATHopción.

También mira CURLOPT_SSL_VERIFYHOST:

  • 1 para comprobar la existencia de un nombre común en el certificado de pares SSL.
  • 2 para comprobar la existencia de un nombre común y también verificar que coincida con el nombre de host proporcionado.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
trébol
fuente
5
Desactivar la verificación SSL elimina prácticamente toda la seguridad de SSL de todos modos. En su lugar, debería corregir su configuración de PHP.
Scopey
7
@Scopey, pero a veces es posible que lo necesite en entornos de desarrollo locales con certificados autofirmados. Entonces, probablemente no tenga sentido en entornos no públicos, pero como recordatorio, siempre es mejor tener alguna advertencia en el registro (por ejemplo SSL verification disabled)
Ivan Borshchov
2

Tuvimos el mismo problema en una máquina CentOS7. Desactivar el VERIFYHOST VERIFYPEERno resolvió el problema, ya no teníamos el error cURL pero la respuesta aún no era válida. Hacer un wgetenlace al mismo enlace que el cURL también resultó en un error de certificado.

-> Nuestra solución también fue reiniciar el VPS, esto lo solucionó y pudimos completar la solicitud nuevamente.

Para nosotros, esto parecía ser un problema de corrupción de la memoria. Reiniciar el VPS volvió a cargar la biblioteca en la memoria y ahora funciona. Entonces, si la solución anterior @cloverno funciona, intente reiniciar su máquina.

Rvanlaak
fuente
Asegúrate de que no sea intermitente. Tuve un problema con paypal y la verificación de pares donde a veces funcionaba, a veces no. Parecía aleatorio. Configurar explícitamente el camino del café y decirle a curl dónde se resolvió el problema.
Neil Davis