Supposons qu'un serveur PostgreSQL soit en cours d'exécution et que SSL soit activé. En utilisant les outils Linux et PostgreSQL "standard", comment puis-je examiner son certificat SSL?
J'espère une sortie similaire à ce que vous obtiendriez en cours d'exécution openssl x509 -text ...
. Et j'espère une réponse en ligne de commande à une ou deux lignes pour ne pas avoir à utiliser un renifleur de paquets.
Je n'ai pas accès au serveur PostgreSQL, donc je ne peux pas regarder directement ses fichiers de configuration.
Je n'ai pas de connexion de superutilisateur, donc je ne peux pas obtenir la valeur du ssl_cert_file
paramètre et ensuite pg_read_file
dessus.
L'utilisation openssl s_client -connect ...
ne fonctionne pas car PostgreSQL ne semble pas vouloir faire immédiatement la prise de contact SSL.
D'un rapide coup d'œil à la psql
documentation, je n'ai pas pu trouver un paramètre de ligne de commande qui le fasse afficher ces informations au démarrage. (Bien qu'il me montre certaines informations chiffrées.)
String connectionURL = "jdbc:postgresql://server:62013/dbname"; Properties props = new Properties(); props.setProperty("user", "username"); props.setProperty("password", "password"); props.setProperty("ssl", "true"); props.setProperty("sslfactory", DumperFactory.class.getName()); Connection con = null; // Load the Driver class. Class.forName("org.postgresql.Driver"); con = DriverManager.getConnection(connectionURL, props);
Si vous ne voulez pas vous soucier d'installer java et de compiler, et que vous avez déjà python, vous pouvez essayer ce script python: https://github.com/thusoy/postgres-mitm/blob/master/postgres_get_server_cert.py
Je l'utilise pour vérifier les dates de certificats:
Ou pour le certificat complet sous forme de texte:
la source
curl https://raw.githubusercontent.com/thusoy/postgres-mitm/master/postgres_get_server_cert.py | python - example.com:5432
(mais assurez-vous de ce que vous exécutez de cette façon !!)La réponse de CSD m'a vraiment sauvé. Voici une procédure plus détaillée pour ceux d'entre nous qui ne connaissent pas ou ont oublié Java.
Assurez-vous que votre serveur peut compiler java. Essayez la commande "which javac", si elle génère quelque chose comme "... no javac in ...", alors vous devez installer un JDK (JRE ne fonctionnera pas, il a "java" mais pas "javac").
Installez postgresql-jdbc si vous ne l'avez pas déjà. Pour RHEL6, la commande est "yum install postgresql-jdbc". Déterminez où les fichiers jar sont installés. Il y en aura plusieurs, un pour chaque version. J'ai utilisé "/usr/share/java/postgresql-jdbc3.jar".
Copiez le code csd et insérez les informations de la base de données (l'autre réponse), ou utilisez ma version légèrement modifiée à la fin de cette réponse. Enregistrez-le dans un fichier appelé exactement "ShowPostgreSQLCert.java". Questions majuscules / minuscules, appelez-le n'importe quoi d'autre et il ne sera pas compilé.
Dans le répertoire contenant le fichier ShowPostgreSQLCert.java, exécutez la commande suivante (modifiez l'emplacement de postgresql-jdbc3.jar si nécessaire): "javac -cp /usr/share/java/postgresql-jdbc3.jar ShowPostgreSQLCert.java". Vous devriez maintenant avoir 3 fichiers .class dans le même répertoire.
Enfin, exécutez la commande suivante: "java -cp.: / Usr / share / java / postgresql-jdbc3.jar ShowPostgreSQLCert". Le "." après "-cp" signifie qu'il devrait chercher dans le répertoire courant les fichiers .class. Vous pouvez insérer le chemin d'accès complet aux fichiers de classe ici, n'oubliez pas de garder le ":" entre le chemin et l'emplacement du fichier .jar.
Si vous devez exécuter la commande sur une autre machine, vous devez avoir le même fichier jar installé (postgresql-jdbc3.jar), ou vous pouvez probablement le copier à partir du serveur sur lequel vous avez compilé les fichiers .class. Ensuite, copiez simplement les fichiers .class et exécutez la commande à partir de 5. après avoir modifié les chemins.
J'ai légèrement modifié le code afin que vous puissiez transmettre des informations de base de données sur la ligne de commande au lieu de les compiler dans le fichier .class. Il suffit de l'exécuter sans aucun argument et il affichera un message indiquant les arguments qu'il attend. Le code + modifications de csd est:
la source
J'ai ajouté du code à partir de /programming/3313020/write-x509-certificate-into-pem-formatted-string-in-java pour sortir les certificats en tant que PEM, et supprimé la nécessité de spécifier une base de données, nom d'utilisateur ou mot de passe (ils ne sont pas nécessaires pour obtenir le certificat).
Grâce à cela, j'ai pu vérifier qu'un redémarrage de PostgreSQL ne semble malheureusement pas nécessaire pour passer à un nouveau certificat.
N'étant pas développeur Java, mes étapes de construction et d'exécution ne sont probablement pas si bonnes, mais elles fonctionnent, tant que vous pouvez trouver un jdbc postgresql
Compiler:
Courir:
Exemple de sortie:
La source:
la source