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

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

当我尝试使用他们的 PHP library:

通过 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. 重新启动了所有 wamp 服务,包括 apache

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

有什么方法可以 100% 验证我的 cacert.pem 文件是否已被找到和读取?我已经检查了 phpinfo() 并且那里没有提到它。它应该在某个地方说出它正在使用的 cacert.pem 吗?

谢谢!

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

查看您的 cURL 版本。你必须在 7.4x

在我的例子中,来自上面下载 link 的 cacert.pem 对我不起作用,但是来自以前的 twilio php 库包的 cacert.pem 例如 3.12.5 成功了。我在较新的包中修改了 twilio.php 以添加以下两行

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

作为旧包复制到相应的位置,并将 cacert.pem 也复制到较新的包。

我遇到了完全相同的问题

按照以下步骤操作:

下载以下文件 - cacert.pem

然后下载以下文件 - thawte_Premium_Server_CA.pem

在文本编辑器中打开第二个文件并将其内容复制到第一个文件中(cacert.pem 在 bottom/end)。

保存 cacert.pem 并将以下行添加到您的 php.ini :

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

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

谢谢。

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

编辑TinyHttp.php

并在 $opts 数组

中添加 CURLOPT_SSL_VERIFYPEER => FALSE,

对我而言,此处发布的 none 个答案有效。

但后来我将我的 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 服务以应用更改(非常重要!)

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

添加这个答案是因为没有人提到 [ini-tag]

php.ini

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

cacert.pem 下载地址:https://twilio.zendesk.com/attachments/token/EenviU5Rv4KHUzGM6VP5UijB0/?name=cacert.pem