在sslmode中使用PostgreSQL进行Laravel

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

我正在使用AWS开发一个项目,该项目托管在带有RDS PostgreSQL的EC2实例上。我想在我的服务器和数据库之间使用SSL加密,这是AWS RDS supports,但我无法弄清楚如何配置Laravel使其工作。有没有办法在配置数据库连接时指定sslmode

postgresql laravel amazon-rds
3个回答
2
投票

这似乎是Laravel 4中缺少的功能,但我已经提交了一个拉取请求来解决这个问题。

https://github.com/laravel/framework/pull/5488(于2014-09-08合并)

要修补代码,只需将以下代码段添加到PostgresConnector.php文件中的getDsn函数即可。

if (isset($config['sslmode']))
{
    $dsn .= ";sslmode={$sslmode}";
}

之后,您可以在pgsql数据库配置部分指定sslmode = 'require',以测试Web应用程序和数据库之间的加密。 sslmode的其他可能值是'disable''allow''prefer''require''verify-ca''verify-full'。默认值为'prefer'

有关详细信息,请查看PostgreSQL文档:http://www.postgresql.org/docs/9.3/static/libpq-ssl.html


1
投票
  1. 你必须在PostgreSQL服务器上调整你的pg_hba.conf
  2. 生成服务器和客户端证书
  3. 将您的客户端证书存储到Laravel服务器
  4. 在config / database.php编辑pgsql部分,检查我的要点https://gist.github.com/tigusigalpa/2d1ec6e258ed96221abf9679622d274a

0
投票

将您的Laravel配置更改为官方Postgresql documentation

see this screenshot: Postgres SSL support options

将config / database.php中的postgres配置更改为

'pgsql' => [
    'driver' => 'pgsql',
    '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' => '',
    'schema' => 'public',
    'sslmode' => env('DB_SSLMODE', 'prefer'), <-- CHANGE THIS
],

并将新选项添加​​到.env文件中:

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=mytestdb
DB_USERNAME=postgres
DB_PASSWORD=secret
DB_SSLMODE=disable  <-- ADD THIS
© www.soinside.com 2019 - 2024. All rights reserved.