我收到经典的php curl错误“无法获得本地颁发者证书”。 以下是curl调试的更多信息:
尝试133.7.42.21 ...
TCP_NODELAY设置
连接到example.adress.com(133.7.42.21)端口443(#0)
- ALPN,提供http / 1.1
- 密码选择:ALL:!导出:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
- 成功设置证书验证位置:
- CAfile:C:\ some_absolute_path \ cacert.pem
- CApath:无
SSL证书问题:无法获得本地颁发者证书
Curl_http_done:调用premature == 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”
现在我找不到任何可以尝试的“修复”,有人知道它可能是什么吗?