全部产品
Search
文档中心

ApsaraDB RDS:Terhubung ke instance ApsaraDB RDS for PostgreSQL melalui SSL

更新时间:Jul 02, 2025

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

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.

  1. Jalankan pgAdmin 4.

    Catatan

    Jika ini pertama kalinya Anda masuk ke pgAdmin versi terbaru, tentukan kata sandi utama untuk melindungi kata sandi dan kredensial lainnya yang disimpan.

  2. Klik kanan Servers dan pilih Register > Server.

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

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

    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

  5. 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:

    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.

    Catatan
    • Saat 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.crt dengan ApsaraDB-CA-Chain.pem untuk mengonfigurasi sertifikat cloud.

  6. Klik Save.

    Jika informasi yang dimasukkan benar, halaman seperti gambar berikut akan muncul, menunjukkan bahwa koneksi ke instance RDS berhasil.

    Penting

    Basis data postgres adalah basis data sistem default. Hindari melakukan operasi pada basis data postgres.

Gunakan psql untuk terhubung ke instance RDS melalui SSL

Catatan

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.

  1. Di direktori /var/lib/pgsql, buat folder bernama .postgresql.

    mkdir /var/lib/pgsql/.postgresql
  2. Salin file berikut ke folder .postgresql:

    cp client.crt client.key server-ca.crt /var/lib/pgsql/.postgresql/
    Catatan
    • Saat 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.crt dengan ApsaraDB-CA-Chain.pem untuk mengonfigurasi sertifikat cloud.

  3. Ubah izin pada folder .postgresql.

    chown postgres:postgres /var/lib/pgsql/.postgresql/*
    chmod 600 /var/lib/pgsql/.postgresql/*
  4. Jalankan perintah berikut untuk memodifikasi file yang berisi variabel lingkungan:

    vim /var/lib/pgsql/.bash_profile
  5. Masukkan i untuk 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"
  6. Tekan Esc untuk keluar dari mode edit. Masukkan :wq untuk menyimpan file dan keluar.

  7. Muat ulang variabel lingkungan.

    source .bash_profile
  8. Tentukan 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

    Catatan

    Berikut 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.

  9. 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

  1. Unduh file berikut ke komputer Anda:

  2. 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:
    Peringatan

    Jalankan 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.pk8

    • org.postgresql.util.PSQLException: Kesalahan SSL: Menerima peringatan fatal: unexpected_message

  3. 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>
  4. Kompilasi potongan kode yang digunakan untuk menetapkan koneksi SSL berbasis JDBC ke instance RDS.

    Catatan

    Anda dapat menjalankan perintah sampel untuk mengonfigurasi sertifikat kustom atau sertifikat cloud. Sebagai contoh, ganti server-ca.crt dengan ApsaraDB-CA-Chain.pem untuk 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();
            }
        }
    }