instalar certificado php ssl curl xampp mandrill

instalar - PHP-Error de certificado SSL: no se puede obtener el certificado de emisor local



instalar certificado ssl apache ubuntu (14)

Estoy ejecutando PHP Versión 5.6.3 como parte de XAMPP en Windows 7.

Cuando intento usar la API de Mandrill, aparece el siguiente error:

Excepción no detectada ''Mandrill_HttpError'' con el mensaje ''Llamada API a mensajes / plantilla de envío fallida: problema de certificado SSL: no se puede obtener el certificado de emisor local''

Ya probé todo lo que leí en StackOverflow, incluida la adición de lo siguiente al archivo php.ini:

curl.cainfo = "C:/xampp/php/cacert.pem"

Y, por supuesto, descargó en esa ubicación el archivo cacert.pem de http://curl.haxx.se/docs/caextract.html

pero después de todo eso, reinició XAMPP y el servidor Apache pero aún obtenía el mismo error.

Realmente no sé qué más probar.

¿Alguien puede aconsejar sobre qué más puedo probar?


Descargo de responsabilidad: este código hace que su servidor sea inseguro.

Tuve el mismo problema en el archivo Mandrill.php después de la línea número 65 donde dice $ this-> ch = curl_init ();

Agregue las siguientes dos líneas:

curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);

Esto resolvió mi problema y también envió un correo electrónico usando localhost, pero sugiero NO usarlo en la versión en vivo en vivo. En su servidor en vivo, el código debería funcionar sin este código.


¡Finalmente conseguí que esto funcione!

  1. Descargue el paquete de certificados .

  2. Ponlo en alguna parte. En mi caso, ese era el directorio c:/wamp/ (si está utilizando Wamp 64 bit, entonces es c:/wamp64/ ).

  3. Habilite mod_ssl en Apache y php_openssl.dll en php.ini (descomente quitándolos ; al principio). Pero tenga cuidado, mi problema fue que tenía dos archivos php.ini y necesito hacer esto en ambos. Uno es el que obtiene del icono de la barra de tareas de WAMP, y otro es, en mi caso, en C:/wamp/bin/php/php5.5.12/

  4. Agregue estas líneas a su certificado en ambos archivos php.ini :

    curl.cainfo="C:/wamp/cacert.pem" openssl.cafile="C:/wamp/cacert.pem"

  5. Reinicie los servicios de Wamp.



Encontré una nueva solución sin ninguna certificación requerida para llamar a curl, solo agregue un código de dos líneas.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);


Gracias @Mladen Janjetovic,

Su sugerencia funcionó para mí en mac con ampps instalado.

Copiado: http://curl.haxx.se/ca/cacert.pem

Para: /Applications/AMPPS/extra/etc/openssl/certs/cacert.pem

Y actualicé php.ini con esa ruta y reinicié Apache:

[curl] ; A default value for the CURLOPT_CAINFO option. This is required to be an ; absolute path. curl.cainfo="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem" openssl.cafile="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"

Y aplicó la misma configuración en la instalación de Windows AMPPS y funcionó perfectamente también.

[curl] ; A default value for the CURLOPT_CAINFO option. This is required to be an ; absolute path. curl.cainfo="C:/Ampps/php/extras/ssl/cacert.pem" openssl.cafile="C:/Ampps/php/extras/ssl/cacert.pem"

: Lo mismo para wamp.

[curl] ; A default value for the CURLOPT_CAINFO option. This is required to be an ; absolute path. curl.cainfo="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem" openssl.cafile="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"

Si está buscando generar un nuevo certificado SSL usando SAN para localhost, los pasos en esta publicación funcionaron para mí en Centos 7 / Vagrant / Chrome Browser .


Intenté esto funciona

abierto

vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php

y cambia esto

$conf[CURLOPT_SSL_VERIFYHOST] = 2; `enter code here`$conf[CURLOPT_SSL_VERIFYPEER] = true;

a esto

$conf[CURLOPT_SSL_VERIFYHOST] = 0; $conf[CURLOPT_SSL_VERIFYPEER] = FALSE;


