Angenommen, es wird ein PostgreSQL-Server ausgeführt, auf dem SSL aktiviert ist. Wie kann ich mit "normalen" Linux- und PostgreSQL-Tools das SSL-Zertifikat überprüfen?
Ich hoffe auf eine ähnliche Ausgabe wie beim Laufen openssl x509 -text ...
. Und ich hoffe auf eine ein- oder zweizeilige Befehlszeilenantwort, damit ich nicht auf einen Paket-Sniffer zurückgreifen muss.
Ich habe keinen Zugriff auf den PostgreSQL-Server, daher kann ich die Konfigurationsdateien nicht direkt anzeigen.
Ich habe kein Superuser-Login, daher kann ich den Wert der ssl_cert_file
Einstellung nicht abrufen und dann pg_read_file
darauf zugreifen.
Die Verwendung openssl s_client -connect ...
funktioniert nicht, da PostgreSQL den SSL-Handshake nicht sofort ausführen möchte.
Bei einem kurzen Blick auf die psql
Dokumentation konnte ich keinen Befehlszeilenparameter finden, mit dem diese Informationen beim Start angezeigt werden. (Obwohl es mir bestimmte Informationen zur Chiffre anzeigt.)
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);
Wenn Sie sich nicht um die Installation von Java und das Kompilieren kümmern möchten und bereits über Python verfügen, können Sie dieses Python-Skript ausprobieren: https://github.com/thusoy/postgres-mitm/blob/master/postgres_get_server_cert.py
Ich benutze es, um Zertifikatdaten zu überprüfen:
Oder für das vollständige Zertifikat als Text:
quelle
curl https://raw.githubusercontent.com/thusoy/postgres-mitm/master/postgres_get_server_cert.py | python - example.com:5432
(Die Antwort von csd hat mich wirklich gerettet. Hier ist eine detailliertere Anleitung für diejenigen von uns, die Java nicht kennen oder vergessen haben.
Stellen Sie sicher, dass Ihr Server Java kompilieren kann. Versuchen Sie den Befehl "which javac", wenn er so etwas wie "... no javac in ..." ausgibt, müssen Sie ein JDK installieren (JRE funktioniert nicht, es hat "java", aber nicht "javac").
Installieren Sie postgresql-jdbc, falls Sie es noch nicht haben. Für RHEL6 lautet der Befehl "yum install postgresql-jdbc". Finden Sie heraus, wo die JAR-Dateien installiert sind. Es wird mehrere davon geben, eine für jede Version. Ich habe "/usr/share/java/postgresql-jdbc3.jar" verwendet.
Kopieren Sie den Code von csd und fügen Sie die Datenbankinformationen (die andere Antwort) ein oder verwenden Sie meine leicht geänderte Version am Ende dieser Antwort. Speichern Sie es in einer Datei mit dem Namen "ShowPostgreSQLCert.java". Groß- / Kleinschreibung ist wichtig, nennen Sie es etwas anderes und es wird nicht kompiliert.
Führen Sie im Verzeichnis mit der Datei ShowPostgreSQLCert.java den folgenden Befehl aus (ändern Sie den Speicherort von postgresql-jdbc3.jar, falls erforderlich): "javac -cp /usr/share/java/postgresql-jdbc3.jar ShowPostgreSQLCert.java". Sie sollten jetzt 3 .class-Dateien in demselben Verzeichnis haben.
Führen Sie abschließend den folgenden Befehl aus: "java -cp.: /Usr/share/java/postgresql-jdbc3.jar ShowPostgreSQLCert". Das "." Nach "-cp" bedeutet, dass im aktuellen Verzeichnis nach den .class-Dateien gesucht werden soll. Sie können hier den vollständigen Pfad zu den Klassendateien einfügen. Denken Sie jedoch daran, das ":" zwischen dem Pfad und dem Speicherort der JAR-Datei einzuhalten.
Wenn Sie den Befehl auf einem anderen Computer ausführen müssen, muss dieselbe JAR-Datei installiert sein (postgresql-jdbc3.jar), oder Sie können sie wahrscheinlich einfach von dem Server kopieren, auf dem Sie die .class-Dateien kompiliert haben. Kopieren Sie dann einfach die .class-Dateien und führen Sie den Befehl ab 5. aus, nachdem Sie die Pfade geändert haben.
Ich habe den Code geringfügig geändert, damit Sie Datenbankinformationen in der Befehlszeile übergeben können, anstatt sie in die .class-Datei zu kompilieren. Führen Sie es einfach ohne Argumente aus, und es wird eine Meldung mit den erwarteten Argumenten angezeigt. Der Code von csd + Modifikationen ist:
quelle
Ich habe Code von /programming/3313020/write-x509-certificate-into-pem-formatted-string-in-java hinzugefügt, um die Zertifikate als PEM auszugeben, und die Angabe einer Datenbank wurde entfernt. Benutzername oder Passwort (sie werden nicht benötigt, um das Zertifikat zu erhalten).
Auf diese Weise konnte ich feststellen, dass ein Neustart von PostgreSQL leider nicht erforderlich ist, um auf ein neues Zertifikat umzusteigen.
Da ich kein Java-Entwickler bin, sind meine Schritte zum Erstellen und Ausführen wahrscheinlich nicht so großartig, aber sie funktionieren, solange Sie eine postgresql-JDBC finden
Kompilieren:
Laufen:
Beispielausgabe:
Quelle:
quelle