Ubuntu php 7.2 Laravel cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书,请参阅 http://curl.haxx.se [英] Ubuntu php 7.2 Laravel cURL error 60: SSL certificate problem: unable to get local issuer certificate see http://curl.haxx.se

查看:40
本文介绍了Ubuntu php 7.2 Laravel cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书,请参阅 http://curl.haxx.se的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Ubuntu 上安装了带有 PHP 7.2 的 Laravel.我想从网站下载比特币价格:

I have Laravel with PHP 7.2 on Ubuntu. I want to download bitcoin price from website:

https://btczexplorer.blockhub.info/ext/getbalance/t1ZYiG4R4n5gTgUKZRgVpKPzG5FYQXpEqga

在服务器上出现错误:

cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

我在互联网上发现我必须安装证书.所以我做到了:

I've found in the Internet that I have to install certificate. So I did:

root@server-1456254-1:/etc/ssl/certs# sudo wget http://curl.haxx.se/ca/cacert.pem
root@server-1456254-1:/etc/php/7.2/apache2# nano php.ini
in php.ini:
openssl.cafile=/etc/ssl/certs/cacert.pem
root@server-1456254-1:/etc/php/7.2/apache2# /etc/init.d/apache2 restart

但是错误依旧.怎么了?

But the error still occurs. What is wrong?

--在 Laravel 的 php 文件中调用了上述 btczexplorer 的 url:

-- Above url to btczexplorer is called in php file in Laravel:

public function blockNotify($blockId)
    {

        try {

            $response = Rate::getAddressApiBalance('t1ZYiG4R4n5gTgUKZRgVpKPzG5FYQXpEqga');


            return $response;

        }catch (\Exception $e) {
            return $e->getMessage() . ' stack trace: ' . $e->getTraceAsString();
        }

        return "end";

和评分文件:

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

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

            return $response;
        } catch (InvalidArgumentException $exception){
            return 3;
            Log::error($exception);
        } catch (Exception $e) {
            return $e->getMessage();
            Log::error($e);
        }

        return 0;
    }

在网站上我有证书错误.

and on website I have error with certificate.

为什么我使用本地或 CA?我在互联网上找到了这个解决方案.

Why I use local or CA? I've found this solution in the Internet.

使用 file_get_contents 我们有同样的错误:

using file_get_contents we have the same error:

结果相同:file_get_contents(): SSL operation failed with code 1. OpenSSL 错误消息:error:1416F086:SSLroutines:tls_process_server_certificate:certificate verify failed stack trace:#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'file_get_conten...', '/var/www/html/b...', 43, Array) #1/var/www/html/bitpay/app/Http/Controllers/BlockApiController.php(43): file_get_contents('https://btczexp...') #2 [内部函数]:App\Http\Controllers\BlockApiController->blockNotify('00000051507a8ce...') #3/var/www/html/bitpay/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array,Array) #4/var/www/html/bitpay/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('blockNotify', Array) #5

Result the same: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed stack trace: #0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'file_get_conten...', '/var/www/html/b...', 43, Array) #1 /var/www/html/bitpay/app/Http/Controllers/BlockApiController.php(43): file_get_contents('https://btczexp...') #2 [internal function]: App\Http\Controllers\BlockApiController->blockNotify('00000051507a8ce...') #3 /var/www/html/bitpay/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array) #4 /var/www/html/bitpay/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('blockNotify', Array) #5

也许会有帮助命令 var_dump(openssl_get_cert_locations()) 显示:

maybe it will be helpful command var_dump(openssl_get_cert_locations()) display:

 array(8) { ["default_cert_file"]=> string(21) "/usr/lib/ssl/cert.pem" ["default_cert_file_env"]=> string(13) "SSL_CERT_FILE" ["default_cert_dir"]=> string(18) "/usr/lib/ssl/certs" ["default_cert_dir_env"]=> string(12) "SSL_CERT_DIR" ["default_private_dir"]=> string(20) "/usr/lib/ssl/private" ["default_default_cert_area"]=> string(12) "/usr/lib/ssl" ["ini_cafile"]=> string(25) "/etc/ssl/certs/cacert.pem" ["ini_capath"]=> string(0) "" }

所以我改变了证书的 php.ini 路径:openssl.cafile=/usr/lib/ssl/certs/cacert.pem但没有结果

so I've changed in php.ini path of the cert: openssl.cafile=/usr/lib/ssl/certs/cacert.pem but without result

现在我已将代码更改为纯 guzzle 客户端:

now I've changed my code to pure guzzle client:

$url = 'https://btczexplorer.blockhub.info/ext/getbalance/t1ZYiG4R4n5gTgUKZRgVpKPzG5FYQXpEqga'; 
$http = new Client(['verify' => '/usr/lib/ssl/certs/cacert.pem']);
$options = [];
$response = $http->request('GET', $url, $options);

我得到同样的错误:

cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) stack trace: #0 /var/www/html/bitpay/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(149): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array) #1 /var/www/html/bitpay/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(102): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory)) #2

推荐答案

我认为是查找证书的 curl 问题.

I think is a curl problem to find the certificates.

所以尝试在php.ini中修改这个选项(需要绝对路径):

So try to change in php.ini this option (it requires an absolute path):

curl.cainfo = "/etc/ssl/certs/cacert.pem"

这篇关于Ubuntu php 7.2 Laravel cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书,请参阅 http://curl.haxx.se的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