Los pasos anteriores, aunque útiles, no me funcionaron en Windows 8. No sé la correlación, pero los pasos a continuación funcionaron. Básicamente un cambio en el archivo cacert.pem. Espero que esto ayude a alguien.

  • Descargue el archivo cacert.pem desde aquí: http://curl.haxx.se/docs/caextract.html
  • Guarde el archivo en su carpeta de instalación de PHP. (por ejemplo: si usa xampp, guárdelo en c: / Installation_Dir / xampp / php / cacert.pem).
  • Abra su archivo php.ini y agregue estas líneas:
  • curl.cainfo = "C: / Installation_Dir / xampp / php / cacert.pem" openssl.cafile = "C: / Installation_Dir / xampp / php / cacert.pem"
  • Reinicie su servidor Apache y eso debería solucionarlo (simplemente detenga e inicie los servicios según sea necesario).

Recibí el error como:

failed loading cafile stream: `C:/xamppPhp/apache/bin/curl-ca-bundle.crt`

Estoy usando la máquina de Windows. Entonces seguí los pasos a continuación.

1. I have downloaded .pem file from " https://curl.haxx.se/docs/caextract.html " 2. Then I kept the downloaded file inside "C:/xamppPhp/apache/bin/" folder and renamed the same downloaded file to "curl-ca-bundle.crt". 3. I restarted XAMPP and cleared the cache. 4. It''s done.

Espero que pueda ayudar a alguien


Si ninguna de las soluciones anteriores funciona, intente actualizar su instalación de XAMPP a una versión más nueva.

Estaba ejecutando XAMPP con php 5.5.11, el mismo código exacto no funcionó, actualicé a XAMPP con php 5.6.28 y las soluciones anteriores funcionaron.

Además, solo actualizar PHP no funcionó tampoco parece una combinación de configuraciones de apache y php en esa versión de XAMPP.

Espero que ayude a alguien.


Si no tiene acceso a php.ini , agregar este código (después de su $ch = curl_init(); línea) funciona para mí:

$certificate_location = "C:/Program Files (x86)/EasyPHP-Devserver-16.1/ca-bundle.crt"; // modify this line accordingly (may need to be absolute) curl_setopt($ch, CURLOPT_CAINFO, $certificate_location); curl_setopt($ch, CURLOPT_CAPATH, $certificate_location);

Luego, solo tendrá que descargar https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt y guardarlo en la ubicación que especificó en $certificate_location .


Tengo una solución muy simple de este problema. Puede hacerlo sin ningún archivo de certificado.

Vaya a Laravel Root Folder -> Vender -> guzzlehttp -> guzzle -> src

Abra Client.php

encontrar $ por defecto matriz. que se ve así ...

$defaults = [ ''allow_redirects'' => RedirectMiddleware::$defaultSettings, ''http_errors'' => true, ''decode_content'' => true, ''verify'' => true, ''cookies'' => false ];

Ahora el trabajo principal es cambiar el valor de la clave de verificación .

''verify'' => false,

Entonces, después de esto, no verificará el Certificado SSL para la Solicitud CURL ... Esta Solución me funciona. Encuentro esta solución después de muchas investigaciones ...


Tuve el mismo problema durante la creación de mi aplicación en AppVeyor.

  • Descargue https://curl.haxx.se/ca/cacert.pem en c:/php
  • Habilitar echo extension=php_openssl.dll >> c:/php/php.ini openssl echo extension=php_openssl.dll >> c:/php/php.ini
  • Localizar certificado echo curl.cainfo=c:/php/cacert.pem >> c:/php/php.ini

elaborando las respuestas anteriores para la implementación del servidor.

$hostname = gethostname(); if($hostname=="mydevpc") { curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); }

debe hacer el truco para el entorno de desarrollo sin comprometer el servidor cuando se implementa.


para guzzle puedes probar esto:

$client = new Client(env(''API_HOST'')); $client->setSslVerification(false);

probado en guzzle / guzzle 3. *