web-dev-qa-db-fra.com

Twilio PHP - Certificat SSL: certificat auto-signé dans la chaîne de certificats

J'ai du mal à accepter cette erreur lorsque j'essaie d'envoyer un message via Twilio à l'aide de leur bibliothèque PHP :

Fatal error: Uncaught exception Services_Twilio_TinyHttpException with message SSL certificate problem: self signed certificate in certificate chain thrown in F:\path\to\site\twilio-php\Services\Twilio\TinyHttp.php on line 119

J'utilise Wamp sur Windows 7.

J'ai bien sûr trouvé tous les autres articles sur les erreurs de certificat. D'après ce que je peux voir, la mise à jour ou l'ajout habituel du fichier cacert.pem résout le problème. Cependant, même après cela, je reçois toujours la même erreur.

Voici ce que j’ai fait:

  1. Téléchargé les derniers certificats à partir d’ici: http://curl.haxx.se/ca/cacert.pem .
  2. Placé ce fichier à l'emplacement suivant c:/wamp/certs/cacert.pem
  3. Php.ini mis à jour comme suit: curl.cainfo = c:/wamp/certs/cacert.pem
  4. Redémarrage de tous les services wamp, y compris Apache

Et je reçois toujours la même erreur. J'ai vérifié que j'éditais le php.ini correct en utilisant phpinfo(). Je ne comprends pas pourquoi il se plaint toujours.

Est-il possible de vérifier à 100% que mon fichier cacert.pem est trouvé et lu? J'ai vérifié phpinfo() et il n'en est pas fait mention. Devrait-il indiquer quelque part lequel, le cas échéant, cacert.pem utilise?

Merci!

20
jd182

J'ai eu exactement le même problème

Suivez ces étapes:

Téléchargez le fichier suivant - cacert.pem

Puis téléchargez le fichier suivant - thawte_Premium_Server_CA.pem

Ouvrez le deuxième fichier dans un éditeur de texte et copiez son contenu dans le premier fichier (cacert.pem au bas/à la fin).

Enregistrez cacert.pem et ajoutez les lignes suivantes à votre php.ini:

[curl]
curl.cainfo=c:/xampp/php/cacert.pem

Évidemment, changez le répertoire en celui où se trouve votre pem. Redémarrez le serveur php local (xampp/wamp). Ensuite, cela fonctionnera parfaitement.

merci.

50
codemonkey

Éditer TinyHttp.php

et ajoutez CURLOPT_SSL_VERIFYPEER => FALSE, à $ opts array

8
Nuno Ferro

Je n'utilise pas Twilio, mais je suis sous Windows et je rencontrais exactement les problèmes décrits dans le PO. J'ai résolu ce problème en téléchargeant le fichier ca-bundle.crt à partir de cette page et en y pointant mon php.ini: http://curl.haxx.se/docs/caextract.html

3
gazareth

Dans mon cas, le fichier cacert.pem du lien de téléchargement ci-dessus ne fonctionnait pas pour moi, mais le fichier cacert.pem du paquet de bibliothèque twilio php précédent, tel que 3.12.5 travaillait. J'ai modifié twilio.php dans un package plus récent pour ajouter les deux lignes suivantes

CURLOPT_CAINFO => dirname(FILE) . '/cacert.pem'
'cafile' => dirname(FILE) . '/cacert.pem'

à l'emplacement correspondant en tant qu'ancien package et copié le fichier cacert.pem vers un nouveau package également.

1
leshan

Au lieu de pirater tiny_http.php, vous pouvez ajouter vos propres options de cURL en appelant le constructeur CurlClient de Twilio avec les options que vous avez choisies, comme:

    $client = new \Twilio\Rest\Client($accountSid, $authToken);
    $curlOptions = [ CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false];
    $client->setHttpClient(new CurlClient($curlOptions));

    try {
        $call = $client->calls->create($from_phone, $phone_number, $callback_url);
        print 'Call queued with Twilio';
    } catch (\Exception $ex) {
        print 'Twilio error: ' . $ex->getMessage();
    }
1
user3511370

Voici la réponse officielle de Twilio:

Pour essayer de résoudre ce problème, procédez comme suit:

1 Téléchargez le fichier pem suivant: https://twilio.zendesk.com/attachments/token/EenviU5Rv4KHUzGM6VP5UijB0/?name=cacert.pem

2 Copiez ce fichier dans c:\cert\cacert.pem (Windows) ou tout autre chemin sur votre installation Unix/Linux/Mac.

3 Ouvrez le fichier php.ini dans votre éditeur préféré.

Si la configuration string: curl.cainfo suivante existe dans votre fichier php.ini, supprimez le commentaire en supprimant ";" et modifiez le chemin afin de le diriger vers le fichier cacert.pem joint à cet e-mail, par exemple:

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

curl.cainfo=c:\cert\cacert.pem

5 Veuillez redémarrer votre service Apache pour appliquer le changement (très important!)

0
Jonathan

Pour moi, aucune des réponses affichées ici n'a fonctionné. 

Mais ensuite, j'ai mis à niveau mon PHP vers 7.0.1 * et je n'ai plus eu cette erreur: Services_Twilio_TinyHttpException: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL.

* (C:\wamp\bin\php\php-7.0.1-Win32-VC14-x64 au lieu de C:\wamp\bin\php\php5.4.3)

Et mon C:\wamp\bin\php\php-7.0.1-Win32-VC14-x64\php.ini avait déjà inclus curl.cainfo=C:/wamp/cacert.pem.

0
Ryan

Ajout de cette réponse car personne ne mentionne le [ini-tag]

php.ini

[curl]
curl.cainfo=C:\cacert.pem

cacert.pem est téléchargé ici: https://twilio.zendesk.com/attachments/token/EenviU5Rv4KHUzGM6VP5UijB0/?name=cacert.pem

0
Jonathan