【问题标题】:Can't change location that Laravel looks for PostgreSQL SSL certificate无法更改 Laravel 查找 PostgreSQL SSL 证书的位置
【发布时间】:2019-10-08 21:13:37
【问题描述】:

我已经安装了 pgsql 并设置了我的 Laravel config/database.php 如下:

'connection_name' => [
    'driver' => 'pgsql',
    'host' => env('DB_HOST_2', '127.0.0.1'),
    'port' => env('DB_PORT_2', '3306'),
    'database' => env('DB_DATABASE_2'),
    'username' => env('DB_USERNAME_2'),
    'password' => env('DB_PASSWORD_2', ''),
    'sslmode' => env('DB_SSLMODE_2'),
    'charset' => 'utf8',
    'prefix' => '',
    'options' => [
        'sslcert' => '/some/special/path.crt',
    ],
    'schema' => 'public',
],

“connection_name”位于database.php 的“connections”部分。

在 artisan tinker 中,我收到以下错误,因为它仍在寻找 SSL 证书的默认位置。我无法让它在正确的位置查找证书。

>>> use Illuminate\Support\Facades\DB;
>>> DB::connection('connection_name')->getPdo()
Doctrine\DBAL\Driver\PDOException with message 'SQLSTATE[08006] [7] root certificate file "/home/wes/.postgresql/root.crt" does not exist
Either provide the file or change sslmode to disable server certificate verification.'

【问题讨论】:

  • 为什么 ssl(root)cert 在 'options' 中?这是来自文档还是一些教程?我不使用 laravel,但我希望 sslmode 和 sslrootcert 是对等的,而不是在不同的级别。
  • 我尝试将这些选项放在兄弟级别,但我看到 Laracasts 上有人建议 Postgres 的正确方法是将它们放在一个“选项”子级中。

标签: php laravel postgresql ssl


【解决方案1】:

根证书由“sslrootcert”设置。这是签署服务器证书的证书。

"sslcert" 设置客户端证书。那是不同的东西。

【讨论】:

  • 我试过了。我尝试了“sslcert”、“sslrootcert”和“PGSSLCERT”。无论我做什么,它仍然会尝试从 ~/.postgresql/root.crt 获取证书。
【解决方案2】:

这是一个很老的问题,但我今天遇到了这个问题。我的解决方案是结合 jjanes 的回答和评论。我必须将变量设置为更高级别,并且还要更改为“sslrootcert”

       'pgsql' => [
           'driver' => 'pgsql',
           'url' => env('DATABASE_URL'),
           'host' => env('DB_HOST', '127.0.0.1'),
           'port' => env('DB_PORT', '5432'),
           'database' => env('DB_DATABASE', 'forge'),
           'username' => env('DB_USERNAME', 'forge'),
           'password' => env('DB_PASSWORD', ''),
           'charset' => 'utf8',
           'prefix' => '',
           'prefix_indexes' => true,
           'search_path' => 'public',
           'sslmode' => env('SSL_MODE'),        <-- this says "verify-ca"
           'sslrootcert' => env('PGSQL_SSL_CA') <-- this is fullpath
       ],

当我在 Digital Ocean 上的 PGSQL 托管数据库上使用 php artisan migrate 时,这很有效。

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多