Cómo solucionar error en PHP-XAMPP-WAMPP-SSL certificate error: unable to get local issuer certificate

Cómo solucionar error en PHP-XAMPP-WAMPP-SSL certificate error: unable to get local issuer certificate

Este error ocurre cuando las propiedades de la configuración curl.cainfoopenssl.cafile del archivo php.ini, no tienen como valor el directorio de un certificado válido que te permita crear una conexión SSL. Encontrarás este problema cuando trabajes (o alguna de las herramientas que usas trabaja) con cURL y haces solicitudes a servidores externos que requieren conexión SSL.

Si trabajas con symfony e intentas crear, por ejemplo un nuevo proyecto, la excepción será lanzada especificamente por las clases GuzzleHttp\Exception\RequestException y GuzzleHttp\Ring\Exception\RingException, localizadas en la librería Guzzle PHP HTTP Client. Muchos proyectos, como Symfony usan esta librería para ejecutar algunas tareas de HTTP, como mencionado anteriormente, la creación de un proyecto (usando la ultima versión de Symfony 3.x).

Si localizas el archivo php.ini, y buscas por la propiedad [curl], estos parámetros estarán probablemente comentados y sin ningun valor:

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
;curl.cainfo=

[openssl]
; The location of a Certificate Authority (CA) file on the local filesystem
; to use when verifying the identity of SSL/TLS peers. Most users should
; not specify a value for this directive as PHP will attempt to use the
; OS-managed cert stores in its absence. If specified, this value may still
; be overridden on a per-stream basis via the "cafile" SSL stream context
; option.
;openssl.cafile=

Para solucionarlo, necesitarás simplemente proveer el directorio local a un certificado válido (cacert.pem)  en ambas propiedades.

Solución

Como primera medida, probablemente tu distribución de PHP en Windows (usando Wamp o XAMPP) contendrá probablemente un certificado válido pero no está activado.

Usando el sistema de archivos de tu sistema operativo, busca un archivo llamado cacert.pem en la carpeta de tu distribución.

Cacert.pem file ssl curl

En este caso, para Xampp v5.6.23 (PHP 5.6.23) el archivo existe y se encuentra localizado en la carpeta perl. Ahora copia el directorio completo del archivo cacert.pem en tu portapapeles.

Nota: si tu distribución de xampp (o la que uses) no contiene el archivo mencionado, simplemente descarga el archivo cacert.pem aquí y guardalo en alguna carpeta dentro del directorio de xampp y copia el directorio en el portapapeles.

Abre el archivo php.ini una vez más y busca por el area de [curl], ahora descomenta y cambia el valor de las propiedades curl.cainfo y openssl.cafile por el directorio donde se encuentra el archivo (incluyendo el nombre del archivo) que copiaste en el portapapeles dentro de comillas dobles.

Nota: incluso en algunas distribuciones, en tu php.ini no vas a encontrar el area de [curl] ó [openssl], por lo tanto simplemente crealo como se encuentra en el siguiente snippet y guarda los cambios.

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo ="C:\xampp\perl\vendor\lib\Mozilla\CA\cacert.pem"

[openssl]
; The location of a Certificate Authority (CA) file on the local filesystem
; to use when verifying the identity of SSL/TLS peers. Most users should
; not specify a value for this directive as PHP will attempt to use the
; OS-managed cert stores in its absence. If specified, this value may still
; be overridden on a per-stream basis via the "cafile" SSL stream context
; option.
openssl.cafile="C:\xampp\perl\vendor\lib\Mozilla\CA\cacert.pem"

Finalmente reinicia apache y cualquier otro servicio como por ejemplo mysql e intenta hacer lo que sea que estabas haciendo una vez más y esta vez todo debería funcionar correctamente sin ningun error.

Que te diviertas !

Esto podría ser de tu interes

Conviertete en un programador más sociable