Laravel-Predis SSL issues - stream_socket_enable_crypto() fails after moving to a newer version of Ubuntu

232 views Asked by At

We have a service running a Laravel app on an EC2 server with an ubuntu 18.04 image on it. We're trying to upgrade the OS to Ubuntu 22.04. Laravel version is 5.3, PHP version is 7.1.

After installing the necessary software and pre-requisits just like we do on our current server, connecting to our redis cluster fails with this error:

[ErrorException]
stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:0A0C0103:SSL routines::internal error:

and in the laravel.log file:

[2023-06-25 13:02:01] production.ERROR: ErrorException: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:0A0C0103:SSL routines::internal error in /home/ubuntu/app/vendor/predis/predis/src/Connection/StreamConnection.php:246
Stack trace:
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'stream_socket_e...', '/home/ubuntu/ve...', 246, Array)
#1 /home/ubuntu/app/vendor/predis/predis/src/Connection/StreamConnection.php(246): stream_socket_enable_crypto(Resource id #520, true, 9)
#2 /home/ubuntu/app/vendor/predis/predis/src/Connection/StreamConnection.php(107): Predis\Connection\StreamConnection->tlsStreamInitializer(Object(Predis\Connection\Parameters))
#3 /home/ubuntu/app/vendor/predis/predis/src/Connection/AbstractConnection.php(81): Predis\Connection\StreamConnection->createResource()
#4 /home/ubuntu/app/vendor/predis/predis/src/Connection/StreamConnection.php(258): Predis\Connection\AbstractConnection->connect()
#5 /home/ubuntu/app/vendor/predis/predis/src/Connection/AbstractConnection.php(157): Predis\Connection\StreamConnection->connect()
#6 /home/ubuntu/app/vendor/predis/predis/src/Connection/StreamConnection.php(288): Predis\Connection\AbstractConnection->getResource()
#7 /home/ubuntu/app/vendor/predis/predis/src/Connection/StreamConnection.php(395): Predis\Connection\StreamConnection->write('*2\r\n$3\r\nGET\r\n$3...')
#8 /home/ubuntu/app/vendor/predis/predis/src/Connection/AbstractConnection.php(110): Predis\Connection\StreamConnection->writeRequest(Object(Predis\Command\Redis\GET))
#9 /home/ubuntu/app/vendor/predis/predis/src/Client.php(341): Predis\Connection\AbstractConnection->executeCommand(Object(Predis\Command\Redis\GET))
#10 /home/ubuntu/app/vendor/predis/predis/src/Client.php(324): Predis\Client->executeCommand(Object(Predis\Command\Redis\GET))
#11 /home/ubuntu/app/app/Containers/RedisReplica.php(23): Predis\Client->__call('get', Array)
#12 /home/ubuntu/app/bootstrap/cache/compiled.php(6468): App\Containers\RedisReplica->get('pricing_checked...')
#13 /home/ubuntu/app/app/Helpers/CacheHelper.php(171): Illuminate\Support\Facades\Facade::__callStatic('get', Array)
#14 /home/ubuntu/app/app/Console/Commands/Tests/TestCommand.php(920): App\Helpers\CacheHelper::getPricingCheckedForListing(1)
#15 /home/ubuntu/app/app/Console/Commands/Tests/TestCommand.php(135): App\Console\Commands\Tests\TestCommand->cacheReplica()
#16 [internal function]: App\Console\Commands\Tests\TestCommand->handle()
#17 /home/ubuntu/app/bootstrap/cache/compiled.php(1375): call_user_func_array(Array, Array)
#18 /home/ubuntu/app/vendor/laravel/framework/src/Illuminate/Console/Command.php(169): Illuminate\Container\Container->call(Array)
#19 /home/ubuntu/app/vendor/symfony/console/Command/Command.php(261): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#20 /home/ubuntu/app/vendor/laravel/framework/src/Illuminate/Console/Command.php(155): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 /home/ubuntu/app/vendor/symfony/console/Application.php(817): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 /home/ubuntu/app/vendor/symfony/console/Application.php(185): Symfony\Component\Console\Application->doRunCommand(Object(App\Console\Commands\Tests\TestCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#23 /home/ubuntu/app/vendor/symfony/console/Application.php(116): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#24 /home/ubuntu/app/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(121): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#25 /home/ubuntu/app/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#26 {main}

Our configuration is pretty basic:

'redis' => [

    'cluster' => env('REDIS_CLUSTER', false),

    'default' => [
        'scheme'   => env('REDIS_SCHEME','tls'),
        'host'     => env('REDIS_HOST', 'somehost'),
        'port'     => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DATABASE', 0),
        'password' => env('REDIS_PASSWORD', 'somepassword')
    ],

    'replica' => [
        'scheme' => env('REDIS_SCHEME','tls'),
        'host'     => env('REDIS_HOST_REPLICA', 'somehost'),
        'port'     => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DATABASE', 0),
        'password' => env('REDIS_PASSWORD', 'somepassword')
    ],

    'options' => [
        'parameters' => ['password' => env('REDIS_PASSWORD', null)],
        'ssl'    => ['verify_peer' => false],
    ]
    
],

I can't really make heads or tails here. Obviously we're using pretty old versions of these tools, sure, but how does this create an issue like that? All I can find online is people facing this issue when using their mail service, but nothing about predis. help

0

There are 0 answers