Сертификат 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:pathtositetwilio-phpServicesTwilioTinyHttp.php on line 119

я использую wamp в windows 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 Это используете?

спасибо!

9 ответов


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

выполните следующие действия:

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

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

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

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

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

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

спасибо.


Редактировать TinyHttp.в PHP

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


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


в моем случае, cacert.pem из ссылки для скачивания выше не работал для меня, но cacert.pem из предыдущего пакета библиотеки PHP twilio, такого как 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.

*(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-файл в вашем любимом редакторе

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

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

добавление этого answert, потому что никто не называет [ini-tag]

php.ini

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

cacert.pem загружается здесь: https://twilio.zendesk.com/attachments/token/EenviU5Rv4KHUzGM6VP5UijB0/?name=cacert.pem


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

посмотрите на свою версию cURL. вы должны быть в 7,4 х