Załóżmy, że działa serwer PostgreSQL i ma włączony protokół SSL. Jak mogę sprawdzić certyfikat SSL za pomocą „standardowych” narzędzi Linux i PostgreSQL?
Mam nadzieję, że dane wyjściowe będą podobne do tych, które można uzyskać po uruchomieniu openssl x509 -text ...
. Mam nadzieję na jedno- lub dwuliniową odpowiedź w wierszu poleceń, więc nie muszę uciekać się do uruchamiania sniffera pakietów.
Nie mam dostępu do serwera PostgreSQL, więc nie mogę bezpośrednio przeglądać jego plików konfiguracyjnych.
Nie mam loginu superużytkownika, więc nie mogę uzyskać wartości ssl_cert_file
ustawienia, a następnie pg_read_file
go włączyć .
Korzystanie openssl s_client -connect ...
nie działa, ponieważ PostgreSQL nie chce od razu wykonać uzgadniania SSL.
Po szybkim spojrzeniu na psql
dokumentację nie mogłem znaleźć parametru wiersza polecenia, który wyświetlałby te informacje podczas uruchamiania. (Chociaż pokazuje mi pewne informacje o szyfrach).
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);
Jeśli nie chcesz zawracać sobie głowy instalowaniem Java i kompilacją, a masz już Pythona, możesz wypróbować ten skrypt Pythona: https://github.com/thusoy/postgres-mitm/blob/master/postgres_get_server_cert.py
Używam go do sprawdzania dat certyfikatów:
Lub dla pełnego certyfikatu jako tekst:
źródło
curl https://raw.githubusercontent.com/thusoy/postgres-mitm/master/postgres_get_server_cert.py | python - example.com:5432
(ale upewnij się, co zrobisz w ten sposób !!)Odpowiedź csd naprawdę mnie uratowała. Oto bardziej szczegółowy przewodnik dla tych z nas, którzy nie znają Java lub zapomnieli o niej.
Upewnij się, że Twój serwer może skompilować Java. Spróbuj wykonać polecenie „który javac”, jeśli wyświetla coś takiego jak „... brak javac w ...”, to musisz zainstalować JDK (JRE nie będzie działać, ma on „java”, ale nie „javac”).
Zainstaluj postgresql-jdbc, jeśli jeszcze go nie masz. W przypadku RHEL6 polecenie brzmi „yum install postgresql-jdbc”. Dowiedz się, gdzie są zainstalowane pliki jar. Będzie ich kilka, po jednej dla każdej wersji. Użyłem „/usr/share/java/postgresql-jdbc3.jar”.
Skopiuj kod csd i wstaw informacje o bazie danych (druga odpowiedź) lub użyj mojej nieco zmodyfikowanej wersji na końcu tej odpowiedzi. Zapisz go w pliku o nazwie „ShowPostgreSQLCert.java”. Duże / małe litery mają znaczenie, nazwij to jakikolwiek inny, a to się nie skompiluje.
W katalogu z plikiem ShowPostgreSQLCert.java uruchom następującą komendę (w razie potrzeby zmień położenie postgresql-jdbc3.jar): „javac -cp /usr/share/java/postgresql-jdbc3.jar ShowPostgreSQLCert.java”. Powinieneś teraz mieć 3 pliki .class w tym samym katalogu.
Na koniec uruchom następującą komendę: „java -cp.: / Usr / share / java / postgresql-jdbc3.jar ShowPostgreSQLCert”. „.” po „-cp” oznacza, że powinien szukać w bieżącym katalogu plików .class. Tutaj możesz wstawić pełną ścieżkę do plików klas, pamiętaj tylko, aby zachować „:” między ścieżką a lokalizacją pliku .jar.
Jeśli chcesz uruchomić polecenie na innym komputerze, musisz mieć zainstalowany ten sam plik jar (postgresql-jdbc3.jar), lub prawdopodobnie możesz go po prostu skopiować z serwera, na którym skompilowałeś pliki .class. Następnie po prostu skopiuj pliki .class i uruchom polecenie z 5. po zmodyfikowaniu ścieżek.
Lekko zmodyfikowałem kod, abyś mógł przekazywać informacje z bazy danych w wierszu poleceń zamiast kompilować je w pliku .class. Po prostu uruchom go bez żadnych argumentów, a wyświetli się komunikat, którego argumentów oczekuje. Kod csd + modyfikacje to:
źródło
Dodałem trochę kodu z /programming/3313020/write-x509-certificate-into-pem-formatted-string-in-java, aby wyprowadzić certyfikaty jako PEM, i usunąłem potrzebę określania db, nazwa użytkownika lub hasło (nie są potrzebne do uzyskania certyfikatu).
Dzięki temu mogłem sprawdzić, czy ponowne uruchomienie PostgreSQL wydaje się niestety konieczne, aby przełączyć się na nowy certyfikat.
Nie będąc programistą Java, moje kroki, aby zbudować i uruchomić, prawdopodobnie nie są tak świetne, ale działają, o ile można znaleźć postgresql jdbc
Kompilować:
Biegać:
Przykładowe dane wyjściowe:
Źródło:
źródło