Fitur enkripsi SSL pada ApsaraDB RDS for MySQL digunakan untuk mengenkripsi data yang sedang ditransmisikan. Fitur ini cocok untuk skenario yang memerlukan keamanan koneksi dan kepatuhan terhadap regulasi. Secara default, enkripsi SSL dinonaktifkan untuk instans ApsaraDB RDS for MySQL. Topik ini menjelaskan cara menggunakan sertifikat cloud untuk mengaktifkan fitur enkripsi SSL tersebut.
Prasyarat
Instans RDS Anda harus menjalankan salah satu versi MySQL dan edisi RDS berikut untuk menggunakan fitur SSL encryption:
MySQL 8.0, MySQL 5.7, atau MySQL 5.6 pada RDS High-availability Edition
MySQL 8.0 atau MySQL 5.7 pada RDS Cluster Edition
MySQL 8.0 atau MySQL 5.7 pada RDS Basic Edition
Instans RDS Anda harus memenuhi persyaratan berikut untuk menggunakan fitur forceful SSL encryption:
Instans RDS menjalankan MySQL 5.7 atau MySQL 8.0 pada RDS Basic Edition, RDS High-availability Edition, atau RDS Cluster Edition.
Instans RDS menjalankan minor engine version 20241130 atau lebih baru.
Anda dapat melihat informasi tersebut di halaman Informasi Dasar instans RDS.
Jika Anda mengubah metode penagihan instans RDS non-serverless yang menjalankan RDS Basic Edition menjadi serverless, Anda harus mengaktifkan ulang fitur enkripsi SSL.
Jika instans RDS Anda memenuhi persyaratan di atas tetapi pesan error yang menunjukkan bahwa fitur enkripsi SSL tidak didukung tetap muncul, perbarui minor engine version instans RDS tersebut. Untuk informasi selengkapnya, lihat Upgrade the minor engine version.
Deskripsi fitur
Fitur enkripsi SSL digunakan untuk mengenkripsi data yang ditransmisikan antara instans ApsaraDB RDS for MySQL dan klien. Hal ini mencegah data dipantau, dicegat, atau dimanipulasi oleh pihak ketiga.
Setelah enkripsi SSL diaktifkan, Anda dapat menghubungkan klien ke instans RDS melalui koneksi terenkripsi SSL atau non-SSL. Setelah fitur forceful SSL encryption diaktifkan, Anda hanya dapat menghubungkan klien atau proxy ke instans RDS melalui koneksi terenkripsi SSL.
Saat Anda mengaktifkan enkripsi SSL untuk instans RDS, sistem akan menghasilkan sertifikat server, kunci publik, dan kunci privat.
Saat koneksi terenkripsi dibuat, sistem mengirimkan sertifikat server (termasuk kunci publik) ke klien. Klien kemudian mengenkripsi kunci simetris yang dihasilkan dengan menggunakan kunci publik tersebut. Selanjutnya, sistem menggunakan kunci privat untuk mendekripsi kunci simetris tersebut. Dengan demikian, instans RDS dan klien menggunakan kunci simetris yang sama untuk mengenkripsi dan mendekripsi data, sehingga menjamin kerahasiaan komunikasi. Klien juga dapat menggunakan sertifikat otoritas sertifikasi (CA certificate) untuk memverifikasi sertifikat server guna mengonfirmasi identitas instans RDS dan mencegah serangan man-in-the-middle.
Tabel berikut membandingkan konfigurasi dan manfaat enkripsi SSL dari berbagai jenis sertifikat.
Item | ||
Metode perolehan | Dikeluarkan oleh Alibaba Cloud. | Dikeluarkan oleh certification authority (CA) atau berasal dari self-signed certificate. |
Masa berlaku | 365 hari. | Disesuaikan. |
Jumlah titik akhir yang dilindungi | 1 | 1 |
Tujuan | Untuk mengaktifkan enkripsi SSL dan digunakan oleh client untuk mengautentikasi server. | Untuk mengaktifkan enkripsi SSL dan digunakan oleh client untuk mengautentikasi server. |
Dampak
Jika Anda mengaktifkan, menonaktifkan, atau memperbarui sertifikat SSL, instans RDS akan melakukan restart dan memicu switchover primary/secondary. Kami menyarankan Anda melakukan operasi ini selama jam sepi. Pastikan aplikasi Anda dikonfigurasi untuk terhubung ulang secara otomatis ke instans RDS. Anda dapat memodifikasi kode aplikasi agar mendukung koneksi ulang otomatis. Jika Anda memperbarui sertifikat SSL untuk instans RDS yang menjalankan MySQL 5.6 atau MySQL 5.7, instans RDS akan restart. Namun, jika Anda memperbarui sertifikat SSL untuk instans RDS yang menjalankan MySQL 8.0, instans RDS tidak akan restart. Untuk informasi lebih lanjut tentang dampak switchover instans, lihat Impacts of an instance switchover.
Setelah Anda mengaktifkan enkripsi SSL untuk instans RDS, koneksi terenkripsi akan meningkatkan penggunaan CPU secara signifikan. Kami menyarankan Anda hanya mengaktifkan fitur ini jika perlu mengenkripsi koneksi ke public endpoint instans RDS.
Setelah Anda mengaktifkan fitur forceful SSL encryption untuk instans RDS, Anda hanya dapat menghubungkan klien atau database proxy ke instans RDS melalui koneksi terenkripsi SSL. Koneksi non-SSL akan ditolak.
Versi TLS
Transport Layer Security (TLS) adalah protokol keamanan lapisan transport yang banyak digunakan untuk menjamin privasi dan keamanan data dalam komunikasi Internet. Tersedia beberapa versi TLS. Versi TLS yang didukung oleh instans ApsaraDB RDS for MySQL bervariasi tergantung pada major engine version instans tersebut.
Major engine version | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 |
8.0 | Didukung | Didukung | Didukung | Didukung (Mulai dari minor engine version 20221231) |
5.7 | Didukung | Didukung | Didukung | Tidak didukung |
5.6 | Didukung | Didukung | Didukung | Tidak didukung |
TLS 1.0 dan TLS 1.1 telah dinyatakan usang oleh Internet Engineering Task Force (IETF) pada tahun 2021. Untuk menjamin keamanan data, kami menyarankan Anda menggunakan TLSv1.2 atau versi yang lebih baru. Untuk informasi selengkapnya, lihat RFC 8996.
Konfigurasi ssl_cipher
ApsaraDB RDS for MySQL menggunakan OpenSSL untuk TLS guna menyediakan komunikasi aman. OpenSSL ditingkatkan ke OpenSSL 3.0 untuk instans RDS yang menjalankan MySQL 5.7 dengan minor engine version 20230831 dan instans RDS yang menjalankan MySQL 8.0 dengan minor engine version 20230930. Secara default, OpenSSL 3.0 tidak lagi mendukung komunikasi melalui TLSv1.0 dan TLSv1.1. Untuk informasi selengkapnya, lihat dokumentasi OpenSSL.
Untuk menjamin kompatibilitas data di ApsaraDB RDS for MySQL, nilai parameter ssl_cipher diubah menjadi "ALL:@SECLEVEL=0" agar mendukung TLSv1.0 dan TLSv1.1.
Jika beban kerja Anda hanya menggunakan TLSv1.2 atau versi yang lebih baru, kami menyarankan Anda mengatur parameter ssl_cipher menjadi string kosong ("") di konsol ApsaraDB RDS untuk menjamin keamanan yang lebih tinggi.
Langkah 1: Aktifkan fitur enkripsi SSL untuk instans RDS
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS tersebut dan klik ID-nya.
Di panel navigasi sebelah kiri, klik Data Security.
Pada tab SSL di halaman yang muncul, aktifkan sakelar di sebelah kiri Disabled.
CatatanJika tab SSL tidak muncul, pastikan instans RDS memenuhi semua persyaratan di bagian Prasyarat.
Pada kotak dialog yang muncul, pilih titik akhir yang ingin Anda lindungi lalu klik OK.
Anda dapat mengenkripsi koneksi ke internal endpoint atau public endpoint sesuai kebutuhan bisnis. Anda hanya dapat mengenkripsi koneksi ke satu titik akhir.
Opsional. Aktifkan Forceful Encryption untuk mengaktifkan fitur forceful SSL encryption.
PentingFitur forceful SSL encryption hanya dapat diaktifkan jika instans RDS Anda menjalankan MySQL 5.7 atau MySQL 8.0 dengan minor engine version 20241130 atau lebih baru.
Setelah Anda mengaktifkan fitur forceful SSL encryption untuk instans RDS, Anda hanya dapat menghubungkan klien atau database proxy ke instans RDS melalui koneksi terenkripsi SSL. Koneksi non-SSL akan ditolak.
Tunggu sekitar 1 menit hingga proses pengaktifan fitur enkripsi SSL selesai. Anda dapat menyegarkan halaman untuk melihat status fitur tersebut.
Langkah 2: Unduh CA certificate
Setelah Anda mengonfigurasi sertifikat cloud, instans RDS menyediakan CA certificate server yang dapat Anda unduh. Saat menghubungkan ke instans RDS dari klien, Anda dapat menggunakan CA certificate tersebut untuk mengautentikasi instans RDS.
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS tersebut dan klik ID-nya.
Di panel navigasi sebelah kiri halaman yang muncul, klik Data Security. Pada tab SSL, klik Download CA Certificate.
File yang Anda unduh merupakan paket yang berisi file-file berikut:
File PEM: cocok untuk sebagian besar skenario.
File JKS: cocok untuk aplikasi Java. Kata sandi file ini adalah apsaradb. Umumnya, file CA certificate berformat PEM harus diimpor ke truststore untuk dikonversi menjadi file JKS. Anda dapat menggunakan file JKS ini di aplikasi Java. Kata sandi file ini adalah apsaradb.
File P7B: cocok untuk sejumlah kecil aplikasi Windows yang memerlukan file sertifikat berformat PKCS#7.
Langkah 3: Hubungkan ke instans RDS dari client database
Setelah Anda mengaktifkan fitur enkripsi SSL, tipe dan pengaturan klien menentukan apakah koneksi antara klien dan instans RDS dienkripsi. Misalnya, koneksi dari klien ke instans RDS mungkin sudah dienkripsi secara default. Anda dapat memodifikasi pengaturan atau kode klien untuk mengaktifkan enkripsi koneksi dan memverifikasi identitas instans RDS.
Jika Anda mengaktifkan fitur forceful SSL encryption untuk instans RDS, Anda hanya dapat menghubungkan klien atau database proxy ke instans RDS melalui koneksi terenkripsi SSL.
CLI
Untuk klien yang menjalankan MySQL 5.7.11 atau versi lebih baru, Anda dapat menambahkan opsi --ssl-mode ke perintah koneksi untuk mengonfigurasi fitur enkripsi SSL.
Untuk klien yang menjalankan versi MySQL sebelum MySQL 5.7.11 dan klien MariaDB, Anda dapat menggunakan opsi seperti --ssl dan --ssl-verify-server-cert untuk mengonfigurasi fitur enkripsi SSL. Untuk informasi selengkapnya, lihat dokumentasi resmi MariaDB dan MySQL.
Jika opsi --ssl-mode diatur ke DISABLED, koneksi tidak dienkripsi.
Jika opsi --ssl-mode diatur ke PREFERRED atau tidak digunakan, sistem akan mencoba membuat koneksi terenkripsi. Jika gagal, koneksi non-terenkripsi akan dibuat.
Jika opsi --ssl-mode diatur ke REQUIRED, hanya koneksi terenkripsi yang diizinkan. Jika koneksi tidak dapat dienkripsi, koneksi akan gagal dibuat.
Jika opsi --ssl-mode diatur ke VERIFY_CA, hanya koneksi terenkripsi yang diizinkan, dan CA certificate di perangkat lokal harus digunakan untuk memverifikasi validitas sertifikat server.
Jika opsi --ssl-mode diatur ke VERIFY_IDENTITY, hanya koneksi terenkripsi yang diizinkan, dan CA certificate di perangkat lokal harus digunakan untuk memverifikasi validitas sertifikat server serta memastikan hostname atau alamat IP pada sertifikat server sesuai dengan hostname atau alamat IP koneksi aktual.
Contoh 1: Sistem mencoba membuat koneksi terenkripsi. Jika gagal, koneksi non-terenkripsi akan dibuat.
mysql -h {Endpoint of the RDS instance} -u {Account of the RDS instance} -p --ssl-mode=PREFERREDContoh 2: Koneksi terenkripsi wajib digunakan, dan validitas sertifikat server harus diverifikasi.
mysql -h {Endpoint of the RDS instance} -u {Account of the RDS instance} -p --ssl-mode=VERIFY_CA --ssl-ca={Path to the CA certificate}/ApsaraDB-CA-Chain.pemAnda harus mengonfigurasi parameter Endpoint of the RDS instance, Account of the RDS instance, dan Path to the CA certificate sesuai kebutuhan bisnis.
Untuk informasi selengkapnya tentang opsi --ssl-mode, lihat dokumentasi MySQL.
MySQL Workbench
Buka MySQL Workbench dan pilih .
Masukkan username dan password akun serta endpoint yang digunakan untuk menghubungkan ke instans RDS.
Pada tab SSL, konfigurasi parameter Use SSL, atur parameter SSL CA File ke CA certificate berformat PEM yang telah diunduh, lalu klik Test Connection atau OK.
Untuk informasi selengkapnya tentang opsi parameter Use SSL, lihat deskripsi opsi --ssl-mode di bagian "CLI" topik ini.
DMS
Saat mendaftarkan instans RDS ke Data Management (DMS), Anda dapat mengonfigurasi parameter Enable SSL. Untuk informasi selengkapnya, lihat Register an Alibaba Cloud database instance.
Anda juga dapat mengklik kanan instans, memilih Edit, lalu mengonfigurasi parameter Enable SSL di bagian Advanced Information.
Kode aplikasi
Java
MySQL Connector/J (mysql-connector-java) adalah driver JDBC resmi untuk MySQL. Pada contoh ini, mysql-connector-java 8.0.19 digunakan sebagai dependensi.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>Kode berikut memberikan contoh cara menggunakan properti sslMode untuk menentukan mode SSL. Properti ini didukung mulai dari mysql-connector-java 8.0.13. Jika Anda menggunakan versi sebelumnya, Anda harus menggunakan properti useSSL, requireSSL, dan verifyServerCertificate. Untuk informasi selengkapnya, lihat dokumentasi MySQL.
Kode contoh:
package com.aliyun.sample;
import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class Sample {
public static void main(String[] args) {
Connection conn = null;
MysqlDataSource mysqlDS=null;
try{
mysqlDS = new MysqlDataSource();
//Anda dapat menentukan properti sslMode sesuai kebutuhan bisnis. Untuk informasi selengkapnya tentang opsi properti ini, lihat deskripsi di bagian "CLI" topik ini.
mysqlDS.setSslMode("VERIFY_IDENTITY");
//Truststore digunakan untuk menyimpan CA certificate. Pada contoh ini, tipe truststore diatur ke JKS.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
//Anda harus mengganti konten setelah file:/ dengan path aktual ke file ApsaraDB-CA-Chain.jks Anda.
mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
//Kata sandi file JKS yang diunduh bersifat tetap, yaitu apsaradb.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
//Endpoint instans RDS Anda.
mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com");
//Nomor port instans RDS Anda.
mysqlDS.setPort(3306);
//Username akun yang digunakan untuk menghubungkan ke instans RDS Anda.
mysqlDS.setUser("xxxxxx");
//Password akun yang digunakan untuk menghubungkan ke instans RDS Anda.
mysqlDS.setPassword("xxxxxx");
//Nama database yang ingin Anda hubungkan pada instans RDS Anda.
mysqlDS.setDatabaseName("xxxxxx");
conn = mysqlDS.getConnection();
}catch(Exception e){
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}Python
# Jalankan perintah pip install pymysql untuk menginstal PyMySQL.
import pymysql
try:
ssl_config = {"ca":"/path/to/path/ca.crt", "mode":"VERIFY_CA"} # Anda harus mengatur ca ke path sertifikat dan mode ke mode SSL yang digunakan.
conn = pymysql.connect(host='******.mysql.rds.aliyuncs.com', user='*****', passwd='******', db='*****', ssl=ssl_config)
cursor = conn.cursor()
cursor.execute('select version()')
data = cursor.fetchone()
print('Versi database:', data[0])
cursor.close()
except pymysql.Error as e:
print(e)Langkah selanjutnya
Perbarui cloud certificate
Cloud certificate instans RDS berlaku selama satu tahun. Jika Anda tidak memperbarui cloud certificate setelah masa berlakunya habis, klien yang menggunakan koneksi terenkripsi tidak dapat terhubung ke instans RDS. Jika cloud certificate hampir kedaluwarsa, Alibaba Cloud akan memberi tahu Anda melalui email, atau pesan internal.
Anda dapat menentukan waktu pembaruan cloud certificate di kotak dialog Schedule Event. Sertifikat akan diperbarui secara otomatis dalam periode waktu yang ditentukan. Untuk informasi selengkapnya, lihat Manage scheduled events. Anda juga dapat melakukan langkah-langkah berikut untuk memperbarui sertifikat secara manual.
Setelah sertifikat cloud diperbarui secara otomatis, klien yang menggunakan koneksi terenkripsi dapat terhubung ke database tanpa perlu mengunduh atau mengonfigurasi ulang sertifikat CA.
Untuk informasi selengkapnya tentang cara memperbarui custom certificate, lihat Update the created custom certificate.
Jika Anda memperbarui sertifikat untuk instans RDS yang menjalankan MySQL 8.0, instans tidak akan restart. Jika Anda memperbarui sertifikat untuk instans RDS yang menjalankan MySQL 5.6 atau MySQL 5.7, instans akan restart.
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS tersebut dan klik ID-nya.
Di panel navigasi sebelah kiri, klik Data Security.
Di halaman yang muncul, klik tab SSL. Lalu, klik Update Expiration Time.
Lihat detail enkripsi koneksi
Lihat cipher suite yang digunakan oleh sesi saat ini. Jika nilai kembalian tidak kosong, koneksi saat ini dienkripsi.
SHOW STATUS LIKE 'Ssl_cipher';Lihat versi SSL atau TLS yang digunakan oleh sesi saat ini.
SHOW STATUS LIKE 'Ssl_version';Jika Anda menggunakan tool command-line MySQL, Anda dapat menjalankan perintah
\suntuk memeriksa apakah koneksi saat ini dienkripsi. Jika koneksi saat ini dienkripsi, nilai SSL pada output perintah akan menunjukkan cipher suite yang digunakan oleh koneksi tersebut.
Paksa penggunaan koneksi terenkripsi
Konfigurasikan server Anda untuk hanya menggunakan koneksi terenkripsi
Untuk informasi selengkapnya, lihat Langkah 1: Aktifkan fitur enkripsi SSL untuk instans RDS.
Konfigurasikan client Anda untuk hanya menggunakan koneksi terenkripsi
Pada contoh ini, digunakan tool command-line. Dalam perintah koneksi, atur mode SSL ke REQUIRED, VERIFY_CA, atau VERIFY_IDENTITY agar hanya menggunakan koneksi terenkripsi. Jika koneksi tidak dapat dienkripsi, koneksi akan gagal dibuat.
Konfigurasikan pengguna tertentu untuk hanya menggunakan koneksi terenkripsi
Pada contoh ini, pengguna testuser dikonfigurasi untuk hanya menggunakan koneksi terenkripsi.
ALTER USER 'testuser'@'%' REQUIRE SSL;Lihat isi CA certificate
Jalankan perintah berikut untuk melihat isi CA certificate:
openssl x509 -in {Path to the CA certificate}/ApsaraDB-CA-Chain.pem -textNonaktifkan fitur enkripsi SSL
Jika Anda menonaktifkan fitur enkripsi SSL, instans RDS Anda akan restart. Dalam hal ini, sistem akan memicu switchover primary/secondary untuk mengurangi dampak pada beban kerja Anda. Kami menyarankan Anda menonaktifkan fitur enkripsi SSL selama jam sepi.
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS tersebut dan klik ID-nya.
Di panel navigasi sebelah kiri, klik Data Security.
Di halaman yang muncul, klik tab SSL.
Nonaktifkan SSL Encryption. Pada pesan yang muncul, klik OK.
FAQ
Fitur
Bagaimana cara menerapkan mutual authentication yang memverifikasi identitas server dan client?
Pada ApsaraDB RDS for MySQL, identitas client tidak dapat diverifikasi selama SSL handshake. Anda dapat menggunakan daftar putih dan manajemen akun untuk menerapkan kontrol akses.
Bagaimana cara mengonfigurasi enkripsi SSL untuk read/write splitting endpoint?
Untuk informasi selengkapnya, lihat Configure SSL encryption for a database proxy endpoint.