【发布时间】:2018-03-16 19:47:30
【问题描述】:
我收到经典的 php curl 错误“无法获取本地颁发者证书”。 以下是 curl 调试的更多信息:
正在尝试 133.7.42.21...
TCP_NODELAY 设置
连接到 example.adress.com (133.7.42.21) 端口 443 (#0)
- ALPN,提供 http/1.1
- 密码选择:ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
- 成功设置证书验证位置:
- CA 文件:C:\some_absolute_path\cacert.pem
- CApath:无
SSL 证书问题:无法获取本地颁发者证书
Curl_http_done: 过早调用 == 1\n* 关闭连接 0\n
如您所见,我尝试使用来自Mozilla. 的“cacert.pem”文件 我尝试了所有方法,但没有一个有效。
PHP 代码:
$curl = curl_init($location);
//set verifier from interface host
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
//set host global certificate
curl_setopt($curl, CURLOPT_CAINFO, $globla_cert);
//set certificate
curl_setopt($curl, CURLOPT_SSLCERT, $ssl_cert);
//set private key
curl_setopt($curl, CURLOPT_SSLKEY, $ssl_cert_key);
//set private key password
curl_setopt($curl, CURLOPT_SSLKEYPASSWD, $ssl_cert_password);
//set curl debug output
curl_setopt($curl, CURLOPT_VERBOSE, true);
$verbose = fopen('php://temp', 'w+');
curl_setopt($curl, CURLOPT_STDERR, $verbose);
//curl_setopt($curl, CURLINFO_HEADER_OUT, true);
//set ssl version
curl_setopt($curl, CURLOPT_SSLVERSION, 6);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT_MS, $connecttimeout);
$response = curl_exec($curl);
当我禁用 CURLOPT_SSL_VERIFYPEER 和 CURLOPT_SSL_VERIFYHOST 时,它可以在没有全局证书的情况下工作,但这是一个 NOGO
我目前正在使用 XAMPP 和 PHP 版本 7.0.15。 Apache 启用了 mod_ssl。 PHP 启用了 openssl 和 curl 扩展。
我尝试过的事情:
-
在php.ini里面设置路径:
openssl.cainfo= "C:\some_absolute_path\cacert.pem" openssl.cafile= "C:\some_absolute_path\cacert.pem" 将证书放入我使用
var_dump(openssl_get_cert_locations());获得的默认路径中 那对我来说是“C:\openssl-1.0.2j-win32\ssl”。将证书放入“C:\xampp\php”
现在我找不到可以尝试的“修复”,有人知道它可能是什么吗?
【问题讨论】:
-
试试这个seegatesite.com/…,完成后重启apache
-
这不是让我有机会在 localhost 中使用 HTTPS 吗?顺便说一句,它没有用,但感谢您的回复:(
-
检查我的解决方案是 100% 工作...stackoverflow.com/questions/28858351/…