Topik ini menjelaskan cara terhubung ke instance ApsaraDB RDS for PostgreSQL dari klien database melalui koneksi SSL. Setelah mengonfigurasi enkripsi SSL untuk instance RDS, Anda dapat terhubung menggunakan pgAdmin, PostgreSQL CLI, atau Java Database Connectivity (JDBC).
Prasyarat
Fitur enkripsi SSL harus diaktifkan untuk instance RDS. Jika belum diaktifkan, ikuti instruksi dalam Konfigurasikan sertifikat cloud untuk mengaktifkan fitur enkripsi SSL atau Konfigurasikan sertifikat kustom untuk mengaktifkan fitur enkripsi SSL.
File berikut harus diperoleh:
File client.crt yang berisi sertifikat klien dan file client.key yang berisi kunci privat dari sertifikat klien: File ini wajib jika Anda telah mengonfigurasi sertifikat otoritas sertifikat (CA) klien di konsol ApsaraDB RDS. Lihat Konfigurasikan sertifikat CA klien pada instance ApsaraDB RDS for PostgreSQL untuk informasi lebih lanjut.
File yang berisi sertifikat CA server: Untuk informasi lebih lanjut tentang cara memperoleh file ini, lihat Konfigurasikan enkripsi SSL untuk instance ApsaraDB RDS for PostgreSQL atau Konfigurasikan sertifikat kustom pada instance ApsaraDB RDS for PostgreSQL.
Prosedur
Gunakan pgAdmin untuk terhubung ke instance RDS melalui koneksi SSL
pgAdmin adalah klien PostgreSQL yang direkomendasikan untuk terhubung ke instance RDS. Saat mengunduh paket perangkat lunak PostgreSQL dari situs resmi PostgreSQL dan menginstal PostgreSQL, pgAdmin 4 secara otomatis diunduh dan diinstal. Berikut adalah contoh penggunaan pgAdmin 4 V6.2.0 untuk terhubung ke instance RDS.
Jika tidak ingin menginstal PostgreSQL, Anda dapat mengunduh hanya pgAdmin untuk koneksi jarak jauh.
Jalankan pgAdmin 4.
CatatanJika ini pertama kalinya Anda masuk ke pgAdmin versi terbaru, tentukan kata sandi utama untuk melindungi kata sandi dan kredensial lainnya yang disimpan.
Klik kanan Servers dan pilih .

Pada tab General dari kotak dialog Register - Server, masukkan nama server tempat pgAdmin diinstal.

Klik tab Connection dan masukkan informasi yang digunakan untuk terhubung ke instance RDS.

