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
устраняет проблему. Однако даже после этого я все равно получаю ту же ошибку.
Точно так же, как проверка работоспособности здесь именно то, что я сделал:
- Загрузили последние сертификаты отсюда: http://curl.haxx.se/ca/cacert.pem.
- Размещенный этот файл в следующем расположении
c:/wamp/certs/cacert.pem
- Обновлен php.ini следующим образом:
curl.cainfo = c:/wamp/certs/cacert.pem
- Перезапуск всех служб wamp, включая apache
И я все еще получаю ту же ошибку. Я проверил, что редактирую правильный php.ini, используя phpinfo()
. Я не понимаю, почему он все еще жалуется.
Есть ли способ проверить 100%, что мой файл cacert.pem
находится и читается? Я проверил phpinfo()
, и там нет упоминания об этом. Должен ли он сказать, где, если какой-либо cacert.pem
он использует?
Спасибо!
Ответы
Ответ 1
У меня была такая же проблема
Выполните следующие действия:
Скачайте следующий файл - cacert.pem
Затем загрузите следующий файл - thawte_Premium_Server_CA.pem
Откройте второй файл в текстовом редакторе и скопируйте его содержимое в первый файл (cacert.pem
внизу/конец).
Сохраните cacert.pem
и добавьте следующие строки в php.ini
:
[curl]
curl.cainfo=c:/xampp/php/cacert.pem
Очевидно, измените каталог на тот, где находится ваш пем. Перезапустите локальный сервер php (xampp/wamp). Тогда он будет работать безупречно.
спасибо.
Ответ 2
Изменить TinyHttp.php
и добавьте CURLOPT_SSL_VERIFYPEER => FALSE,
в $opts array
Ответ 3
Я не использую Twilio, но я нахожусь в Windows и имею точные проблемы, описанные в OP. Я решил это, загрузив ca-bundle.crt
файл с этой страницы и указав на свой php.ini:
http://curl.haxx.se/docs/caextract.html
Ответ 4
В моем случае cacert.pem из ссылки для загрузки выше не работает для меня, но cacert.pem из предыдущего пакета библиотеки twilio php, такого как 3.12.5. Я изменил twilio.php в новом пакете, чтобы добавить следующие две строки
CURLOPT_CAINFO => dirname(FILE) . '/cacert.pem'
'cafile' => dirname(FILE) . '/cacert.pem'
в соответствующее место как старый пакет и скопировал cacert.pem в более новый пакет.
Ответ 5
Для меня ни один из ответов, размещенных здесь, не работал.
Но потом я обновил свой PHP до 7.0.1 *, и у меня больше не было этой ошибки: 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
.
Ответ 6
Вот официальный ответ 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
, пожалуйста, раскомментируйте ее, удалив ";
" и изменив путь, чтобы указать его в файл cacert.pem, прикрепленный к этому электронному письму, например
;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;
curl.cainfo=c:\cert\cacert.pem
5 Перезапустите службу Apache, чтобы применить изменение (очень важно!)
Ответ 7
Вместо взлома tiny_http.php вы можете добавить свои собственные параметры cURL, вызвав конструктор Twilio CurlClient с выбранными вами параметрами, например:
$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();
}
Ответ 8
У меня такая же проблема, но я смотрю в статью, может быть, она тебе помогает. http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/
Посмотрите на свою версию cURL. вы должны быть в 7.4x