Hubungkan ke instans ApsaraDB RDS for PostgreSQL melalui koneksi SSL terenkripsi menggunakan pgAdmin, psql, atau JDBC.
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Mengaktifkan enkripsi SSL untuk instans RDS. Jika belum diaktifkan, lihat Konfigurasi sertifikat cloud untuk mengaktifkan enkripsi SSL atau Konfigurasi sertifikat kustom untuk mengaktifkan enkripsi SSL.
-
Memiliki file sertifikat CA server. Untuk mendapatkan file ini, lihat Konfigurasi enkripsi SSL untuk instans ApsaraDB RDS for PostgreSQL atau Konfigurasi sertifikat kustom pada instans ApsaraDB RDS for PostgreSQL.
-
(Hanya diperlukan jika Anda mengonfigurasi sertifikat CA klien) File
client.crtdanclient.key. Lihat Konfigurasi sertifikat CA klien pada instans ApsaraDB RDS for PostgreSQL.
Pilih metode koneksi
| Tool | Paling cocok untuk |
|---|---|
| pgAdmin | Manajemen database berbasis GUI dan kueri interaktif |
| psql | Skrip, otomatisasi, dan alur kerja command line |
| JDBC | Aplikasi Java yang terhubung ke database secara terprogram |
Referensi mode SSL
Ketiga metode koneksi menggunakan nilai mode SSL yang sama. Pilih berdasarkan kebutuhan keamanan Anda:
| SSL Mode | Perilaku | Kapan digunakan |
|---|---|---|
require |
Mengenkripsi koneksi tetapi tidak memvalidasi sertifikat server. | Enkripsi dasar tanpa verifikasi sertifikat. |
verify-ca |
Mengenkripsi koneksi dan memvalidasi sertifikat CA server. | Direkomendasikan untuk sebagian besar kasus penggunaan produksi. |
verify-full |
Mengenkripsi koneksi, memvalidasi sertifikat CA server, dan memverifikasi bahwa CN atau DNS dalam sertifikat server sesuai dengan titik akhir koneksi. | Keamanan tertinggi; melindungi dari serangan man-in-the-middle. |
disable |
Tidak ada enkripsi SSL. Hanya tersedia jika tidak ada daftar kontrol akses (ACL) yang dikonfigurasi pada instans. | Pengembangan atau pengujian hanya di jaringan tepercaya. |
Jika ACL dikonfigurasi pada instans RDS, instans hanya menerima koneksi SSL. Atur mode SSL kerequire,verify-ca, atauverify-full.
Hubungkan menggunakan pgAdmin
pgAdmin 4 disertakan saat Anda menginstal PostgreSQL dari situs web resmi PostgreSQL. Untuk menggunakan pgAdmin tanpa menginstal PostgreSQL, unduh secara terpisah dari pgAdmin.
Langkah-langkah berikut menggunakan pgAdmin 4 V6.2.0 sebagai contoh.
-
Jalankan pgAdmin 4.
Saat login pertama kali, pgAdmin meminta Anda menetapkan kata sandi utama untuk melindungi kata sandi dan kredensial yang disimpan.
-
Klik kanan Servers dan pilih Register > Server.

-
Pada tab General, masukkan nama untuk server.

