PHP Laravel cURL SSL证书问题:无法获取本地颁发者证书

3

在我用Laravel写的项目中,有一个从服务器获取数字值的方法:

public static function getAddressApiBalance()
    {
        try {
            $uri = "https://btczexplorer.blockhub.info/ext/getbalance/t1ZYiG4R4n5gTgUKZRgVpKPzG5FYQXpEqga";

            $response = Http::get($uri);

            return $response;
...

当我调用这段代码时,浏览器会报错:
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
4个回答

4
您可以禁用SSL验证(不推荐,但便于开发):

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

或使用 Guzzle :
$client = new Client(['verify' => false]);

或者您可以下载一个 cacert.pem 文件:
https://curl.haxx.se/ca/cacert.pem

并编辑您的php.ini文件,将cacert的路径添加进去:

openssl.cafile=/etc/ssl/cacert.pem

2

1
请更新此内容,不仅包括链接,还要说明如何将其应用于问题的背景中。 - Joshua

2
在 Laravel 8 中,你可以使用 Http API,该 API 更加简单易用,并且在后台仍然使用 Guzzle HTTP 客户端。如果需要,在这种情况下,你可以通过以下方式禁用证书验证:
$client = Http::withOptions([
            'debug' => true,
            'verify' => false,
        ])
        ->get('https://btczexplorer.blockhub.info/ext/getbalance/t1ZYiG4R4n5gTgUKZRgVpKPzG5FYQXpEqga', [
            'parameter1' => '1234567',
            'parameter2' =>'890',
        ]);

当然,debug选项并非必需以禁用SSL检查,但它有助于测试。此外,parameters仅是为了展示如何将它们添加到请求中。

-2

你有三种解决该问题的方法(我知道的三种):
1 -> 下载证书文件(https://curl.haxx.se/ca/cacert.pem),并将其移动到您的php文件中。在此之后,编辑您的php.ini以使用该证书文件。
2 -> 在您的请求中使用verify选项来禁用ssl验证

Http::withOptions([
            'verify' => false,
        ])...

3 -> 找到 Guzzle Client 文件夹以禁用所有请求的 SSL
文件位置: \vendor\guzzlehttp\guzzle\src\Client.php
函数: configureDefaults

$defaults = [
            'allow_redirects' => RedirectMiddleware::$defaultSettings,
            'http_errors'     => true,
            'decode_content'  => true,
            'verify'          => app()->env == "local" ? false : true,
            'cookies'         => false,
            'idn_conversion'  => true,
        ];

通常情况下,默认值为verify => true。如果您只想在本地编辑它,可以像我一样使用它,或者您想要禁用所有内容,可以按照以下方式使用。
$defaults = [
...
         'verify' => false,
...
]

永远不要更改供应商文件夹的内容。 - Ramon Bakker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接