J'exécute la version 5.6.3 de PHP dans le cadre de XAMPP sur Windows 7.
Lorsque j'essaye d'utiliser l'API Mandrill, j'obtiens l'erreur suivante:
Exception non interceptée «Mandrill_HttpError» avec le message «Échec de l'appel d'API aux messages / modèle d'envoi: problème de certificat SSL: impossible d'obtenir le certificat de l'émetteur local»
J'ai déjà essayé tout ce que j'ai lu sur StackOverflow, y compris l'ajout de ce qui suit au fichier php.ini:
curl.cainfo = "C:\xampp\php\cacert.pem"
Et bien sûr, téléchargé à cet emplacement le fichier cacert.pem à partir de http://curl.haxx.se/docs/caextract.html
mais après tout cela, redémarré le serveur XAMPP et Apache mais toujours la même erreur.
Je ne sais vraiment pas quoi essayer d'autre.
Quelqu'un peut-il conseiller sur ce que je peux essayer d'autre?
Réponses:
Enfin obtenu que cela fonctionne!
Téléchargez le kit de certificats .
Mettez-le quelque part. Dans mon cas, c'était un
c:\wamp\
répertoire (si vous utilisez Wamp 64 bits, alors c'estc:\wamp64\
).Activer
mod_ssl
dans Apache etphp_openssl.dll
dansphp.ini
(décommentez-les en les supprimant;
au début). Mais attention, mon problème était que j'avais deuxphp.ini
fichiers et que je devais le faire dans les deux. L'un est celui que vous obtenez de l'icône de la barre des tâches WAMP, et un autre est, dans mon cas, enC:\wamp\bin\php\php5.5.12\
Ajoutez ces lignes à votre certificat dans les deux
php.ini
fichiers:curl.cainfo="C:/wamp/cacert.pem" openssl.cafile="C:/wamp/cacert.pem"
Redémarrez les services Wamp.
la source
;
au début et il m'a fallu des heures pour réaliser que cela signifie que c'est un commentaire. donc pour noobs comme moi, il faut supprimer le;
aussi bienBut be careful, my problem was that I had two php.ini files and I need to do this in both of them. One is the one you get from your WAMP taskbar icon, and another one is, in my case, in C:\wamp\bin\php\php5.5.12\
J'ai eu le même problème dans le fichier Mandrill.php après la ligne numéro 65 où il est dit $ this-> ch = curl_init ();
Ajoutez les deux lignes suivantes:
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
Cela a résolu mon problème et a également envoyé un e-mail en utilisant localhost, mais je suggère de ne pas l'utiliser sur la version live en direct. Sur votre serveur en direct, le code devrait fonctionner sans ce code.
la source
CURLOPT_SSL_VERIFYPEER
aufalse
travail.Merci @Mladen Janjetovic,
Votre suggestion a fonctionné pour moi dans mac avec des ampps installés.
Copié: http://curl.haxx.se/ca/cacert.pem
À:
/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem
Et mis
php.ini
à jour avec ce chemin et redémarré 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"
Et appliqué le même paramètre dans l'installation de Windows AMPPS et cela a également parfaitement fonctionné.
[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"
: Idem pour 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 vous cherchez à générer un nouveau certificat SSL en utilisant SAN pour localhost, les étapes de cet article ont fonctionné pour moi
Centos 7 / Vagrant / Chrome Browser
.la source
Lorsque vous affichez la page http://curl.haxx.se/docs/caextract.html , vous remarquerez en gros caractères une section appelée:
Lisez-le, puis téléchargez la version des certificats qui comprend les certificats «RSA-1024». https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt
Ceux-ci fonctionneront avec Mandrill.
La désactivation de SSL est une mauvaise idée.
la source
Les étapes ci-dessus, bien qu'utiles, n'ont pas fonctionné pour moi sur Windows 8. Je ne connais pas la co-relation, mais les étapes ci-dessous ont fonctionné. Fondamentalement, un changement dans le fichier cacert.pem. J'espère que cela aide quelqu'un.
la source
J'ai trouvé une nouvelle solution sans aucune certification requise pour appeler curl uniquement ajouter un code de deux lignes.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
la source
Si vous n'avez pas accès à php.ini , l'ajout de ce code (après votre
$ch = curl_init();
ligne) fonctionne pour moi:$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);
Ensuite, il vous suffira de télécharger ca-bundle.crt et de l'enregistrer à l'emplacement spécifié dans
$certificate_location
.la source
J'ai une solution très simple de ce problème. Vous pouvez le faire sans aucun fichier de certificat.
Allez sur Laravel Root Folder -> Vender -> guzzlehttp -> guzzle -> src
ouvrez Client.php
find $ defaults Array. qui ressemblent à ça ...
$defaults = [ 'allow_redirects' => RedirectMiddleware::$defaultSettings, 'http_errors' => true, 'decode_content' => true, 'verify' => true, 'cookies' => false ];
La tâche principale consiste maintenant à modifier la valeur de la clé de vérification .
'verify' => false,
Donc, après cela, il ne vérifiera pas le certificat SSL pour la demande CURL ... Cette solution fonctionne pour moi. Je trouve cette solution après de nombreuses recherches ...
la source
élaborer sur les réponses ci-dessus pour le déploiement du serveur.
$hostname = gethostname(); if($hostname=="mydevpc") { curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); }
devrait faire l'affaire pour l'environnement de développement sans compromettre le serveur lors du déploiement.
la source
J'ai essayé ça ça marche
ouvert
et change ça
$conf[CURLOPT_SSL_VERIFYHOST] = 2; `enter code here`$conf[CURLOPT_SSL_VERIFYPEER] = true;
pour ça
$conf[CURLOPT_SSL_VERIFYHOST] = 0; $conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
la source
J'étais confronté à un problème comme celui-ci dans mon système local mais pas dans le serveur en direct. J'ai également mentionné une autre solution sur cette page, mais cela ne fonctionnait pas dans localhost. Trouvez donc une nouvelle solution à ce problème, qui fonctionne dans le serveur localhost-WAMP .
parfois le système ne pouvait pas trouver votre cacert.pem dans votre lecteur. afin que vous puissiez définir cela dans votre code où vous allez utiliser CURL
vérifiez ce code de CURL .
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL =>$url, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_RETURNTRANSFER=> true, )); curl_setopt($curl, CURLOPT_CAINFO, "f:/wamp/bin/cacert.pem"); // <------ curl_setopt($curl, CURLOPT_CAPATH, "f:/wamp/bin/cacert.pem"); // <------ $response = json_decode(curl_exec($curl),true); $err = curl_error($curl); curl_close($curl);
mais cette solution peut ne pas fonctionner sur un serveur en direct. à cause du chemin absolu de cacert.pem
la source
J'ai eu le même problème lors de la création de mon application dans AppVeyor.
c:\php
echo extension=php_openssl.dll >> c:\php\php.ini
echo curl.cainfo=c:\php\cacert.pem >> c:\php\php.ini
la source
Si aucune des solutions ci-dessus ne fonctionne pour vous, essayez de mettre à jour votre installation XAMPP vers une version plus récente.
J'utilisais XAMPP avec php 5.5.11, le même code exact ne fonctionnait pas, je suis passé à XAMPP avec php 5.6.28 et les solutions ci-dessus ont fonctionné.
De plus, seule la mise à jour de PHP ne fonctionnait pas non plus semble être une combinaison de paramètres apache et php sur cette version de XAMPP.
J'espère que ça aide quelqu'un.
la source
J'ai eu l'erreur comme:
J'utilise une machine Windows. J'ai donc suivi les étapes ci-dessous.
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.
J'espère que cela peut aider quelqu'un
la source
J'ai une solution appropriée à ce problème, essayons de comprendre la cause première de ce problème. Ce problème survient lorsque les serveurs distants ssl ne peuvent pas être vérifiés à l'aide de certificats racine dans le magasin de certificats de votre système ou lorsque ssl distant n'est pas installé avec les certificats de chaîne. Si vous avez un système Linux avec un accès root ssh, dans ce cas, vous pouvez essayer de mettre à jour votre magasin de certificats avec la commande ci-dessous:
update-ca-certificates
Si toujours, cela ne fonctionne pas, vous devez ajouter le certificat racine et provisoire du serveur distant dans votre magasin de certificats. Vous pouvez télécharger les certificats racine et intermédiaires et les ajouter dans le répertoire / usr / local / share / ca-certificates , puis exécuter la commande
update-ca-certificates
. Cela devrait faire l'affaire. De même pour Windows, vous pouvez rechercher comment ajouter un certificat racine et intermédiaire.L'autre façon de résoudre ce problème consiste à demander à l'équipe de serveurs distants d'ajouter un certificat SSL en tant que bundle de certificat racine de domaine, de certificat intermédiaire et de certificat racine.
la source
pour guzzle, vous pouvez essayer ceci:
$client = new Client(env('API_HOST')); $client->setSslVerification(false);
testé sur guzzle / guzzle 3. *
la source