Misalkan ada server PostgreSQL yang berjalan dan SSL telah diaktifkan. Menggunakan alat "standar" Linux dan PostgreSQL, bagaimana saya bisa memeriksa sertifikat SSL-nya?
Saya berharap untuk hasil yang mirip dengan apa yang akan Anda dapatkan dari menjalankan openssl x509 -text ...
. Dan saya berharap untuk jawaban baris perintah satu atau dua baris jadi saya tidak perlu menggunakan sniffer paket.
Saya tidak memiliki akses ke server PostgreSQL, jadi saya tidak dapat melihat file konfigurasinya secara langsung.
Saya tidak memiliki login pengguna super, jadi saya tidak bisa mendapatkan nilai ssl_cert_file
pengaturan dan kemudian pg_read_file
di atasnya.
Penggunaan openssl s_client -connect ...
tidak berfungsi karena PostgreSQL tampaknya tidak ingin segera melakukan handshake SSL.
Dari sekilas melihat psql
dokumentasi, saya tidak dapat menemukan parameter baris perintah yang membuatnya menunjukkan informasi itu pada startup. (Meskipun itu menunjukkan padaku informasi sandi tertentu.)
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);
Jika Anda tidak ingin repot menginstal java dan kompilasi, dan Anda sudah memiliki python, Anda dapat mencoba skrip python ini: https://github.com/thusoy/postgres-mitm/blob/master/postgres_get_server_cert.py
Saya menggunakannya untuk memeriksa tanggal sertifikat:
Atau untuk sertifikat lengkap sebagai teks:
sumber
curl https://raw.githubusercontent.com/thusoy/postgres-mitm/master/postgres_get_server_cert.py | python - example.com:5432
(tapi pastikan apa yang Anda lakukan dengan cara ini !!)Jawaban csd benar-benar menyelamatkan saya. Berikut adalah langkah-langkah lebih rinci bagi kita yang tidak tahu atau lupa java.
Pastikan server Anda dapat mengkompilasi java. Coba perintah "javac mana", jika itu output sesuatu seperti "... tidak javac di ..." maka Anda perlu menginstal JDK (JRE tidak akan berfungsi, itu memiliki "java" tetapi tidak "javac").
Instal postgresql-jdbc jika Anda belum memilikinya. Untuk RHEL6 perintahnya adalah "yum install postgresql-jdbc". Cari tahu di mana file jar diinstal. Akan ada beberapa dari mereka, satu untuk setiap versi. Saya menggunakan "/usr/share/java/postgresql-jdbc3.jar".
Salin kode csd dan masukkan informasi basis data (jawaban lain), atau gunakan versi saya yang sedikit dimodifikasi pada akhir jawaban ini. Simpan di file yang disebut persis "ShowPostgreSQLCert.java". Huruf besar / kecil, sebut saja hal lain dan tidak akan dikompilasi.
Dalam direktori dengan file ShowPostgreSQLCert.java, jalankan perintah berikut (ubah lokasi postgresql-jdbc3.jar jika diperlukan): "javac -cp /usr/share/java/postgresql-jdbc3.jar ShowPostgreSQLCert.java". Anda sekarang harus memiliki 3 file .class di direktori yang sama.
Terakhir, jalankan perintah berikut: "java -cp.: / Usr / share / java / postgresql-jdbc3.jar ShowPostgreSQLCert". "." setelah "-cp" berarti harus mencari di direktori saat ini untuk file .class. Anda dapat memasukkan path lengkap ke file kelas di sini, hanya ingat untuk menjaga ":" antara path dan lokasi file .jar.
Jika Anda perlu menjalankan perintah pada mesin lain, Anda harus menginstal file jar yang sama (postgresql-jdbc3.jar), atau Anda mungkin bisa menyalinnya dari server tempat Anda mengompilasi file .class. Kemudian cukup salin file .class ke atas dan jalankan perintah dari 5. setelah memodifikasi path.
Saya sedikit mengubah kode sehingga Anda dapat meneruskan informasi basis data pada baris perintah alih-alih mengkompilasinya ke file .class. Jalankan saja tanpa argumen dan itu akan menampilkan pesan yang menunjukkan argumen mana yang diharapkannya. kode + modifikasi csd adalah:
sumber
Saya menambahkan beberapa kode dari /programming/3313020/write-x509-certificate-into-pem-formatted-string-in-java untuk mengeluarkan sertifikat sebagai PEM, dan menghapus kebutuhan untuk menentukan db, nama pengguna atau kata sandi (mereka tidak diperlukan untuk mendapatkan sertifikat).
Dengan menggunakan ini, saya dapat memverifikasi bahwa restart PostgreSQL sayangnya tampaknya perlu untuk beralih ke sertifikat baru.
Bukan menjadi pengembang Java, langkah-langkah saya untuk membangun dan menjalankan mungkin tidak terlalu bagus, tetapi mereka bekerja, selama Anda dapat menemukan jdbc postgresql
Untuk mengkompilasi:
Untuk berlari:
Output sampel:
Sumber:
sumber