Untuk meningkatkan keamanan data dalam transit, Anda dapat mengaktifkan enkripsi Secure Sockets Layer (SSL) dan menginstal sertifikat CA pada layanan aplikasi Anda. SSL mengenkripsi koneksi jaringan di lapisan transport untuk meningkatkan keamanan dan integritas data, meskipun hal ini dapat meningkatkan latensi koneksi.
Informasi latar belakang
SSL adalah protokol keamanan yang awalnya dikembangkan oleh Netscape untuk membuat saluran aman bagi transmisi data antara browser web dan server web. Protokol ini menggunakan algoritma enkripsi seperti RC4, MD5, dan RSA untuk mengamankan komunikasi. Internet Engineering Task Force (IETF) menstandarkan SSL 3.0 dan mengganti namanya menjadi Transport Layer Security (TLS). Meskipun istilah SSL lebih umum digunakan, dokumen ini merujuk pada enkripsi TLS ketika membahas enkripsi SSL.
Skenario
-
Mengakses database melalui Internet publik: Saat client terhubung ke kluster PolarDB melalui Internet publik, tautan data tersebut terpapar pada jaringan yang tidak tepercaya. Enkripsi diperlukan untuk mencegah serangan man-in-the-middle.
-
Memenuhi persyaratan keamanan dan kepatuhan: Regulasi industri atau perlindungan data tertentu, seperti PCI-DSS dan GDPR, mewajibkan enkripsi untuk data sensitif dalam transit.
-
Berkomunikasi lintas lingkungan jaringan: Dalam arsitektur cloud hibrida atau multi-VPC, aliran data yang melintasi batas jaringan memerlukan enkripsi SSL untuk menjamin kerahasiaan dan integritasnya.
Batasan
-
Enkripsi titik akhir tunggal: Setiap kluster hanya mendukung enkripsi SSL untuk satu titik akhir sekaligus. Jika kluster Anda dikonfigurasi dengan titik akhir publik dan internal, Anda harus memilih salah satu untuk dienkripsi berdasarkan skenario bisnis Anda.
-
Rekomendasi pemilihan titik akhir untuk dienkripsi:
-
Jika Anda mengakses database melalui Internet publik, kami merekomendasikan mengaktifkan enkripsi SSL untuk titik akhir publik guna melindungi data dalam transit.
-
Jika Anda hanya mengakses database dari dalam VPC dan perlu memenuhi persyaratan keamanan serta kepatuhan, kami merekomendasikan mengaktifkan enkripsi SSL untuk titik akhir internal.
-
-
Batas panjang titik akhir: Titik akhir PolarDB dengan enkripsi SSL yang diaktifkan harus memiliki kurang dari 64 karakter. Untuk informasi tentang cara mengubah titik akhir, lihat Configure PolarProxy.
Penting
-
Periode validitas sertifikat: Sertifikat SSL memiliki periode validitas satu tahun yang tidak dapat diperpanjang. Anda harus memperbarui periode validitas, lalu mengunduh ulang dan mengonfigurasi sertifikat CA sebelum masa berlakunya habis. Jika tidak, koneksi client terenkripsi akan gagal. Kami merekomendasikan agar Anda mengaktifkan automatic certificate rotation untuk menghindari pembaruan sertifikat secara manual.
-
Gangguan layanan: Tindakan berikut akan me-restart kluster Anda: mengaktifkan atau menonaktifkan enkripsi SSL, memperbarui periode validitas sertifikat, mengubah titik akhir yang dilindungi, dan mengaktifkan automatic certificate rotation. Kami merekomendasikan agar Anda melakukan operasi ini selama jam sepi dan memastikan aplikasi Anda dapat terhubung ulang secara otomatis.
Prosedur
Langkah 1: Aktifkan enkripsi SSL
Mengaktifkan enkripsi SSL akan me-restart kluster Anda. Kami merekomendasikan agar Anda melakukan operasi ini selama jam sepi.
-
Masuk ke PolarDB console. Di panel navigasi kiri, klik Clusters. Pilih region tempat kluster Anda berada, lalu klik ID kluster tersebut.
-
Di panel navigasi kiri, pilih .
-
Pada tab SSL Settings, aktifkan sakelar SSL Status untuk mengaktifkan enkripsi SSL.
CatatanAnda dapat mengonfigurasi SSL untuk titik akhir primary, cluster, dan kustom.
-
Pada kotak dialog Configure SSL, pilih titik akhir yang akan dienkripsi, lalu klik OK.
Langkah 2: Unduh sertifikat
Setelah Anda mengaktifkan enkripsi SSL, Anda dapat mengunduh sertifikat untuk kluster PolarDB guna memverifikasi keaslian database saat client terhubung jarak jauh ke kluster PolarDB.
-
Pada tab SSL Settings, klik Download di bagian titik akhir yang diinginkan.
-
File yang diunduh merupakan paket terkompresi yang berisi tiga file berikut:
-
File .p7b: Untuk mengimpor sertifikat CA di Windows.
-
File .pem: Untuk mengimpor sertifikat CA di sistem atau aplikasi lain.
-
File .jks: File sertifikat Java truststore dengan kata sandi
apsaradb, untuk mengimpor rantai sertifikat CA ke dalam aplikasi Java.CatatanSaat menggunakan file sertifikat JKS di Java, Anda harus memodifikasi konfigurasi keamanan default untuk JDK 7 dan JDK 8. Di server yang terhubung ke database PolarDB, edit file
jre/lib/security/java.securitydan ubah dua pengaturan berikut:jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024Jika Anda tidak memodifikasi pengaturan keamanan JDK, kesalahan serupa berikut dapat terjadi. Kesalahan ini dan kesalahan terkait lainnya biasanya disebabkan oleh pengaturan keamanan Java yang salah.
javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
-
Langkah 3: Terhubung ke PolarDB dari client
Setelah Anda mengaktifkan enkripsi SSL, apakah koneksi antara client dan kluster PolarDB dienkripsi bergantung pada jenis dan pengaturan client. Misalnya, beberapa client mungkin menggunakan koneksi terenkripsi secara default. Anda dapat memodifikasi pengaturan atau kode client untuk membuat koneksi terenkripsi dan memverifikasi identitas kluster PolarDB.
Jika Anda menggunakan Data Management (DMS) untuk masuk dan mengelola kluster PolarDB, Anda tidak perlu mengenkripsi koneksi tersebut.
CLI
Untuk client MySQL versi 5.7.11 dan yang lebih baru, Anda dapat menggunakan opsi --ssl-mode dalam perintah koneksi untuk mengonfigurasi enkripsi SSL.
-
--ssl-mode=DISABLED: Koneksi tidak dienkripsi. -
--ssl-mode=PREFERREDatau menghilangkan opsi--ssl-mode: Mencoba membuat koneksi terenkripsi. Jika gagal, koneksi tidak terenkripsi akan dibuat sebagai gantinya. -
--ssl-mode=REQUIRED: Mengharuskan koneksi terenkripsi. Koneksi akan gagal jika koneksi terenkripsi tidak dapat dibuat. -
--ssl-mode=VERIFY_CA: Mengharuskan koneksi terenkripsi dan memverifikasi sertifikat server terhadap sertifikat CA lokal. -
--ssl-mode=VERIFY_IDENTITY: Mengharuskan koneksi terenkripsi, memverifikasi sertifikat server terhadap sertifikat CA lokal, dan memeriksa apakah hostname atau alamat IP server sesuai dengan yang digunakan untuk koneksi.
Contoh 1: Mencoba membuat koneksi terenkripsi, beralih ke koneksi tidak terenkripsi jika gagal.
mysql -h {endpoint} -u {username} -p --ssl-mode=PREFERRED
Contoh 2: Mengharuskan koneksi terenkripsi dan memverifikasi sertifikat server.
mysql -h {endpoint} -u {username} -p --ssl-mode=VERIFY_CA --ssl-ca={CA certificate path}/ApsaraDB-CA-Chain.pem
-
Ganti
{endpoint},{username}, dan{CA certificate path}dengan nilai aktual Anda. -
Untuk informasi lebih lanjut tentang opsi
--ssl-mode, lihat dokumentasi MySQL.
MySQL Workbench
-
Buka MySQL Workbench dan pilih Database > Manage Connections.
-
Masukkan endpoint PolarDB, username, dan password.
-
Pada tab SSL, atur parameter Use SSL, atur SSL CA File ke jalur file sertifikat CA format PEM yang telah diunduh, lalu klik Test Connection atau OK.
CatatanUntuk penjelasan opsi Use SSL, lihat deskripsi opsi --ssl-mode untuk koneksi command-line.
Kode aplikasi
Java
Connector/J (mysql-connector-java) adalah driver JDBC resmi untuk MySQL. Contoh ini menggunakan mysql-connector-java versi 8.0.19 sebagai dependensi.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
Kode contoh berikut menggunakan properti sslMode untuk menentukan mode SSL. Properti ini didukung di mysql-connector-java versi 8.0.13 dan yang lebih baru. Jika Anda menggunakan versi sebelumnya, Anda harus menggunakan properti useSSL, requireSSL, dan verifyServerCertificate sebagai gantinya. Untuk detailnya, lihat dokumentasi MySQL.
Kode contoh:
package com.example.ssltest;
import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
Connection conn = null;
MysqlDataSource mysqlDS=null;
try{
mysqlDS = new MysqlDataSource();
// Setel SslMode sesuai kebutuhan. Untuk opsi, lihat petunjuk koneksi command-line.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// Truststore berisi sertifikat CA. Atur jenis truststore ke JKS.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Ganti jalur setelah file:/ dengan jalur file ApsaraDB-CA-Chain.jks Anda.
mysqlDS.setTrustCertificateKeyStoreUrl("file://{CA certificate path}/ApsaraDB-CA-Chain.jks");
// Kata sandi untuk file JKS yang diunduh adalah apsaradb dan tidak dapat diubah.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// Titik akhir database Anda
mysqlDS.setServerName("your_polardb_host");
// Port database Anda
mysqlDS.setPort(3306);
// Username database Anda
mysqlDS.setUser("your_username");
// Password database Anda
mysqlDS.setPassword("your_password");
// Nama database Anda
mysqlDS.setDatabaseName("your_database");
System.out.println("Mencoba terhubung ke database...");
conn = mysqlDS.getConnection();
System.out.println("Koneksi database berhasil!");
// Gunakan try-with-resources untuk memastikan Statement dan ResultSet ditutup secara otomatis.
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT VERSION()")) {
// Periksa apakah kueri mengembalikan hasil.
if (rs.next()) {
// Ambil hasil dari kolom pertama dan cetak.
String dbVersion = rs.getString(1);
System.out.println("Versi database: " + dbVersion);
} else {
System.out.println("Gagal mengambil informasi versi database.");
}
}
}catch(Exception e){
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Python
# Instal pymysql
# pip install pymysql
import pymysql
# --- Konfigurasikan informasi database Anda ---
db_config = {
'host': 'your_polardb_host', # Titik akhir kluster Anda
'user': 'your_username', # Username Anda
'password': 'your_password', # Password Anda
'database': 'your_database', # Database yang ingin Anda hubungi
'port': 3306
}
# --- Konfigurasikan informasi SSL ---
ssl_args = {
'ca': '{CA certificate path}/ApsaraDB-CA-Chain.pem',
'mode': 'VERIFY_CA'
}
try:
# Buat koneksi, dengan melewatkan parameter ssl
print("Mencoba terhubung ke MySQL dengan SSL...")
connection = pymysql.connect(**db_config, ssl=ssl_args)
print("Koneksi SSL berhasil!")
with connection.cursor() as cursor:
# Jalankan kueri sederhana untuk memverifikasi koneksi
cursor.execute("SELECT VERSION()")
version = cursor.fetchone()
print(f"Versi database: {version[0]}")
except pymysql.MySQLError as e:
# Mencetak kesalahan terkait SSL dapat membantu troubleshooting
print(f"Koneksi gagal: {e}")
finally:
if 'connection' in locals() and connection.open:
connection.close()
print("Koneksi database ditutup.")
Benchmarking Sysbench
-
Unduh sertifikat dan ekstrak paketnya.
-
Konfigurasikan Sysbench:
-
Tambahkan
--mysql-ssl=onke perintahsysbench. -
Jika Anda menggunakan Sysbench 1.0.x, ubah nama file .pem menjadi cacert.pem dan letakkan di direktori tempat Anda menjalankan perintah
sysbench. Versi Sysbench ini menyematkan nama sertifikat SSL sebagai cacert.pem. -
Jika Anda menggunakan Sysbench 1.1.x, Anda dapat mengonfigurasi sertifikat SSL seperti pada Sysbench 1.0.x. Atau, Anda dapat menentukan jalur ke file PEM dengan menggunakan parameter
--mysql-ssl-ca.
-
-
Untuk metode benchmarking, lihat Performance testing method (OLTP).
CatatanSelama benchmarking, pastikan versi MySQL Client Anda sesuai dengan versi MySQL kluster PolarDB Anda.
Langkah 4: Verifikasi koneksi terenkripsi
Protokol SSL memiliki beberapa versi. PolarDB saat ini mendukung TLSv1.2 dan versi yang lebih baru. Selama handshake SSL, client dan server PolarDB melakukan negosiasi parameter koneksi, termasuk versi TLS, paket sandi, dan kunci sesi. Untuk daftar lengkap paket sandi, kunjungi situs resmi OpenSSL.
-
Terhubung ke kluster PolarDB menggunakan client yang dikonfigurasi untuk SSL.
-
Jalankan kueri SQL berikut:
SHOW STATUS LIKE 'ssl_cipher'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES256-GCM-SHA384 | +---------------+---------------------------+ -
Analisis hasilnya:
-
Jika kolom
Valuemengembalikan nilai yang tidak kosong, sepertiDHE-RSA-AES256-GCM-SHA384, koneksi saat ini dienkripsi. -
Jika kolom
Valuekosong, koneksi saat ini tidak dienkripsi. Periksa konfigurasi client Anda.
-
Pemeliharaan dan manajemen
Ubah titik akhir yang dilindungi
Untuk mengubah titik akhir yang dilindungi oleh SSL, klik Configure SSL di bagian titik akhir tersebut.
Mengubah titik akhir yang dilindungi secara otomatis memperbarui sertifikat SSL dan me-restart kluster Anda. Lakukan operasi ini selama jam sepi.
Perbarui periode validitas sertifikat
Jika Anda mengubah titik akhir SSL atau sertifikat akan segera kedaluwarsa, perbarui periode validitas sertifikat secara manual.
Memperbarui periode validitas sertifikat akan me-restart kluster. Rencanakan downtime ini dengan tepat.
-
Pada tab SSL Settings, klik Update Validity Period.
-
Pada kotak dialog yang muncul, klik OK.
-
Setelah periode validitas diperbarui, unduh dan konfigurasikan sertifikat baru.
Periode validitas sertifikat SSL tidak dapat diperpanjang. Anda hanya dapat memperbarui periode validitas lalu mengunduh ulang dan mengonfigurasi sertifikatnya. Untuk menghindari pembaruan sertifikat secara manual setiap kali akan kedaluwarsa, kami merekomendasikan agar Anda mengaktifkan automatic certificate rotation. Untuk informasi lebih lanjut, lihat Enable automatic certificate rotation.
Aktifkan rotasi Sertifikat otomatis
Jika Anda mengaktifkan automatic certificate rotation, PolarDB secara otomatis memperbarui sertifikat selama jendela pemeliharaan kluster dalam waktu 10 hari sebelum masa berlakunya habis.
Pembaruan sertifikat otomatis akan me-restart kluster. Kami merekomendasikan agar Anda melakukan operasi ini selama jam sepi.
-
Pada tab SSL Settings, klik Advanced Settings.
-
Pada kotak dialog Advanced Settings, aktifkan automatic certificate rotation lalu klik Confirm.
Nonaktifkan enkripsi SSL
Menonaktifkan enkripsi SSL akan me-restart kluster Anda. Kami merekomendasikan agar Anda melakukan operasi ini selama jam sepi.
-
Pada tab SSL Settings, matikan sakelar SSL Status untuk menonaktifkan enkripsi SSL.
-
Pada kotak dialog yang muncul, klik OK.
API terkait
|
API |
Deskripsi |
|
Menanyakan pengaturan SSL kluster PolarDB. |
|
|
Mengaktifkan atau menonaktifkan enkripsi SSL, atau memperbarui sertifikat CA untuk kluster PolarDB. |