完整错误
RequestException in CurlFactory.php line 187: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
方案
在有人向我指出这两个laracasts答案之前:https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate
我已经看过他们了,这就是为什么我在这里,
我遇到的问题是我现在有cacert.pem文件但是它放在哪里没有意义,答案表明将文件放在我的xampp目录中并更改我的php.ini
文件但是我没有使用xampp的任何东西,我使用laravel的工匠服务器来运行我的项目。如果没有使用xampp,那么我在哪里放置此文件&更多,那么为什么一个公认的答案是将它放在我的xampp目录中我不明白
我的确切问题
我在哪里放置cacert.pem
文件以在laravel 5.4中停止此错误?
答案 0 :(得分:53)
不要修改vendor/
文件夹中的文件。永远。它们可以并且将在您运行的下一个作曲家更新中被覆盖。
这是我的WampServer解决方案
我正在使用PHP 7.1.9作为我的WampServer,因此请将以下示例中的7.1.9
更改为您当前使用的版本号。
C:\wamp64\bin\php\php7.1.9
文件夹php.ini
并找到以下行: ;curl.cainfo
将其更改为:
curl.cainfo = "C:\wamp64\bin\php\php7.1.9\cacert.pem"
确保删除该行开头的分号。
将更改保存到php.ini
,重新启动WampServer,您就可以了!
答案 1 :(得分:6)
这很难解决,但这是使用laravel的人的确切答案并且有这个问题。
我的确切应用程序版本是......
Laravel:5.4
Guzzlehttp:6.2
Laravel Socialite:3.0
从以下链接下载此卷曲证书的新副本:https://gist.github.com/VersatilityWerks/5719158/download
将文件保存在此路径中,从laravel应用程序vendor/guzzlehttp/guzzle/src/cacert.pem
打开RequestOptions.php
并向下滚动到名为CERT
的常量并将其更改为此const CERT = 'cacert.pem';
,这应该可以解决所有问题。
修改强>
正如人们指出你永远不应该编辑供应商文件夹,这只是我在业余时间建立的应用程序的快速修复。对于我公司或其他任何应用程序而言,它并不是什么重要的事情,使用此方法需要您自担风险!请查看下面的答案
答案 2 :(得分:4)
快速解决方案,但不安全(不推荐)。
使用cURL:
将CURLOPT_SSL_VERIYPEER设为false
使用Guzzle:
将verify设置为false
示例$ client-> request('GET','https://somewebsite.com',['verify'=> false]);
答案 3 :(得分:1)
\vendor\guzzlehttp\guzzle\src\Client.php
文件进行更改的解决方案是最糟糕的建议,因为如果运行composer update
命令,对供应商文件夹的手动更改将被覆盖。php.ini
文件,则kjdion84建议的解决方案是完美的。如果您使用共享主机,则可能无法编辑php.ini
文件。 您无权访问php.ini
文件(例如共享主机)
verify
密钥添加到GuzzleHttp\Client
构造函数中,并将其值作为cacert.pem
文件的路径。使用Laravel 5.7和GuzzleHttp 6.0
// https://example.com/v1/current.json?key1=value1&key2=value2
$guzzleClient = new GuzzleHttp\Client([
'base_uri' => 'https://example.com',
'verify' => base_path('cacert.pem'),
]);
$response = $guzzleClient->get('v1/current.json', [
'query' => [
'key1' => 'value1',
'key2' => 'value2',
]
]);
$response = json_decode($response->getBody()->getContents(), true);
答案 4 :(得分:0)
另一个人最近问了同样的问题,看来我的回答是他的解决方案。 这是我提到的帖子:URL Post
这就是我所说的:
我会说实话,我对Laravel一无所知。但我有 与Symfony一样,许多其他问题也是如此。所以当你尝试的时候 很多事情没有成功。
最后,这个解决方案对我有用:URL solution
它表示可能会出现而不是证书问题 来自环境不兼容。我用XAMPP而不是 WAMP和它有效。
答案 5 :(得分:0)
我在运行Valet并尝试从valet的一个站点到另一个站点制作api时遇到此问题。 请注意,我正在OSX中工作。 我在这里找到了解决方案:https://github.com/laravel/valet/issues/460 简而言之,您必须将代客Pem复制到系统CA捆绑包。 只需运行此:
cp /usr/local/etc/openssl/cert.pem /usr/local/etc/openssl/cert.pem.bak && cat ~/.config/valet/CA/LaravelValetCASelfSigned.pem >> /usr/local/etc/openssl/cert.pem
答案 6 :(得分:0)
我正在从域 X 向 Y 发送请求,我的问题是域Y上使用的证书(不是自签名证书) ),该域属于我,并且我拥有证书,因此快速解决方案是在域X的应用程序上使用域Y的证书:
在域 X 上:
使用Laravel 7 HTTP包装器:
\Http::withOptions(['verify' => 'path-to-domain-Y-certificate']);
使用枪口:
new GuzzleHttp\Client(['verify' => 'path-to-domain-Y-certificate']);
或者您可以直接与SSL提供商联系以解决该问题。
注意:将域的证书存储在另一个系统中不是安全的方法,只有在可以确保证书安全的情况下,才使用此方法。
我还没有发现证书出了什么问题,没有浏览器似乎对此有问题,唯一的问题是使用curl在laravel上生成的。
答案 7 :(得分:0)
通过在调试设置时完全禁用 verify
解决了我的问题,因为在这种本地场景中,安全根本不是问题。
$http = new \GuzzleHttp\Client([
'base_uri' => config('services.passport.login_endpoint'),
'verify' => config('app.debug') ? false : true,
'defaults' => [
'exceptions' => false,
]
]);
答案 8 :(得分:0)
我们可以根据 Medium.com 上的这篇文章设置路径How to fix cURL error 60: SSL certificate problem
要遵循的步骤:
答案 9 :(得分:0)
您需要在vendor/guzzlehttp/guzzle/src/Client.php
$defaults = [
'allow_redirects' => RedirectMiddleware::$defaultSettings,
'http_errors' => true,
'decode_content' => true,
'verify' => false, // By default this value will be true
'cookies' => false
];
可能存在安全问题,但它会起作用。
答案 10 :(得分:0)
您可以使用GuzzleHttp\Client
:
$client = new Client(['verify' => false]);
答案 11 :(得分:-2)
对于Laravel:以下5个步骤将有所帮助
Guzzlehttp: 5.2
\vendor\guzzlehttp\guzzle\src\Client.php
将默认设置编辑为
protected function getDefaultOptions(){ $ settings = [ 'allow_redirects'=>真正, 'exceptions'=>真正, 'decode_content'=>真正, 'verify'=> getcwd()。'/ vendor / guzzlehttp / guzzle / src / cacert.pem' ]。 }
从http://curl.haxx.se/ca/cacert.pem
下载最新文件cacert.pem并置于/vendor/guzzlehttp/guzzle/src/