我正在使用XAMPP进行开发。最近,我将xampp的安装从旧版本升级到1.7.3。

现在,当我卷曲启用HTTPS的网站,我得到以下例外

致命错误:未捕获的异常'RequestCore_Exception'与消息 cURL资源:资源 id # 55;cURL错误:SSL证书有问题,请验证CA证书是否OK。细节: SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败(60)'

每个人都建议从PHP代码中使用一些特定的curl选项来解决这个问题。我觉得不应该这样。因为我的旧版本XAMPP没有任何问题,只是在安装新版本后才出现问题。

我需要帮助,以确定在我的PHP安装,Apache等设置更改可以解决这个问题。


当前回答

警告:这可能会引入SSL旨在保护的安全问题,使您的整个代码库不安全。这违背了所有推荐的做法。

但一个对我来说非常简单的解决方法是打电话:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

在调用之前:

curl_exec():

在PHP文件中。

我认为这将禁用SSL证书的所有验证。

其他回答

有时,如果您试图联系的应用程序具有自签名证书,则正常的cacert。来自http://curl.haxx.se/ca/cacert.pem的Pem不能解决问题。

如果确定服务端点url,通过浏览器点击,手动保存为“X 509链式证书(PEM)”格式。指向该证书文件

curl_setopt ($ch, CURLOPT_CAINFO, "pathto/{downloaded certificate chain file}");   

您可以尝试重新安装ca-certificates包,或者像这里描述的那样显式地允许出现问题的证书。

为了一切神圣的爱…

在我的例子中,我必须设置openssl。cafile PHP配置变量到PEM文件路径。

我相信确实有很多系统可以设置旋度。在PHP的配置中的cayfo正是所需要的,但在我正在使用的环境中,这是eboraas/laravel docker容器,它使用Debian 8 (jessie)和PHP 5.6,设置这个变量并没有做到这一点。

我注意到php -i的输出没有提到任何关于特定配置设置的内容,但它确实有几行关于openssl的内容。有两个openssl。Capath和openssl。cafile选项,但只是设置第二个选项允许curl通过PHP最终可以使用HTTPS url。

上面的解决方案很好,但是如果您正在使用WampServer,您可能会发现设置curl。php.ini中的cfo变量不工作。

我最终发现WampServer有两个php.ini文件:

C:\wamp\bin\apache\Apachex.x.x\bin
C:\wamp\bin\php\phpx.x.xx

第一个显然用于通过web浏览器调用PHP文件,而第二个用于通过命令行或shell_exec()调用命令。

博士TL;

如果使用WampServer,则必须添加curl。到两个php.ini文件。

警告:这可能会引入SSL旨在保护的安全问题,使您的整个代码库不安全。这违背了所有推荐的做法。

但一个对我来说非常简单的解决方法是打电话:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

在调用之前:

curl_exec():

在PHP文件中。

我认为这将禁用SSL证书的所有验证。