php - curlopt_ssl_verifyhost - cURL requiere CURLOPT_SSL_VERIFYPEER=FALSE
https ssl-certificate (3)
Estaba usando cURL en mi servidor local durante más tiempo y, de repente, noté que ya no funciona a menos que establezca explícitamente la opción, CURLOPT_SSL_VERIFYPEER
= FALSE
.
No tengo idea de cómo / cuándo cambió esto, pero estoy usando NGINX y PHP y puedo verificar que este no es un problema específico para un host solicitado específico. Recibo respuestas en blanco de https://site1.com
y https://different-site.com
.
Alguien tiene alguna idea?
Gracias a las sugerencias de Dave Chen, me di cuenta de que debía haber perdido mi certificado. El problema se resuelve con este certificado proporcionado por el creador de cURL: http://curl.haxx.se/ca/cacert.pem
Entonces, después de descargar este archivo cacert.pem en su proyecto, ahora puede hacer esto en PHP:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");
Alternativamente, esto puede establecerse globalmente agregando lo siguiente a tu php.ini
curl.cainfo=/path/to/cacert.pem
Puedes hacerlo:
curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, verdadero);
curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt ($ ch, CURLOPT_CAINFO, getcwd (). "/path/cert.pem");
La otra opción que he incluido, CURLOPT_SSL_VERIFYHOST se puede establecer en los siguientes valores enteros:
0: no verifique el atributo de nombre común (CN)
1: compruebe que el atributo de nombre común al menos existe
2: compruebe que el nombre común existe y que coincide con el nombre de host del servidor
Si tiene CURLOPT_SSL_VERIFYPEER establecido en falso, desde una perspectiva de seguridad, realmente no importa a qué haya configurado CURLOPT_SSL_VERIFYHOST, ya que sin verificación de certificado de igual, el servidor podría usar cualquier certificado, incluido uno autofirmado que estuviera garantizado. tener un CN que coincida con el nombre de host del servidor. Entonces, esta configuración solo es relevante si habilitó la verificación del certificado.
Si está usando WampServer, observe esto:
Debe poner la ruta absoluta en CURLOPT_CAINFO, por ejemplo:
curl_setopt ($ch, CURLOPT_CAINFO, ''C:/wamp/www/your-project/cacert.pem'')
No use la ruta relativa: curl_setopt ($ ch, CURLOPT_CAINFO, ''cacert.pem'') porque no funciona .