gpt4 book ai didi

php - 使用带有 SSL 证书的 PHP cURL 时出错

转载 作者:IT王子 更新时间:2023-10-29 01:22:13 29 4
gpt4 key购买 nike

我正在尝试使用 cURL 编写一个 PHP 脚本,它可以通过使用 SSL 证书的页面授权用户,除了用户名和密码之外,我似乎无法通过 SSL 证书阶段。

在这种情况下,很遗憾,curl_setopt($handle, CURLOPT_VERIFYPEER, 0) 不是一个选项。证书是身份验证的必需部分,否则我会收到 this other similar SO post 中提到的错误.

我用 cURL 尝试了一些命令行运行:

> curl --url https://website

这将返回 (60) SLL 证书问题 错误。如果我调整命令以包含 --cacert 选项:

> curl --url https://website --cacert/path/to/servercert.cer

它工作得很好;返回 auth 网站。

但是,我尝试了以下 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 命令,但我却收到以下错误消息:

Error: error setting certificate verify locations: CAfile: /path/to/servercert.cer CApath: none

我已经阅读了我能找到的所有文献(特别是关于 php.net 和 curl.haxx 的文献),但似乎找不到任何解决此问题的方法。有什么建议吗?

我试过 chmod 777 servercert.cer 但没有成功。但是,在通过命令行而不是浏览器通过 php test.php 执行带有上述代码的 PHP 脚本时,它工作得很好。为什么它在浏览器中不起作用的任何解释?

最佳答案

因为事情是通过命令行工作的,而不是通过使用 curl 的 php,所以我会追求 curl 是问题所在。

根据这个 URL,http://curl.haxx.se/docs/sslcerts.html ,这是您在上面引用的 SO 帖子中的引用(reading SSL page with CURL (php))...

“在 7.18.0 之前,curl 捆绑了一个严重过时的 ca 捆绑文件,该文件是默认安装。这些天,curl 文件中没有 ca 证书全部。你需要把它们带到别处。例如,请参见下文。

如果远程服务器使用自签名证书,如果不安装CA证书包,如果服务器使用由非 CA 签名的证书包含在您使用的 bundle 中,或者如果远程主机是冒名顶替者冒充你最喜欢的网站,你想从这个网站传输文件服务器,请执行以下操作之一:"

然后它继续列出了一些您可以尝试的步骤。

由于您的 7.16.3 版本的 curl 早于 7.18.0,如果您还没有,我建议您更新您的 curl 和 openssl 组件,然后完成上面引用的列表。

关于php - 使用带有 SSL 证书的 PHP cURL 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731117/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com