通过 PHP PDO 通过 SSL 连接到 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,
  ));

根据 PDO Postgres 连接字符串手册的评论,完整的 DSN 字符串直接传递给底层库函数PQconnectdb。因此,您应该能够使用该字符串的 PostgreSQL 文档中指定的所有参数。

该页面的相关引文:

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

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

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

相关内容

  • 没有找到相关文章

最新更新