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