将 PHP cURL 与 SSL 证书一起使用时出错
我正在尝试使用cURL编写一个PHP脚本,除了用户名和密码之外,还可以通过使用SSL证书的页面授权用户,我似乎无法通过SSL证书阶段。
在这种情况下,不幸的是,这不是一种选择。证书是身份验证的必需部分,否则我会收到其他类似SO帖子中提到的错误。curl_setopt($handle, CURLOPT_VERIFYPEER, 0)
我尝试了一些使用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上),似乎找不到任何可以解决这个问题的东西。有什么建议吗?
我尝试过,但没有成功。但是,在通过 命令行而不是浏览器使用上述代码执行PHP脚本时,它可以完美地工作。任何解释为什么它在浏览器中不起作用?chmod 777 servercert.cer
php test.php