如何修复 stream_socket_enable_crypto

分享于2022年07月17日 azure-redis-cache azure-web-app-service php redis ssl 问答
【问题标题】:如何修复 stream_socket_enable_crypto():SSL:握手超时(How to fix stream_socket_enable_crypto(): SSL: Handshake timed out)
【发布时间】:2022-06-20 14:53:17
【问题描述】:

我们在将 Azure 应用服务上的 Laravel 应用连接到端口 6380 上的 Azure Redis 缓存实例时遇到问题。我们不断收到以下错误。

ErrorException in StreamConnection.php line 246:
stream_socket_enable_crypto(): SSL: Handshake timed out
in StreamConnection.php line 246
at HandleExceptions->handleError('2', 'stream_socket_enable_crypto(): SSL: Handshake timed out', '/var/www/vendor/predis/predis/src/Connection/StreamConnection.php', '246', array('parameters' => object(Parameters), 'resource' => resource, 'metadata' => array('timed_out' => false, 'blocked' => true, 'eof' => false, 'stream_type' => 'tcp_socket/ssl', 'mode' => 'r+', 'unread_bytes' => '0', 'seekable' => false), 'options' => array('crypto_type' => '9')))
at stream_socket_enable_crypto(resource, true, '9') in StreamConnection.php line 246

数据库配置文件中的 Redis 代码块如下所示:

'redis' => [
        'client' => 'predis',
        'cluster' => false,

        'default' => [
            'scheme' => 'tls',
            'host' => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
            'read_write_timeout' => 0,
            // 'ssl' => [
            //     'verify_peer' => false,
            //     'verify_peer_name' => false,
            //     'allow_self_signed' => true
            // ]
            'context' => [
                // 'auth' => ['username', 'secret'],
                'stream' => [
                    'verify_peer' => true,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                    ],
            ],
        ],
        'options' => [
            'parameters' => ['password' => env('REDIS_PASSWORD', null)],
        ],

    ],

我期待有关如何解决此问题的指针/提示。提前致谢。


【解决方案1】:

由于方案类型“tls”而出现此问题。 只需删除方案类型“tls”,它就会开始工作。

注意:此解决方案仅适用于本地设置。禁用 SSL 验证具有安全隐患。如果不验证 SSL/HTTPS 连接的真实性,任何恶意攻击者都可以冒充受信任的端点,您将容易受到 Man-in-the-Middle Attack 的攻击。