通过 PHP PDO 连接使用 SSL 到 PGSQL

4
我应该在哪里传递客户端证书以连接到PostgreSQL数据库?我需要将这些证书传递给PDO构造函数中的dsn或options参数吗?我在网上找不到任何文档。
我在Ubuntu 16.04.1上使用PHP 7.0.22。 我已启用了pgsql驱动程序的SSL支持。 我在PDO类中发现了这些常量:PDO :: MYSQL_ATTR_SSL_CA,PDO :: 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个回答

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

来自该页面的相关引用:

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接