2017-10-20 93 views
1

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

我使用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

据对the PDO Postgres connection string manual意见,充分DSN字符串直接传递到底层库函数PQconnectdb 。因此,您应该可以使用该字符串的所有参数specified in the PostgreSQL documentation。从该页面

相关报价:

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

所有三个参数有一个链接页面上的更多细节。

注意,虽然PostgreSQL提供,这个代码是在同一台服务器上PHP所有正在运行的,所以路径都将被从该服务器装载,并且必须由PHP主机进程可读。