首页 文章

Twilio PHP - SSL证书:证书链中的自签名证书

提问于
浏览
20

尝试通过Twilio使用PHP library发送消息时,我正在努力解决此错误:

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

我在Windows 7上使用wamp .

我当然找到了有关证书错误的所有其他帖子 . 从我所看到的情况来看,通常更新或添加 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

我仍然得到同样的错误 . 我已经验证我正在使用 phpinfo() 编辑正确的php.ini . 我仍然在抱怨 .

有没有办法100%验证我的 cacert.pem 文件是否被发现和读取?我已经检查了 phpinfo() 并且没有提到它 . 它应该说某个地方哪个 cacert.pem 正在使用?

谢谢!

9 回答

  • 0

    以下是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服务以应用更改(非常重要!)

  • 3

    我没有使用Twilio,但我在Windows上并且遇到了OP中描述的确切问题 . 我通过从此页面下载 ca-bundle.crt 文件并将我的php.ini指向它来解决此问题:http://curl.haxx.se/docs/caextract.html

  • 1

    在我的情况下,上面的下载链接cacert.pem对我不起作用,但来自之前的twilio php库包的cacert.pem如3.12.5工作 . 我在较新的包中修改了twilio.php以添加以下两行

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

    到较旧的包相应的位置,并将cacert.pem复制到更新的包 .

  • 0

    添加此回答,因为没有人提到 [ini-tag]

    php.ini

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

    cacert.pem在这里下载:https://twilio.zendesk.com/attachments/token/EenviU5Rv4KHUzGM6VP5UijB0/?name=cacert.pem

  • 1

    我有同样的问题,但我一直在研究这篇文章,也许它可以帮到你 . http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

    查看您的cURL版本 . 你必须是7.4倍

  • -1

    编辑TinyHttp.php

    并在$ opts数组中添加 CURLOPT_SSL_VERIFYPEER => FALSE,

  • 0

    您可以通过使用所选选项调用Twilio的CurlClient构造函数来添加您自己的cURL选项,而不是破解tiny_http.php,例如:

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

    我有完全相同的问题

    跟着这些步骤:

    下载以下文件 - 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) . 然后它将完美无缺地工作 .

    谢谢 .

  • 8

    对我来说,这里发布的答案都没有效果 .

    但后来我将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 .

相关问题