2017-10-20 9 views
1

Où pourrais-je transmettre mes certificats clients pour me connecter à une base de données PostgreSQL? Dois-je transmettre ces certificats dans les paramètres dsn ou options du constructeur PDO? Je suis incapable de trouver de la documentation en ligne. J'utilise PHP 7.0.22 sur un Ubuntu 16.04.1. J'ai le support SSL activé pour le pilote pgsql. J'ai trouvé ces constantes dans la classe PDO: PDO::MYSQL_ATTR_SSL_CA, PDO::MYSQL_ATTR_SSL_KEY et quelques autres, mais celles-ci sont évidemment pour mySQL et non PGSQL.Connexion à PGSQL via SSL via PHP PDO


EDIT

Voici une implémentation sécurisée de travail basée sur la réponse ci-dessous:

$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, 
)); 

Répondre

1

Selon les commentaires sur the PDO Postgres connection string manual, la chaîne complète de DSN est transmis directement à la fonction de la bibliothèque sous-jacente PQconnectdb . Par conséquent, vous devriez pouvoir utiliser tous les paramètres specified in the PostgreSQL documentation pour cette chaîne.

citations pertinentes: cette page:

  • sslmode: Cette option détermine si ou avec quelle priorité une connexion TCP/IP SSL sécurisée sera négocié avec le serveur. Sslcert: Ce paramètre spécifie le nom de fichier du certificat SSL client. Sslkey: Ce paramètre spécifie l'emplacement de la clé secrète utilisée pour le certificat client.

Les trois paramètres ont plus de détails sur la page liée. Notez que bien que fourni par PostgreSQL, ce code fonctionne sur le même serveur que PHP, donc les chemins seront tous chargés à partir de ce serveur, et doivent être lisibles par le processus hôte PHP.