【发布时间】:2010-10-18 09:11:45
【问题描述】:
我正在尝试使用 cURL 编写一个 PHP 脚本,该脚本可以通过使用 SSL 证书的页面以及用户名和密码来授权用户,但我似乎无法通过 SSL 证书阶段。
在这种情况下,很遗憾,curl_setopt($handle, CURLOPT_VERIFYPEER, 0) 不是一个选项。证书是身份验证的必需部分,否则我会收到this other similar SO post 中提到的错误。
我已经用 cURL 尝试了一些命令行运行:
> curl --url https://website
这将返回 (60) SLL certificate problem 错误。如果我调整命令以包含 --cacert 选项:
> curl --url https://website --cacert /path/to/servercert.cer
它工作得很好;授权网站返回。
但是,我尝试了以下 PHP 代码:
$handle = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_SSL_VERIFYHOST => '0',
CURLOPT_SSL_VERIFYPEER => '1',
CURLOPT_CAINFO => '/path/to/servercert.cer',
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_URL => 'https://website'
);
curl_setopt_array($handle, $options);
curl_exec($handle);
if (curl_errno($handle)) {
echo 'Error: ' . curl_error($handle);
}
curl_close($handle);
我原以为代码本质上类似于 shell 命令,但我却收到以下错误消息:
错误:设置证书验证位置时出错:CAfile: /path/to/servercert.cer CApath: none
我已经阅读了我能找到的所有文献(特别是在 php.net 和 curl.haxx 上),但似乎找不到任何可以解决这个问题的东西。有什么建议吗?
我试过chmod 777 servercert.cer 没有成功。但是,在命令行而不是浏览器通过php test.php 使用上述代码执行PHP 脚本时,它可以完美运行。任何解释为什么它在浏览器中不起作用?
【问题讨论】:
-
PHP 是否确实有权读取该文件?尝试从命令行运行脚本:php my.php
-
奇怪!我按照你说的测试了,效果很好!为什么它可以从命令行运行,而不是浏览器?
-
php运行在什么环境下?
-
我的回答 [这里][1] 可能会有所帮助 [1]:stackoverflow.com/a/13564776/324846
标签: php ssl curl certificate