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


Twilio PHP - SSL certificate: self signed certificate in certificate chain

当我试图使用他们的PHP库通过Twilio发送消息时,我遇到了这个错误

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文件可以解决这个问题。然而,即使这样做了,我仍然会得到同样的错误。

正如这里的理智检查正是我所做的:

  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. 重新启动了包括apache在内的所有wamp服务

我仍然会犯同样的错误。我已经验证我正在使用phpinfo()编辑正确的php.ini。我不知道为什么它还在抱怨。

有什么方法可以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

显然,将目录更改为pem所在的目录。重新启动php本地服务器(xamp/wamp)。然后它就会完美地工作。

谢谢。

编辑TinyHttp.php

并在$opts阵列上添加CURLOPT_SSL_VERIFYPEER => FALSE,

您可以使用您选择的选项调用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();
    }

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

在我的情况下,上面下载链接中的cacert.pem对我不起作用,但之前的twilio php库包(如3.12.5)中的cacert.pem起作用。我在更新的包中修改了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文件

如果php.ini中存在以下配置string: curl.cainfo,请通过删除";"来取消注释,并修改路径以将其指向此电子邮件附带的cacert.pem文件,例如:

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

5请重新启动Apache服务以应用更改(非常重要!)

添加此答案是因为没有人提到[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倍