通过PHP PDO通过SSL连接到PGSQL

时间:2017-10-20 15:56:39

标签: php pdo php-pgsql

我可以在哪里通过我的客户端证书连接到PostgreSQL数据库?我是否必须在PDO构造函数中的dsnoptions参数中传递这些证书?我无法在线找到任何文档。

我在Ubuntu 16.04.1上使用PHP 7.0.22。我为pgsql驱动程序启用了SSL支持。我确实在PDO类中找到了这些常量:PDO::MYSQL_ATTR_SSL_CAPDO::MYSQL_ATTR_SSL_KEY和其他几个常量,但这些显然适用于mySQL而不是PGSQL。

修改

以下是基于以下答案的有效安全实施方案:

$dbh = new PDO('pgsql:localhost=host;port=26257;dbname=bank;sslmode=require;sslcert=[path]/client.maxroach.crt;sslkey=[path]/client.maxroach.key;sslrootcert=[path]/ca.crt;',
    'maxroach', null, array(
      PDO::ATTR_ERRMODE          => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_EMULATE_PREPARES => true,
  ));

1 个答案:

答案 0 :(得分:2)

根据对the PDO Postgres connection string manual的评论,完整的DSN字符串将直接传递给基础库函数PQconnectdb。因此,您应该能够为该字符串使用所有参数specified in the PostgreSQL documentation

该页面的相关引文:

  • sslmode:此选项确定将与服务器协商安全SSL TCP / IP连接的优先级或优先级。
  • sslcert:此参数指定客户端SSL证书的文件名。
  • sslkey:此参数指定用于客户端证书的密钥的位置。

所有三个参数都在链接的页面上有更多详细信息。

请注意,尽管由PostgreSQL提供,但此代码都在与PHP相同的服务器上运行,因此路径将全部从该服务器加载,并且需要由PHP主机进程读取。