【发布时间】:2015-12-27 01:29:48
【问题描述】:
我正在尝试将自定义 cer-certificate 添加到我的 PHP cURL 请求中,但我不断收到此错误:
error setting certificate verify locations:
CAfile: /path/to/my/cert.cer
CApath: none
我对这个错误的发现是:
路径是相对的。
如您所见,我提供了一个绝对路径。路径错误。
我试过var_dump(file_exists($certLocation));,它给了我true,所以不是这样。文件的权限不正确。
出于调试目的,我已将权限设置为777。错误仍然存在。文件路径在链中某处没有
+x-权限。
我也设置了这个,确保从 root 开始的整个路径都有+x-permissions,但仍然没有运气。
我在这里不知所措,已经尝试了我能找到的一切,而事实是,我什至不明白错误的真正含义。什么是verify location?我能理解的是加载文件时出错。
非常感谢任何对此的启发。请参阅下面的代码示例。
谢谢。
我使用的代码:
<?php
$oCurl = curl_init($this->baseUrl);
curl_setopt($oCurl, CURLOPT_FAILONERROR, 1);
curl_setopt($oCurl, CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($oCurl, CURLOPT_CONNECTTIMEOUT, $this->connectionTimeout);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($oCurl, CURLOPT_POST, 1);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($oCurl, CURLOPT_CAINFO, "/tmp/cert.cer");
错误:
error setting certificate verify locations:
CAfile: /tmp/cert.cer
CApath: none
【问题讨论】:
-
您的 *.cer 文件有正确的用户和组集吗?和你的脚本一样,就是访问它?
-
检查您的
php.ini上的curl.cainfo值,如果您能够将其修改为curl.cainfo=/tmp/cert.cer -
@HelgeTalvikSöderström 这是一个意外的输出。你的
/tmp/cert.cer不是 PEM 格式的证书吗?file /tmp/cert.cer的输出是什么? -
@HelgeTalvikSöderström 哦,我想我明白你有什么样的文件;该命令现在应该可以正确读取:
openssl x509 -in /tmp/cert.cer -inform der -text -noout,检查它是否是 CA 证书;我的猜测是您尝试使用的cer不是 CA 或 CA 捆绑包,或者如果是,那么它不是签署您尝试连接的 url 上使用的证书的 CA。 -
@HelgeTalvikSöderström 哦,我正忙着写答案,没有注意到你在这里评论:) 忽略我的最后一行答案,毕竟你有一个适当的 CA xD
标签: php curl certificate