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
文件可以解决问题。然而,即使在这样做之后我仍然得到同样的错误。
正如这里的健全性检查正是我所做的:
- 从这里下载了最新的证书: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
吗?
谢谢!
我遇到了同样的问题,但我一直在研究这篇文章,也许它对你有帮助。 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
当我尝试使用他们的 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
文件可以解决问题。然而,即使在这样做之后我仍然得到同样的错误。
正如这里的健全性检查正是我所做的:
- 从这里下载了最新的证书: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
吗?
谢谢!
我遇到了同样的问题,但我一直在研究这篇文章,也许它对你有帮助。 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