Twilio PHP – сертификат SSL: самоподписанный сертификат в цепочке сертификатов

Я борюсь с этой ошибкой при попытке отправить сообщение через Twilio с помощью своей библиотеки 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 

Я использую wamp на окнах 7.

Я, конечно, нашел все другие сообщения о ошибках сертификатов. Из того, что я вижу, обычно обновление или добавление файла cacert.pem устраняет проблему. Однако даже после этого я все равно получаю ту же ошибку.

Точно так же, как проверка работоспособности – вот что я сделал:

  1. Загрузили последние сертификаты отсюда: http://curl.haxx.se/ca/cacert.pem .
  2. Разместил этот файл в следующем c:/wamp/certs/cacert.pem
  3. Обновлен php.ini следующим образом: curl.cainfo = c:/wamp/certs/cacert.pem
  4. Перезапущены все сервисы wamp, включая apache

И я все еще получаю ту же ошибку. Я проверил, что редактирую правильный php.ini, используя phpinfo() . Я не понимаю, почему он все еще жалуется.

Есть ли способ проверить 100%, что мой файл cacert.pem находится и читается? Я проверил phpinfo() и там нет упоминания об этом. Должен ли он сказать, где, если какой-либо cacert.pem он использует?

Благодаря!

У меня была такая же проблема

Следуй этим шагам:

Загрузите следующий файл – cacert.pem

Затем загрузите следующий файл – thawte_Premium_Server_CA.pem

Откройте второй файл в текстовом редакторе и скопируйте его содержимое в первый файл ( cacert.pem внизу / конец).

Сохраните cacert.pem и добавьте следующие строки в ваш php.ini :

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

Очевидно, измените каталог на тот, где находится ваш пем. Перезапустите локальный сервер php (xampp / wamp). Тогда он будет работать безупречно.

Благодарю.

Изменить TinyHttp.php

и добавьте CURLOPT_SSL_VERIFYPEER => FALSE, в $ opts array

Я не использую Twilio, но я нахожусь в Windows и имею точные проблемы, описанные в OP. Я решил это, загрузив файл ca-bundle.crt с этой страницы и указав на свой php.ini: http://curl.haxx.se/docs/caextract.html

В моем случае cacert.pem из ссылки для загрузки выше не работал для меня, но cacert.pem из предыдущего пакета библиотеки twilio php, такого как 3.12.5, работал. Я изменил twilio.php в новом пакете, чтобы добавить следующие две строки

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

к соответствующему местоположению в качестве более старого пакета и скопировал cacert.pem в более новый пакет.

Для меня ни один из ответов, размещенных здесь, не работал.

Но затем я обновил свой PHP до 7.0.1 *, и у меня больше не было этой ошибки: Services_Twilio_TinyHttpException: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL 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 вместо C:\wamp\bin\php\php5.4.3 )

И мой C:\wamp\bin\php\php-7.0.1-Win32-VC14-x64\php.ini уже включил curl.cainfo=C:/wamp/cacert.pem .

Вот официальный ответ Twilio:

Чтобы исправить эту проблему, попробуйте сделать следующее:

1 Загрузите следующий файл pem: https://twilio.zendesk.com/attachments/token/EenviU5Rv4KHUzGM6VP5UijB0/?name=cacert.pem

2 Скопируйте этот файл либо в c:\cert\cacert.pem (Windows), либо любой другой путь на вашей установке Unix / Linux / Mac

3 Откройте файл php.ini в своем любимом редакторе

Если в вашем php.ini существует следующая string: curl.cainfo конфигурации string: curl.cainfo , пожалуйста, раскомментируйте ее, удалив « ; » и изменив путь, чтобы указать его в файл cacert.pem, прикрепленный к этому электронному письму, например:

 ;;;;;;;;;;;;;;;;;;; ; Module Settings ; ;;;;;;;;;;;;;;;;;;; curl.cainfo=c:\cert\cacert.pem 

5 Перезапустите службу Apache, чтобы применить изменение (очень важно!)

Вместо взлома tiny_http.php вы можете добавить свои собственные параметры cURL, вызвав конструктор CurlClient Twilio с выбранными вами параметрами, например:

  $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(); } 

У меня такая же проблема, но я смотрел в статью, может быть, это тебе помогает. http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

Посмотрите на свою версию cURL. вы должны быть в 7.4x