我在Windows 7上运行PHP Version 5.6.3作为XAMPP的一部分。
当我尝试使用Mandrill API时,我得到以下错误:
未捕获的异常“Mandrill_HttpError”与消息“API调用消息/发送模板失败:SSL证书问题:无法获得本地颁发者证书”
我已经尝试了我在StackOverflow上读到的所有内容,包括将以下内容添加到php.ini文件:
curl.cainfo = "C:\xampp\php\cacert.pem"
当然也下载到了cacert。来自http://curl.haxx.se/docs/caextract.html的Pem文件
但是在这之后,重新启动XAMPP和Apache服务器,但仍然得到相同的错误。
我真的不知道还能试什么。
有没有人能建议我还能尝试些什么?
如果你不能访问php.ini,添加这段代码(在$ch = curl_init();行)适合我:
$certificate_location = "C:\Program Files (x86)\EasyPHP-Devserver-16.1\ca-bundle.crt"; // modify this line accordingly (may need to be absolute)
curl_setopt($ch, CURLOPT_CAINFO, $certificate_location);
curl_setopt($ch, CURLOPT_CAPATH, $certificate_location);
然后,您只需要下载ca-bundle。CRT并保存到您在$certificate_location中指定的位置。
注意:关闭SSL验证功能存在安全影响。如果不验证SSL/HTTPS连接的真实性,恶意攻击者可以模拟可信端点(如GitHub或其他远程Git主机),您将容易受到中间人攻击。
在使用此解决方案之前,请确保您完全理解安全问题。
详细阐述了服务器部署的上述答案。
$hostname = gethostname();
if($hostname=="mydevpc")
{
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
应该在部署时不影响服务器的情况下完成开发环境的技巧。
我在本地系统中遇到过类似的问题,但在活动服务器中没有。我还提到了另一个解决方案在此页之前,但这是不工作在本地主机。所以找到一个新的解决方案,这是在本地主机wamp服务器工作。
cURL错误#:SSL证书问题:无法获得本地颁发者
证书
有时系统无法找到您的cacert。Pem在你的硬盘里。所以你可以在你要使用CURL的代码中定义它
请注意,我正在为此满足所有条件,如OPEN-SSL库活动和其他事情。
检查CURL的代码。
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL =>$url,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER=> true,
));
curl_setopt($curl, CURLOPT_CAINFO, "f:/wamp/bin/cacert.pem"); // <------
curl_setopt($curl, CURLOPT_CAPATH, "f:/wamp/bin/cacert.pem"); // <------
$response = json_decode(curl_exec($curl),true);
$err = curl_error($curl);
curl_close($curl);
但这种解决方案可能无法工作在现场服务器。因为cacert.pem的绝对路径
可能发生此错误的另一个原因是,如果CA包已从系统中删除(并且在CA -certificates中不再可用)。
这是GeoTrust全球CA目前的情况,该CA(除其他外)用于为用于推送通知的APNS签署苹果证书。
更多详细信息可以在错误报告中找到:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=962596
您可以手动添加GeoTrust全球CA证书在您的机器上,建议由卡洛斯阿尔贝托洛佩兹佩雷斯:
wget --no-check-certificate -c https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.pem \
&& mkdir /usr/local/share/ca-certificates/extra \
&& mv GeoTrust_Global_CA.pem /usr/local/share/ca-certificates/extra/GeoTrust_Global_CA.crt \
&& update-ca-certificates