我可以在哪里传递客户端证书以连接到 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,
));
Run Code Online (Sandbox Code Playgroud)
根据PDO Postgres 连接字符串手册的注释,完整的 DSN 字符串直接传递到底层库函数PQconnectdb。因此,您应该能够使用PostgreSQL 文档中为该字符串指定的所有参数。
该页面的相关引用:
所有三个参数在链接的页面上都有更多详细信息。
请注意,虽然由 PostgreSQL 提供,但此代码都与 PHP 运行在同一台服务器上,因此路径都将从该服务器加载,并且需要可由 PHP 主机进程读取。