Untuk meningkatkan keamanan transfer data antara aplikasi klien Anda dan Hologres, Anda dapat mengaktifkan enkripsi Secure Sockets Layer (SSL) dalam transit. SSL menggunakan sertifikat digital dan protokol kriptografi seperti Transport Layer Security (TLS) untuk membangun koneksi terenkripsi antara instans Hologres dan klien. Proses ini melindungi kerahasiaan dan integritas data Anda selama dalam transit.
Skenario
Enkripsi SSL dalam transit cocok untuk skenario berikut:
Akses database remote: Saat klien perlu mengakses database dari lokasi remote, enkripsi SSL dalam transit mengamankan data selama dalam transit.
Memenuhi persyaratan kepatuhan: Banyak standar industri dan regulasi mewajibkan data dienkripsi selama dalam transit. Enkripsi SSL membantu organisasi Anda memenuhi persyaratan keamanan dan kepatuhan tersebut.
SSL mengenkripsi koneksi jaringan pada lapisan transport, yang meningkatkan keamanan dan integritas data tetapi juga menambah latensi jaringan.
Prasyarat
Instans Hologres telah dibuat. Untuk informasi lebih lanjut, lihat Beli instans Hologres.
Client PSQL atau JDBC telah diunduh dan diinstal. Untuk informasi lebih lanjut, lihat Client PSQL atau JDBC.
Catatan penggunaan
Hologres V1.1 dan versi lebih baru mendukung enkripsi dalam transit. Hologres V1.2 dan versi lebih baru mendukung TLS. Hologres V2.1 dan versi lebih baru mendukung enkripsi dalam transit yang menggunakan sertifikat CA, dan Anda dapat mengaktifkan fitur tersebut di Konsol Hologres.
CatatanJika instans Anda lebih lama dari V1.1, lihat Pemecahan Masalah: Error persiapan upgrade atau bergabunglah dengan grup DingTalk Hologres untuk dukungan. Untuk informasi lebih lanjut, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.
Mengaktifkan atau menonaktifkan enkripsi SSL dalam transit akan me-restart instans, jadi lakukan dengan hati-hati. Fitur ini dinonaktifkan secara default.
Setelah mengaktifkan enkripsi SSL untuk instans Hologres, klien dapat terhubung ke instans tersebut melalui SSL. Anda harus secara eksplisit mengonfigurasi klien untuk menggunakan koneksi terenkripsi atau tidak terenkripsi.
Jika Anda menonaktifkan enkripsi SSL untuk instans Hologres, hanya koneksi non-SSL yang diizinkan.
Hologres mendukung mode SSL berikut untuk enkripsi dalam transit:
Mode SSL
Versi minimum yang didukung
Require: Mengenkripsi hanya tautan data.
V1.1
Verify-CA: Mengenkripsi tautan data dan menggunakan sertifikat CA untuk memverifikasi keaslian server Hologres.
V2.1
Verify-Full: Mengenkripsi tautan data, menggunakan sertifikat CA untuk memverifikasi keaslian server Hologres, dan memverifikasi bahwa CN atau DNS dalam sertifikat sesuai dengan alamat koneksi Hologres yang dikonfigurasi untuk koneksi tersebut.
V2.1
Sertifikat SSL berlaku selama satu tahun. Anda harus memperbarui sertifikat tersebut secara manual sebelum masa berlakunya habis. Jika tidak, Anda tidak dapat lagi menggunakan enkripsi SSL untuk terhubung ke instans.
Mengaktifkan enkripsi SSL dalam transit meningkatkan konsumsi CPU dan latensi baca/tulis.
Setelah mengaktifkan enkripsi SSL dalam transit, Anda harus memutus dan menyambungkan ulang koneksi yang ada agar enkripsi berlaku.
Mengaktifkan atau menonaktifkan enkripsi SSL dalam transit, serta memperbarui sertifikat SSL, akan me-restart instans Hologres Anda. Proses ini memakan waktu sekitar 3 menit. Lakukan operasi ini selama jam sepi.
Langkah 1: Aktifkan enkripsi dalam transit
Login ke Konsol Hologres dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, klik Instances, lalu klik ID instans target.
Di halaman detail instans, klik Data Security.
Di tab SSL, aktifkan sakelar SSL Encryption.
Di kotak dialog Enable SSL Encryption, klik Enable SSL Encryption.
Langkah 2: Unduh sertifikat CA
Hologres menyediakan sertifikat CA untuk instans Anda. Gunakan sertifikat CA ini pada klien remote Anda untuk memverifikasi keaslian instans.
Login ke Konsol Hologres dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, klik Instances, lalu klik ID instans target.
Di halaman detail instans, klik Data Security.
Di tab SSL, klik Download Certificate.
Langkah 3: Terhubung ke Hologres
Anda dapat terhubung ke Hologres menggunakan client PSQL atau JDBC. Selama proses koneksi, Anda dapat mengonfigurasi parameter untuk mengontrol apakah akan mengaktifkan enkripsi SSL dalam transit.
Client PSQL
Perintah koneksi
PG_USER=<AccessKey ID> PG_PASSWORD=<AccessKey Secret> PG_SSLMODE=<SSL Mode> PG_SSLROOTCERT=<certificate folder> PGSSLMODE=$PG_SSLMODE PGSSLROOTCERT=$PG_SSLROOTCERT PGUSER=$PG_USER PGPASSWORD=$PG_PASSWORD psql -p <Port> -h <Endpoint> -d <Database>Parameter
Parameter
Deskripsi
AccessKey ID
ID AccessKey Akun Alibaba Cloud Anda. Dapatkan dari AccessKey.
Kami merekomendasikan penggunaan variabel lingkungan untuk kredensial guna mengurangi risiko kebocoran.
AccessKey Secret
Secret AccessKey Akun Alibaba Cloud Anda.
Dapatkan dari AccessKey.
Kami merekomendasikan penggunaan variabel lingkungan untuk kredensial guna mengurangi risiko kebocoran.
SSL Mode
Menentukan mode SSL untuk koneksi PSQL. Nilai yang valid:
require: menggunakan enkripsi dalam transit dan hanya mengenkripsi tautan data.
verify-ca: mengenkripsi tautan data dan memverifikasi keaslian instans Hologres.
verify-full: mengenkripsi tautan data, memverifikasi keaslian instans Hologres, dan memverifikasi bahwa CN atau DNS dalam sertifikat sesuai dengan alamat koneksi database yang dikonfigurasi untuk koneksi tersebut.
disable: tidak menggunakan enkripsi dalam transit.
certificate folder
Jalur penyimpanan sertifikat CA.
Parameter ini wajib jika parameter
SSL Modediatur ke verify-ca atau verify-full.port
Port publik instans Hologres.
Contoh:
80.endpoint
Titik akhir publik instans Hologres.
Contoh:
xxx-cn-hangzhou.hologres.aliyuncs.com.database
Nama database Hologres.
Setelah membuat instans Hologres, sebuah database default bernama postgres secara otomatis dibuat.
Anda dapat menggunakan database postgres untuk terhubung ke Hologres, tetapi database ini memiliki sumber daya terbatas. Untuk penggunaan produksi, kami merekomendasikan Anda membuat database baru. Untuk informasi lebih lanjut, lihat Buat database.
Contoh:
mydb.Verifikasi koneksi.
Jika Anda mengatur PGSSLMODE ke
require, output berikut menunjukkan bahwa koneksi ke Hologres menggunakan enkripsi SSL.PGUSER=$PG_USER PGPASSWORD=$PG_PASSWORD PGSSLMODE=require psql -h $HOST_NAME -p $PORT -d $DB -E psql (14.2, server 11.3) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help.
JDBC
Saat Anda menggunakan JDBC untuk terhubung ke Hologres, Anda dapat menggunakan parameter koneksi ssl dan sslmode untuk mengontrol apakah akan menggunakan enkripsi SSL. Perilaku koneksi yang dihasilkan dijelaskan dalam tabel berikut.
SSL diaktifkan pada instans | ssl | sslmode | Hasil |
Ya | true |
| Koneksi berhasil dan data dienkripsi dalam transit. |
Ya | false |
| Koneksi berhasil, tetapi data tidak dienkripsi dalam transit. |
Tidak | true |
| Terjadi error. Contoh: |
Tidak | false |
| Koneksi berhasil, tetapi data tidak dienkripsi dalam transit. |
Kode berikut memberikan contoh.
// Set the endpoint of the Hologres instance.
String hostname = "hgxxxxxxx-cn-hangzhou-vpc.hologres.aliyuncs.com:80";
// Set the port of the Hologres instance.
String port = "80";
// Set the name of the database to connect to.
String dbname = "postgres";
String jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbname+"?binaryTransfer=true";
Properties properties = new Properties();
// Set the database username. Using an environment variable is recommended.
properties.setProperty("user", "accessid");
// Set the database password. Using an environment variable is recommended.
properties.setProperty("password", "accesskey");
// Configure the connection to use SSL.
properties.setProperty("ssl", "true");
// Specify the file path of the root certificate.
properties.setProperty("sslrootcert", path + "/" + "hologres_certificate.crt");
// Set the SSL mode. Valid values are require, verify-ca, and verify-full.
properties.setProperty("sslmode", "verify-full");
try {
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection(jdbcUrl, properties);
// The following code queries the 'example' table, which is assumed to exist.
PreparedStatement preparedStatement = connection.prepareStatement("select * from " +
"example");
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();
}