Parameter
Deskripsi
Host name/address
Titik akhir dan port yang digunakan untuk terhubung ke instance RDS.
Jika Anda ingin terhubung ke instance RDS melalui jaringan internal, masukkan titik akhir internal dan port internal dari instance RDS.
Jika Anda ingin terhubung ke instance RDS melalui Internet, masukkan titik akhir publik dan port publik dari instance RDS.
Anda dapat melihat informasi sebelumnya pada halaman Koneksi Database dari instance RDS.
Untuk informasi lebih lanjut, lihat Lihat dan ubah titik akhir dan nomor port dari instance ApsaraDB RDS for PostgreSQL.
Port
Username
Nama pengguna dan kata sandi yang digunakan untuk masuk ke instance RDS.
Untuk informasi lebih lanjut tentang cara membuat akun pada instance RDS, lihat Buat basis data dan akun.
Password
Pada tab Parameters, konfigurasikan parameter yang diperlukan terkait mode autentikasi SSL dan sertifikat.
Parameter
Deskripsi
SSL mode
Jika enkripsi SSL diaktifkan untuk instance RDS, instance RDS mengizinkan koneksi SSL dari klien database. Anda harus mengatur parameter SSL mode berdasarkan skenario berikut:
Tidak ada daftar kontrol akses (ACL) yang dikonfigurasi untuk instance RDS. Untuk informasi lebih lanjut, lihat Konfigurasikan sertifikat CA klien pada instance ApsaraDB RDS for PostgreSQL.
Jika Anda ingin terhubung ke instance RDS dari klien database melalui SSL, atur parameter SSL mode ke Require, Verify-CA, atau Verify-Full.
Jika Anda tidak ingin terhubung ke instance RDS dari klien database melalui SSL, atur parameter SSL mode ke Disable.
ACL dikonfigurasi untuk instance RDS. Dalam kasus ini, Anda hanya dapat terhubung ke instance RDS dari klien database melalui SSL. Atur parameter SSL mode ke Require, Verify-CA, atau Verify-Full. Untuk informasi lebih lanjut, lihat Konfigurasikan sertifikat CA klien pada instance ApsaraDB RDS for PostgreSQL.
Daftar berikut menjelaskan nilai-nilai parameter Mode SSL:
Require: Klien database mengenkripsi koneksi SSL yang digunakan untuk mentransmisikan data. Namun, klien database tidak memvalidasi instance RDS.
Verify-CA: Klien database mengenkripsi koneksi SSL yang digunakan untuk mentransmisikan data dan memvalidasi instance RDS.
Verify-Full: Klien database mengenkripsi koneksi SSL yang digunakan untuk mentransmisikan data, memvalidasi instance RDS, dan memverifikasi bahwa CN atau Domain Name System (DNS) yang ditentukan dalam sertifikat server sesuai dengan titik akhir yang dikonfigurasi saat pembuatan koneksi.
Client certificate
Anda harus mengatur parameter ini jika Anda telah mengonfigurasi sertifikat klien. Parameter ini menentukan jalur penyimpanan file client.crt yang berisi sertifikat klien. Untuk informasi lebih lanjut, lihat Konfigurasikan sertifikat CA klien pada instance ApsaraDB RDS for PostgreSQL.
Client certificate key
Anda harus mengatur parameter ini jika Anda telah mengonfigurasi sertifikat klien. Parameter ini menentukan jalur penyimpanan file client.key yang berisi kunci privat dari sertifikat klien. Untuk informasi lebih lanjut, lihat Konfigurasikan sertifikat CA klien pada instance ApsaraDB RDS for PostgreSQL.
Root certificate
Anda harus mengatur parameter ini jika Anda mengatur parameter SSL mode ke Verify-CA atau Verify-Full. Parameter ini menentukan jalur penyimpanan file yang berisi sertifikat CA server.
CatatanSaat Anda menjalankan perintah sampel, Anda harus menggunakan jalur aktual ke file client.crt, client.key, dan server-ca.crt.
Anda dapat menjalankan perintah sampel untuk mengonfigurasi sertifikat kustom. Anda juga dapat mengonfigurasi sertifikat cloud. Sebagai contoh, Anda dapat mengganti
server-ca.crtdenganApsaraDB-CA-Chain.pemuntuk mengonfigurasi sertifikat cloud.
Klik Save.
Jika informasi yang dimasukkan benar, halaman seperti gambar berikut akan muncul, menunjukkan bahwa koneksi ke instance RDS berhasil.
PentingBasis data postgres adalah basis data sistem default. Hindari melakukan operasi pada basis data postgres.
Gunakan psql untuk terhubung ke instance RDS melalui SSL
Metode ini menggunakan psql untuk terhubung ke instance RDS melalui SSL. Pastikan klien PostgreSQL diinstal di komputer Anda. Untuk informasi lebih lanjut, lihat Dokumentasi PostgreSQL.
Di direktori /var/lib/pgsql, buat folder bernama .postgresql.
mkdir /var/lib/pgsql/.postgresqlSalin file berikut ke folder .postgresql:
client.crt dan client.key: File ini wajib jika Anda telah mengonfigurasi sertifikat CA klien di konsol ApsaraDB RDS. Lihat Konfigurasikan sertifikat CA klien pada instance ApsaraDB RDS for PostgreSQL untuk informasi lebih lanjut.
server-ca.crt: Untuk informasi lebih lanjut tentang cara memperoleh file ini, lihat Konfigurasikan enkripsi SSL untuk instance ApsaraDB RDS for PostgreSQL atau Konfigurasikan sertifikat kustom pada instance ApsaraDB RDS for PostgreSQL.
cp client.crt client.key server-ca.crt /var/lib/pgsql/.postgresql/CatatanSaat menjalankan perintah sampel, gunakan jalur aktual ke file client.crt, client.key, dan server-ca.crt.
Anda dapat menjalankan perintah sampel untuk mengonfigurasi sertifikat kustom atau sertifikat cloud. Sebagai contoh, ganti
server-ca.crtdenganApsaraDB-CA-Chain.pemuntuk mengonfigurasi sertifikat cloud.
Ubah izin pada folder .postgresql.
chown postgres:postgres /var/lib/pgsql/.postgresql/* chmod 600 /var/lib/pgsql/.postgresql/*Jalankan perintah berikut untuk memodifikasi file yang berisi variabel lingkungan:
vim /var/lib/pgsql/.bash_profileMasukkan
iuntuk mengaktifkan mode edit. Kemudian, tambahkan konten berikut ke file:export PGSSLCERT="/var/lib/pgsql/.postgresql/client.crt" export PGSSLKEY="/var/lib/pgsql/.postgresql/client.key" export PGSSLROOTCERT="/var/lib/pgsql/.postgresql/ca1.crt"Tekan
Escuntuk keluar dari mode edit. Masukkan:wquntuk menyimpan file dan keluar.Muat ulang variabel lingkungan.
source .bash_profileTentukan metode yang digunakan oleh klien database untuk memvalidasi instance RDS.
export PGSSLMODE="verify-full"Jika enkripsi SSL diaktifkan untuk instance RDS, instance RDS mengizinkan koneksi SSL dari klien database. Konfigurasikan parameter PGSSLMODE sesuai kebutuhan bisnis Anda.
ACL dikonfigurasi
Koneksi SSL diperlukan
Nilai PGSSLMODE
Tidak
Ya
require, verify-ca, atau verify-full
Tidak
disable
Ya
Klien database hanya dapat terhubung ke instance RDS melalui SSL.
require, verify-ca, atau verify-full
CatatanBerikut adalah deskripsi nilai-nilai parameter PGSSLMODE:
require: Klien database mengenkripsi koneksi SSL yang digunakan untuk mentransmisikan data, tetapi tidak memvalidasi instance RDS.
verify-ca: Klien database mengenkripsi koneksi SSL yang digunakan untuk mentransmisikan data dan memvalidasi instance RDS.
verify-full: Klien database mengenkripsi koneksi SSL yang digunakan untuk mentransmisikan data, memvalidasi instance RDS, dan memverifikasi bahwa CN atau DNS yang ditentukan dalam sertifikat server sesuai dengan titik akhir yang dikonfigurasi selama pembuatan koneksi.
Terhubung ke instance RDS.
psql -h <Endpoint> -U <Username> -p <Nomor Port> -d <Nama Basis Data>Tabel berikut memberikan detail tentang cara memperoleh nilai-nilai parameter sebelumnya dari konsol ApsaraDB RDS.
Parameter
Cara memperoleh
Endpoint
Endpoint yang dilindungi oleh enkripsi SSL untuk instance RDS. Endpoint ini ditentukan oleh parameter Protected Host pada tab SSL Encryption dari halaman Keamanan Data.
Nama Pengguna
Nama pengguna akun yang digunakan untuk masuk ke instance RDS. Anda dapat memperoleh nama pengguna dari halaman Accounts.
Nomor Port
Nomor port yang digunakan untuk terhubung ke instance RDS. Nomor port default adalah 5432. Jika Anda telah mengubah nomor port default, Anda dapat memperoleh nomor port baru dari halaman Database Connection.
Nama Basis Data
Nama basis data yang ingin Anda hubungkan pada instance RDS. Anda dapat memperoleh nama basis data dari halaman Database Connection. Basis data postgres adalah basis data sistem default. Jangan lakukan operasi pada basis data postgres.
Gunakan JDBC untuk terhubung ke instance RDS melalui koneksi SSL
Unduh file berikut ke komputer Anda:
client.crt dan client.key: File ini wajib jika Anda telah mengonfigurasi sertifikat CA klien di konsol ApsaraDB RDS. Lihat Konfigurasikan sertifikat CA klien pada instance ApsaraDB RDS for PostgreSQL untuk informasi lebih lanjut.
server-ca.crt: Untuk informasi lebih lanjut tentang cara memperoleh file ini, lihat Konfigurasikan enkripsi SSL untuk instance ApsaraDB RDS for PostgreSQL atau Konfigurasikan sertifikat kustom pada instance ApsaraDB RDS for PostgreSQL.
Konversikan file client.key ke format PK8.
openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES # Masukkan kata sandi yang digunakan untuk terhubung ke instanceRDS. Masukkan Kata Sandi Enkripsi: Verifikasi - Masukkan Kata Sandi Enkripsi:PeringatanJalankan perintah openssl pada host tempat aplikasi Anda berada untuk mengonversi file client.key ke format PK8. Jika tidak, pesan kesalahan berikut mungkin ditampilkan:
org.postgresql.util.PSQLException: Tidak dapat mendekripsi file kunci SSL C:/Users/XXX/XXX/client.pk8org.postgresql.util.PSQLException: Kesalahan SSL: Menerima peringatan fatal: unexpected_message
Dalam contoh ini, klien database menjalankan Maven. Impor dependensi Maven PostgreSQL ke dalam file pom.xml.
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.10</version> </dependency>Kompilasi potongan kode yang digunakan untuk menetapkan koneksi SSL berbasis JDBC ke instance RDS.
CatatanAnda dapat menjalankan perintah sampel untuk mengonfigurasi sertifikat kustom atau sertifikat cloud. Sebagai contoh, ganti
server-ca.crtdenganApsaraDB-CA-Chain.pemuntuk mengonfigurasi sertifikat cloud.public class PgSslDemo { public static void main(String[] args) { // Tentukan titik akhir yang digunakan untuk terhubung ke instance RDS. String hostname = "pgm-bp1gclw58u36s6****.pg.rds.aliyuncs.com"; // Tentukan nomor port yang digunakan untuk terhubung ke instance RDS. String port = "5432"; // Tentukan nama basis data yang ingin Anda hubungkan pada instance RDS. String dbname = "postgres"; String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbname + "?binaryTransfer=true"; Properties properties = new Properties(); // Tentukan nama pengguna yang digunakan untuk terhubung ke basis data tertentu pada instance RDS. properties.setProperty("user", "test_user"); // Tentukan kata sandi yang digunakan untuk terhubung ke basis data tertentu pada instance RDS. properties.setProperty("password", "test_pwd"); // Tentukan jalur penyimpanan file yang berisi sertifikat. String path = "D:\\ssl\\"; // Konfigurasikan enkripsi SSL. properties.setProperty("ssl", "true"); // Tentukan kunci publik dari CA. properties.setProperty("sslrootcert", path + "/" + "server-ca.crt"); // Tentukan kunci privat dari sertifikat klien. properties.setProperty("sslkey", path + "/" + "client.pk8"); // Tentukan sertifikat klien. properties.setProperty("sslcert", path + "/" + "client.crt"); // Masukkan kata sandi yang Anda tentukan saat mengonversi file client.key ke format PK8. properties.setProperty("sslpassword", "test_ssl_pwd"); // Tentukan mode SSL. Nilai valid: require, verify-ca, dan verify-full. properties.setProperty("sslmode", "verify-ca"); try { Class.forName("org.postgresql.Driver"); Connection connection = DriverManager.getConnection(jdbcUrl, properties); // Dalam contoh ini, basis data postgres berisi tabel bernama example dari mana data di-query. PreparedStatement preparedStatement = connection.prepareStatement("select * from " + "students01"); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { ResultSetMetaData rsmd = resultSet.getMetaData(); int columnCount = rsmd.getColumnCount(); Map map = new HashMap(); for (int i = 0; i < columnCount; i++) { map.put(rsmd.getColumnName(i + 1).toLowerCase(), resultSet.getObject(i + 1)); } System.out.println(map); } } catch (Exception exception) { exception.printStackTrace(); } } }