Establishing SSL Connection to PostgreSQL DB Server
Ketika berusaha menjaga informasi dalam database PostgreSQL Anda tetap aman, hal pertama yang perlu Anda lakukan adalah mengenkripsi semua koneksi untuk melindungi kredensial otentikasi (username / password) dan data yang disimpan dari penyadapan. Panduan ini dimaksudkan untuk membantu Anda dalam membangun koneksi SSL yang aman ke container PostgreSQL Anda yang di-host di platform.
Di bawah ini, kami akan mengeksplorasi penyesuaian server database yang tepat, diperlukan untuk pengaktifan SSL, dan pembuatan sertifikat untuk itu. Kemudian, kami akan membuat dan menambahkan sertifikat untuk mesin klien, dan akhirnya, akan membangun koneksi aman ke server kami melalui alat pgAdmin. Jadi, mari kita mulai!
PostgreSQL Server Configuration
Jelas, untuk tutorial ini, kita akan menggunakan environment dengan database PostgreSQL di dalamnya - Anda dapat dengan mudah membuatnya jika Anda belum melakukannya.
1. Untuk memulai, hubungkan ke server database Anda melalui SSH Gate.
Jika Anda belum melakukan operasi serupa sebelumnya, Anda perlu:
- menghasilkan pasangan kunci SSH
- menambahkan kunci SSH publik Anda ke dashboard
- mengakses akun Anda melalui protokol SSH
2. Sekarang, agar dapat bekerja dengan SSL, Anda perlu menambahkan tiga file berikut ke direktori server /var/lib/pgsql/data:
- server.key - kunci pribadi
- server.crt - sertifikat server
- root.crt - sertifikat root terpercaya
Dalam tutorial ini, kami secara singkat akan mempertimbangkan bagaimana Anda dapat menghasilkan mereka sendiri.
Kami tidak akan menjelaskan parameter perintah secara mendetail di sini, tetapi jika Anda ingin tahu lebih banyak, cukup rujuk ke halaman Self-Signed Custom SSL di dokumentasi kami atau periksa situs resmi OpenSSL untuk daftar lengkap tindakan yang tersedia. Anda juga dapat menggunakan sertifikat SSL kustom mirip dengan yang dijelaskan di bawah (ikuti bagian Generate a Custom SSL Certificate dari panduan terkait untuk mendapatkannya). Dalam kasus terakhir ini, Anda dapat melewatkan instruksi pembuatan dan langsung melompat ke langkah keenam instruksi ini.
Jadi, navigasikan ke folder yang disebutkan dan lanjutkan dengan langkah-langkah di bawah ini.
3. Pertama-tama, mari buat file pertama - kunci pribadi:
-
jalankan perintah berikut:
cd /var/lib/pgsql/data
openssl genrsa -des3 -out server.key 1024
Selama pembuatan server.key, Anda akan diminta untuk pass phrase - tentukan dan konfirmasi untuk menyelesaikan pembuatan.
-
Sekarang, agar dapat bekerja dengan kunci ini lebih lanjut, diperlukan untuk menghapus pass phrase yang Anda tambahkan sebelumnya. Jalankan perintah berikut untuk ini:
openssl rsa -in server.key -out server.key
Masukkan kembali pass phrase satu kali lagi untuk konfirmasi.
-
Setel izin yang sesuai dan hak kepemilikan untuk file kunci pribadi Anda dengan perintah berikut:
chmod 400 server.key
chown postgres.postgres server.key
4. Sekarang, Anda perlu membuat sertifikat server berdasarkan file server.key Anda, misalnya:
openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=US/ST=California/L=PaloAlto/O=Jelastic/CN=mysite.com/emailAddress=mail@jelastic.com'
Diperlukan untuk mengatur data pribadi Anda untuk parameter subj jika sertifikat dimaksudkan untuk digunakan dalam produksi:
- Unit: Country/State/Location/Organization/Organizational Unit (optional)
- Common Name: contoh.com/email@example.com
Anda juga dapat melewatkan parameter subj dalam perintah dan memasukkan semua argumen ini dalam mode interaktif dalam kotak pertanyaan yang terbuka secara otomatis.
5. Karena kita akan menandatangani sertifikat itu sendiri, sertifikat server yang dihasilkan dapat digunakan sebagai sertifikat root yang tepercaya juga, jadi cukup buat salinannya dengan nama yang sesuai:
cp server.crt root.crt
Sekarang, karena Anda sudah memiliki semua tiga file sertifikat, Anda dapat melanjutkan ke konfigurasi database PostgreSQL yang diperlukan untuk aktivasi dan penggunaan SSL.
6. Buka file pg_hba.conf, yang terletak dalam folder yang sama, untuk diedit dengan editor terminal yang Anda sukai (vim misalnya) atau langsung melalui dashboard.
Gantikan isi defaultnya dengan baris berikut:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv4 remote connections for authenticated users
hostssl all webadmin 0.0.0.0/0 md5 clientcert=verify-full
Jika Anda ingin bekerja dengan database sebagai pengguna selain webadmin default, ubah nilai yang sesuai dalam baris terakhir konfigurasi ke nama yang diperlukan. Dalam hal ini, Anda perlu menggunakan nama pengguna yang sama untuk semua perintah selanjutnya (kami akan menunjukkan di mana ini diperlukan). Juga, untuk versi PostgreSQL yang lebih lama (10 dan lebih rendah), Anda perlu mengganti nilai clientcert ke "md5 clientcert=1" dalam baris terakhir dari konfigurasi:
hostssl all webadmin 0.0.0.0/0 md5 clientcert=1
Simpan file yang diperbarui.
7. Untuk menyelesaikan konfigurasi, Anda perlu menerapkan beberapa perubahan lagi ke file postgresql.conf.
Arahkan ke bagian Security and Authentication (sekitar baris 80) dan aktifkan penggunaan SSL itu sendiri, dengan membatalkan komentar pada pengaturan yang sama dan mengubah nilainya menjadi " on ". Juga, tambahkan parameter baru ssl_ca_file di bawah ini:
ssl = on
ssl_ca_file = 'root.crt'
Jangan lupa untuk menyimpan perubahan ini.
8. Terakhir, restart container PostgreSQL Anda untuk menerapkan pengaturan baru:
sudo service postgresql restart
Client Certificates
Sekarang, mari buat satu set file sertifikat SSL lagi untuk instansi klien, untuk mendukung koneksi aman di kedua sisi.
1. Kembali ke jendela terminal dengan koneksi SSH ke server PostgreSQL Anda yang telah Anda operasikan selama pengaturan server (atau sambungkan kembali ke sana) - Anda akan memerlukan sertifikat server Anda untuk tindakan selanjutnya.
Begitu di dalam, buatlah kunci pribadi untuk klien (juga tanpa pass phrase, sama seperti yang dilakukan pada bagian sebelumnya), misalnya dalam direktori tmp:
openssl genrsa -des3 -out /tmp/postgresql.key 1024
openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key
2. Selanjutnya, buat sertifikat SSL untuk pengguna database PostgreSQL Anda (webadmin secara default) dan tanda tangani dengan file root.crt tepercaya di server.
openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=US/ST=California/L=PaloAlto/O=Jelastic/CN=webadmin'
openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserial
Walaupun biasanya data untuk parameter subj dapat diubah ke data pribadi Anda di sini, nama umum (Common Name /CN=) harus sama dengan nama pengguna database yang Anda tetapkan selama pembuatan sertifikat pertama dalam file konfigurasi server (webadmin dalam kasus kami).
file root.crt dan server.key harus berada di folder yang sama dengan perintah kedua dieksekusi dari; jika tidak, jalur lengkap ke mereka harus ditentukan.
3. Setelah file - postgresql.key, postgresql.crt, root.crt siap, Anda perlu memindahkannya ke folder .postgresql di mesin klien Anda (untuk itu, Anda dapat menggunakan FTP add-on atau cukup salin dan tempel isi file).
Jika direktori tersebut belum ada, buatlah dengan perintah mkdir ~/.postgresql atau perintah serupa sesuai dengan distribusi OS Anda.
Juga, jika diperlukan, Anda dapat mengatur izin baca kunci untuk pemilik saja dengan perintah chmod 0400 ~/.postgresql/postgresql.key untuk lebih meningkatkan keamanan.
Jangan lupa untuk menghapus kunci dari direktori tmp di server DB Anda setelahnya.
Establish Connection via PgAdmin
Akhirnya, setelah konfigurasi server dan klien selesai, Anda siap untuk membangun koneksi. Dalam kasus kami, kami akan menggunakan alat pgAdmin 3 sebagai contoh, jadi dapatkan aplikasi ini (atau yang lain yang Anda sukai) diinstal terlebih dahulu.
1. Untuk terhubung ke server DB melalui SSL, Anda membutuhkan public IP atau endpoint yang terlampir untuk container database PostgreSQL Anda.
Kami akan mempertimbangkan kasus terakhir - akses pengaturan environment, beralih ke bagian Endpoints dan Tambah endpoint baru dengan tombol bernama sama di bagian atas.
2. Sekarang, setelah Anda memiliki titik akses, jalankan klien pgAdmin 3 Anda dan pilih opsi New Server Registration.
Di tab Properties dari jendela yang terbuka, tentukan data berikut:
- Name - nama koneksi yang diinginkan (misalnya, ssl-to-pgsql)
- Host - titik akses yang Anda tambahkan pada langkah pertama (alamat IP publik atau URL Akses endpoint tanpa nomor port)
- Port - gunakan port default 5432 untuk IP Eksternal atau Port Publik endpoint (ditunjukkan dalam bagian bernama sama dari kolom yang sesuai)
- Username - pengguna database yang Anda tetapkan sertifikat SSL dan konfigurasi (yaitu webadmin secara default)
- Password - password pengguna yang bersangkutan (dikirim melalui email untuk webadmin atau password yang Anda tetapkan)
Sisa kolom dapat dibiarkan tidak berubah atau disesuaikan sesuai kebutuhan Anda.
3. Selanjutnya, beralih ke tab SSL dan, untuk baris bernama sama, pilih opsi require dari daftar drop-down.
Itu saja! Sertifikat yang diperlukan akan dimuat secara otomatis selama pembentukan koneksi pertama, jadi cukup klik OK untuk mulai mengelola database Anda melalui koneksi aman.
Sekarang Anda dapat menghubungkan aplikasi Anda ke database (gunakan panduan Connect to Database sebagai contoh) dan mengaktifkan konfigurasi SSL untuk proyek Anda untuk mengenkripsi data Anda saat mengambil/mentransfer.
Jika Anda menghadapi masalah saat mengkonfigurasi koneksi SSL Anda, jangan ragu untuk mengajukan permohonan bantuan kepada tim teknis kami di Stackoverflow.