通过 PHP PDO 通过 SSL 连接到 PGSQL

Connecting to PGSQL over SSL via PHP PDO

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

我在 Ubuntu 16.04.1 上使用 PHP 7.0.22。我为 pgsql 驱动程序启用了 SSL 支持。我确实在 PDO class 中找到了这些常量: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,
  ));

根据对该字符串的 the PDO Postgres connection string manual, the full DSN string is passed directly to the underlying library function PQconnectdb. Consequently, you should be able to use all the parameters specified in the PostgreSQL documentation 的评论。

该页面的相关引述:

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

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

请注意,虽然由 PostgreSQL 提供,但此代码全部 运行 与 PHP 在同一台服务器上,因此路径将从该服务器加载,并且需要可读PHP 主机进程。