-
Pada tab Connection, masukkan detail koneksi.
Parameter Deskripsi Host name/address Titik akhir instans RDS. Gunakan titik akhir internal untuk koneksi VPC, atau titik akhir publik untuk koneksi Internet. Temukan informasi ini di halaman Database Connection. Lihat Lihat dan ubah titik akhir serta nomor port instans ApsaraDB RDS for PostgreSQL. Port Nomor port untuk koneksi. Temukan informasi ini di halaman Database Connection. Username Username akun database. Lihat Buat database dan akun. Password Kata sandi akun database. 
-
Pada tab Parameters, konfigurasi pengaturan SSL.
Anda dapat menggunakan sertifikat kustom (
server-ca.crt) atau sertifikat cloud (ApsaraDB-CA-Chain.pem) sebagai sertifikat root. Gunakan path file aktual pada sistem Anda.Parameter Deskripsi SSL mode Mode SSL. Lihat Referensi mode SSL untuk nilai yang tersedia dan kapan masing-masing digunakan. Client certificate Path ke client.crt. Diperlukan hanya jika Anda mengonfigurasi sertifikat CA klien.Client certificate key Path ke client.key. Diperlukan hanya jika Anda mengonfigurasi sertifikat CA klien.Root certificate Path ke file sertifikat CA server. Diperlukan ketika SSL mode diatur ke Verify-CA atau Verify-Full. -
Klik Save. Jika koneksi berhasil, struktur database akan muncul di panel pgAdmin.
PentingDatabase
postgresadalah database sistem default. Jangan melakukan operasi apa pun padanya.
Langkah 4: Sambungkan ke instans RDS
Klien PostgreSQL harus diinstal pada mesin Anda. Lihat Dokumentasi PostgreSQL.
-
Di direktori
/var/lib/pgsql, buat folder bernama.postgresql.mkdir /var/lib/pgsql/.postgresql -
Salin file sertifikat ke folder
.postgresql.client.crtdanclient.keyhanya diperlukan jika Anda mengonfigurasi sertifikat CA klien.- Anda dapat menggunakan sertifikat kustom (
server-ca.crt) atau sertifikat cloud (ApsaraDB-CA-Chain.pem). Gunakan path file aktual saat menjalankan perintah.
cp client.crt client.key server-ca.crt /var/lib/pgsql/.postgresql/ -
Tetapkan kepemilikan dan izin file pada folder
.postgresql.chown postgres:postgres /var/lib/pgsql/.postgresql/* chmod 600 /var/lib/pgsql/.postgresql/* -
Buka file variabel lingkungan untuk diedit.
vim /var/lib/pgsql/.bash_profile -
Tekan
iuntuk memasuki mode edit, lalu tambahkan variabel lingkungan berikut: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, lalu masukkan:wquntuk menyimpan dan keluar. -
Muat ulang variabel lingkungan.
source .bash_profile -
Tetapkan mode SSL.
export PGSSLMODE="verify-full" -
Hubungkan ke instans RDS.
Placeholder Deskripsi Tempat menemukan <Endpoint>Titik akhir instans RDS yang dilindungi SSL Protected Host pada tab SSL Encryption di halaman Keamanan Data <Username>Username akun database Accounts page <Port number>Nomor port (default: 5432)Database Connection page <Database name>Nama database yang akan dihubungkan Database Connection page psql -h <Endpoint> -U <Username> -p <Port number> -d <Database name>Ganti placeholder dengan nilai aktual Anda:
Database postgres adalah database sistem default. Jangan melakukan operasi apa pun padanya.
Hubungkan menggunakan JDBC
Langkah 1: Dapatkan file sertifikat
Unduh file berikut ke host tempat aplikasi Java Anda berjalan:
-
server-ca.crt: Sertifikat CA server. Lihat bagian Prasyarat untuk cara mendapatkannya. -
client.crtdanclient.key: Diperlukan hanya jika Anda mengonfigurasi sertifikat CA klien.
Langkah 2: Konversi kunci privat klien ke format PKCS8 (PK8)
JDBC memerlukan kunci privat klien dalam format PKCS8 (PK8). Jalankan perintah berikut pada host tempat aplikasi Anda berjalan:
openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES
# Masukkan kata sandi enkripsi saat diminta. Anda akan menggunakan kata sandi ini dalam kode Anda.
Enter Encryption Password:
Verifying - Enter Encryption Password:
Jalankan perintah ini pada host yang sama tempat aplikasi Anda berjalan. Jika Anda menjalankannya di host berbeda lalu menyalin file tersebut, kesalahan berikut mungkin terjadi:
-
org.postgresql.util.PSQLException: Could not decrypt SSL key file C:/Users/XXX/XXX/client.pk8 -
org.postgresql.util.PSQLException: SSL error: Received fatal alert: unexpected_message
Langkah 3: Tambahkan dependensi driver JDBC PostgreSQL
Tambahkan dependensi berikut ke pom.xml Anda:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.10</version>
</dependency>
Langkah 4: Hubungkan ke instans RDS
Contoh di bawah menggunakan sertifikat kustom (server-ca.crt). Untuk menggunakan sertifikat cloud, gantiserver-ca.crtdenganApsaraDB-CA-Chain.pem.
public class PgSslDemo {
public static void main(String[] args) {
// Titik akhir instans RDS
String hostname = "pgm-bp1gclw58u36s6****.pg.rds.aliyuncs.com";
// Nomor port (default: 5432)
String port = "5432";
// Nama database
String dbname = "postgres";
String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbname + "?binaryTransfer=true";
Properties properties = new Properties();
// Username akun database
properties.setProperty("user", "test_user");
// Kata sandi akun database
properties.setProperty("password", "test_pwd");
// Direktori tempat file sertifikat disimpan
String path = "D:\\ssl\\";
// Aktifkan SSL
properties.setProperty("ssl", "true");
// Path ke sertifikat CA server
properties.setProperty("sslrootcert", path + "/" + "server-ca.crt");
// Path ke kunci privat klien (format PKCS8)
properties.setProperty("sslkey", path + "/" + "client.pk8");
// Path ke sertifikat klien
properties.setProperty("sslcert", path + "/" + "client.crt");
// Kata sandi enkripsi yang ditetapkan saat mengonversi client.key ke format PKCS8
properties.setProperty("sslpassword", "test_ssl_pwd");
// Mode SSL: require, verify-ca, atau verify-full
properties.setProperty("sslmode", "verify-ca");
try {
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection(jdbcUrl, properties);
// Contoh: kueri semua baris dari tabel students01
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();
}
}
}