2017-10-20 135 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主機進程可讀。