在sslmode中使用PostgreSQL进行Laravel

时间:2014-08-12 19:46:20

标签: postgresql laravel amazon-rds

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

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:0)

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