J'utilise la version PHP 5.6.3 dans le cadre de XAMPP sous Windows 7.
Lorsque j'essaie d'utiliser l'API Mandrill, le message d'erreur suivant s'affiche:
Exception non capturée 'Mandrill_HttpError' avec le message 'Echec de l'appel de l'API aux messages/send-template: 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 en ajoutant ce qui suit dans le fichier php.ini:
curl.cainfo = "C:\xampp\php\cacert.pem"
Et bien sûr, le fichier cacert.pem a été téléchargé à cet emplacement depuis http://curl.haxx.se/docs/caextract.html
mais après tout cela, les serveurs XAMPP et Apache ont redémarré mais ont toujours la même erreur.
Je ne sais vraiment pas quoi d'autre essayer.
Quelqu'un peut-il conseiller sur quoi d'autre puis-je essayer?
Enfin obtenu cela au travail!
Téléchargez le package certificat .
Mettez-le quelque part. Dans mon cas, c’était le répertoire c:\wamp\
(si vous utilisez Wamp 64 bits, c’est alors c:\wamp64\
).
Activez mod_ssl
dans Apache et php_openssl.dll
dans php.ini
(supprimez leur commentaire en supprimant ;
au début). Mais attention, mon problème était que j'avais deux fichiers php.ini
et que je devais le faire dans les deux. L’un est celui que vous obtenez à partir de l’icône de votre barre de tâches WAMP, et un autre est, dans mon cas, en C:\wamp\bin\php\php5.5.12\
Ajoutez ces lignes à votre cert dans les deux fichiers php.ini
:
curl.cainfo="C:/wamp/cacert.pem"
openssl.cafile="C:/wamp/cacert.pem"
Redémarrez les services Wamp.
Avertissement: Ce code rend votre serveur non sécurisé.
J'ai eu le même problème dans le fichier Mandrill.php après la ligne 65 où il est indiqué $ 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 également envoyé un courrier électronique en utilisant localhost mais je suggère de ne pas l'utiliser sur la version live. Sur votre serveur live, le code devrait fonctionner sans ce code.
Merci @Mladen Janjetovic,
Votre suggestion a fonctionné pour moi dans mac avec Ampps installé.
Copié:http://curl.haxx.se/ca/cacert.pem
À:/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem
Et mis à jour php.ini
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 parfaitement fonctionné aussi.
[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 souhaitez générer un nouveau certificat SSL à l'aide de SAN pour localhost, suivez les étapes sur cet article a travaillé pour moi sur Centos 7 / Vagrant / Chrome Browser
.
Les étapes ci-dessus, bien que utiles, ne fonctionnaient pas pour moi sous Windows 8. Je ne connais pas la relation, mais les étapes ci-dessous ont fonctionné. Fondamentalement, une modification du fichier cacert.pem. J'espère que ça aide quelqu'un.
J'ai trouvé une nouvelle solution sans aucune certification requise pour appeler Curl, ajoutez seulement deux lignes de code.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Si vous n'avez pas accès à php.ini, l'ajout de ce code (après votre ligne $ch = curl_init();
) 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é par $certificate_location
.
é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 lorsqu'il est déployé.
Si aucune des solutions ci-dessus ne fonctionne, essayez de mettre à jour votre installation XAMPP vers une version plus récente.
Je courais 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 n'a pas fonctionné. Cela ressemble à une combinaison de paramètres Apache et php sur cette version de XAMPP.
J'espère que ça aide quelqu'un.
J'ai essayé ça marche
ouvrir
vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php
et changer cela
$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;
J'ai la solution très simple de ce problème. Vous pouvez le faire sans aucun fichier de certificat.
Allez sur dossier racine Laravel -> Vender -> guzzlehttp -> guzzle -> src
open Client.php
find $ defaults Array. qui ressemble à cette façon ..
$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 verify key ..
'verify' => false,
Donc, après cela, le certificat SSL pour la demande CURL ne sera pas vérifié ... Cette solution fonctionne pour moi. Je trouve cette solution après de nombreuses recherches ...
J'ai eu l'erreur comme:
failed loading cafile stream: `C:\xamppPhp\Apache\bin\curl-ca-bundle.crt`
J'utilise la 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 ça peut aider quelqu'un
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