Ubuntu php 7.2 Laravel cURL错误60:SSL证书问题:无法获取本地颁发者证书,请参阅http://curl.haxx.se

时间:2019-12-14 16:09:12

标签: php laravel ssl-certificate

我在Ubuntu上有Laravel和PHP 7.2。我想从网站下载比特币价格:

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)

我在Internet上发现必须安装证书。所以我做到了:

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

但是错误仍然发生。怎么了?

- 在Laravel的php文件中,调用btczexplorer的网址上方:

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;
    }

在网站上我的证书有误。

为什么要使用本地或CA?我已经在Internet上找到了这种解决方案。


使用file_get_contents,我们有相同的错误:

结果相同:file_get_contents():SSL操作失败,代码为1。OpenSSL错误消息:错误:1416F086:SSL例程:tls_process_server_certificate:证书验证失败的堆栈跟踪:#0 [内部功能]: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):照亮\ Routing \ Controller-> callAction('blockNotify',Array)#5


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

 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 但没有结果


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

$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

1 个答案:

答案 0 :(得分:0)

我认为查找证书是一个卷曲的问题。

因此,请尝试在php.ini中更改此选项(它需要绝对路径):

curl.cainfo = “/etc/ssl/certs/cacert.pem”