Laravel - Redis - 使用 CA 配置 TLS

问题描述 投票:0回答:1

我正在尝试在 Laravel 8.75.0 中配置 Redis 配置文件(用于缓存目的)以将 TLS 与证书颁发机构证书一起使用。目前,我的配置文件如下所示(基于此答案:https://stackoverflow.com/a/48876398/10031033):

'options' => [
        'cluster' => env('REDIS_CLUSTER', 'redis'),
        'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
        'ssl' => ['cafile' => env('REDIS_CACHE_SSL_CA', null), 'verify_peer' => env('REDIS_CACHE_SSL_VerifyCA', false)]
    ],

    'cache' => [
        'scheme' => env('REDIS_CACHE_SCHEME', 'tcp'),
        'host' => env('REDIS_CACHE_HOST', '127.0.0.1'),
        'password' => env('REDIS_CACHE_PASSWORD', null),
        'port' => env('REDIS_CACHE_PORT', 6379),
        //  'database' => env('REDIS_CACHE_DB', 1),
    ],

我确信变量可以正常工作并且连接也可以正常工作,因为以下配置可以完美地工作。

        $vm = array(
        'host'     => env('REDIS_CACHE_HOST'),
        'port'     => env('REDIS_CACHE_PORT'),
        'timeout' => 0.8, 
        'scheme' => env('REDIS_CACHE_SCHEME'),
        'ssl'    => ['cafile' => env('REDIS_CACHE_SSL_CA'), 'verify_peer' => env('REDIS_CACHE_SSL_VerifyCA')],
    );

    $redis = new Client($vm);
    $redis->auth(env('REDIS_CACHE_PASSWORD'));
    try {
        echo $redis->ping();
    } catch (\Exception $e) {
     //   dd($e);
        echo 'not';
    }

有人知道我在这里做错了什么吗?我已经尝试了几个小时,但似乎无法让它发挥作用。

谢谢你

laravel ssl redis ca
1个回答
0
投票

我正在使用 Google Cloud PHP 运行时引擎,这是我发现的最好的问题,但它不太有效。 所以我发布了对我有用的解决方案:

config/database.php

    'redis' => [

        'client' => env('REDIS_CLIENT', 'predis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'),
        ],

        'default' => [
            'url' => env('REDIS_URL', null),
            'scheme' => env('REDIS_SCHEME', 'tls'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'username' => env('REDIS_USERNAME', null),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),   // GCP is 6378 by default
            'database' => env('REDIS_DB', '0'),
            'ssl' => [
                'cafile' => base_path('certificates/mycert.pem'),
                'verify_peer' => true,
                'verify_peer_name' => false,
                'allow_self_signed' => true,
            ],
        ],

        'cache' => [
            'url' => env('REDIS_URL', null),
            'scheme' => env('REDIS_SCHEME', 'tls'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'username' => env('REDIS_USERNAME', null),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),   // GCP is 6378 by default
            'database' => env('REDIS_CACHE_DB', '1'),
            'ssl' => [
                'cafile' => base_path('certificates/mycert.pem'),
                'verify_peer' => true,
                'verify_peer_name' => false,
                'allow_self_signed' => true,
            ],
        ],

    ],

最好在环境变量中设置所有内容,但我试图简化事情。

© www.soinside.com 2019 - 2024. All rights reserved.