web-dev-qa-db-fra.com

Comment vérifier que SSL est toujours utilisé sur Postgresql 9.6

J'ai une application sensible avec le serveur d'applications et la base de données sur des machines distinctes, et dans le cas de la base de données esclave, dans des centres de données distincts.

Bien que je pense que mes postgresqls sont configurés pour toujours utiliser ssl, j'ai besoin d'un moyen de revérifier cela.

Existe-t-il un moyen simple de vérifier que toutes les connexions client sont effectivement forcées d'utiliser SSL?

4
David Simic

Les connexions non SSL peuvent être désactivées via pg_hba.conf .

Par exemple, cela peut commencer comme ceci:

# allow local connections through Unix domain sockets
local  all  all  peer

# allow non-encrypted local TCP connections with passwords
Host       all  all  127.0.0.1/32   md5
Host       all  all  ::1/128        md5

# reject any other non-encrypted TCP connection
hostnossl  all  all  0.0.0.0/0     reject
hostnossl  all  all  ::/0          reject

# other rules...

Les règles sont testées dans l'ordre et jusqu'au premier match, donc toute règle après celles-ci n'aura aucun effet lors de l'un de ces matchs.


Au moment de l'exécution, pour vérifier quelles sessions sont chiffrées, il y a pg_stat_ssl vue système (depuis PostgreSQL 9.5). Sa colonne pid fait référence à pg_stat_activity contenant les autres informations pouvant être utiles pour identifier la connexion, telles que usename, datname, client_addr..., vous pouvez donc utiliser cette requête, par exemple:

SELECT datname,usename, ssl, client_addr 
  FROM pg_stat_ssl
  JOIN pg_stat_activity
    ON pg_stat_ssl.pid = pg_stat_activity.pid;
7
Daniel Vérité

Vous pouvez consulter pg_stat_ssl pour vous assurer que les clients sont connectés via SSL. Bien que si vous pensez que pg_hba est un buggy, je ne sais pas pourquoi vous auriez plus confiance en pg_stat_ssl. Mais notez que cela ne montre que le client est connecté via SSL. Il n'y a aucun moyen de savoir à partir du serveur si le client a effectivement effectué une vérification complète sur le certificat des serveurs. (Ou bien sûr, si le client est connecté à un serveur hostile plutôt qu'au serveur correct, le bon serveur n'en sera pas conscient).

Du côté client, vous devez les configurer pour utiliser sslmode = verify-full. Pour tester que cette configuration est effective, vous pouvez temporairement saboter ~/.postgresql/root.crt en la renommant et en vous assurant que les connexions échouent. Comme une mauvaise configuration est facile à faire, il peut être plus sûr de compiler votre propre client qui ignore le paramètre de sslmode et implémente toujours la vérification complète.

0
jjanes