Fitur enkripsi Secure Sockets Layer (SSL) untuk ApsaraDB RDS for MySQL mengenkripsi data yang sedang ditransmisikan guna meningkatkan keamanan koneksi database dan memenuhi persyaratan kepatuhan. Secara default, enkripsi SSL dinonaktifkan untuk instans ApsaraDB RDS for MySQL. Topik ini menjelaskan cara mengaktifkan enkripsi SSL dengan sertifikat cloud.
Prasyarat
Enkripsi SSL didukung pada versi MySQL berikut: 8.4, 8.0, 5.7, atau 5.6.
Enkripsi SSL paksa didukung pada versi instans ApsaraDB RDS for MySQL berikut:
MySQL 8.4
MySQL 8.0 atau 5.7 dengan versi mesin minor 20241130 atau lebih baru
Anda dapat melihat informasi ini di halaman Basic Information instans Anda.
Jika Anda mengonversi instans Edisi Dasar non-serverless menjadi instans serverless, Anda harus mengaktifkan ulang enkripsi SSL.
Beberapa instans yang memenuhi persyaratan di atas mungkin mengembalikan error yang menunjukkan bahwa SSL tidak didukung. Jika hal ini terjadi, tingkatkan versi mesin minor dan coba lagi.
Ikhtisar
Enkripsi SSL mengenkripsi data yang sedang ditransmisikan antara instans ApsaraDB RDS for MySQL dan client untuk mencegah data tersebut dipantau, dicegat, atau dimanipulasi.
Setelah Anda mengaktifkan enkripsi SSL, Anda dapat memilih untuk menggunakan koneksi terenkripsi atau tidak terenkripsi ke instans ApsaraDB RDS for MySQL. Setelah Anda mengaktifkan enkripsi SSL paksa, hanya koneksi terenkripsi SSL dari client atau database proxy yang diizinkan ke instans ApsaraDB RDS for MySQL.
Saat Anda mengaktifkan enkripsi SSL, ApsaraDB RDS for MySQL menghasilkan sertifikat server dan pasangan kunci publik-privat.
Saat membangun koneksi terenkripsi, instans ApsaraDB RDS for MySQL mengirimkan sertifikat server yang berisi kunci publik ke client. Client menggunakan kunci publik ini untuk mengenkripsi kunci simetris. Hanya instans ApsaraDB RDS for MySQL yang memiliki kunci privat yang dapat mendekripsi kunci simetris tersebut. Kedua pihak kemudian menggunakan kunci simetris ini untuk mengenkripsi dan mendekripsi data, sehingga menjamin kerahasiaan komunikasi. Untuk mencegah serangan man-in-the-middle (MITM), client juga dapat menggunakan sertifikat CA untuk memvalidasi sertifikat server dan mengonfirmasi keaslian server.
Tabel berikut membandingkan konfigurasi enkripsi SSL yang didukung oleh instans ApsaraDB RDS for MySQL.
Item | ||
Metode | Konfigurasikan sertifikat cloud untuk instans Anda. | Diterbitkan oleh certificate authority (CA) atau self-signed. |
Periode validitas | 365 hari | Custom |
Jumlah titik akhir yang dilindungi | 1 | 1 |
Fungsi | Mengaktifkan enkripsi SSL dan memungkinkan client memverifikasi keaslian server. | Mengaktifkan enkripsi SSL dan memungkinkan client memverifikasi keaslian server. |
Dampak
Mengaktifkan atau menonaktifkan enkripsi SSL akan me-restart instans untuk semua versi, yang memicu alih bencana primary/secondary. Kami menyarankan agar Anda melakukan operasi ini selama jam sepi dan memastikan aplikasi Anda memiliki mekanisme penghubungan ulang otomatis. Untuk informasi lebih lanjut mengenai dampak alih bencana instans, lihat Dampak alih bencana.
Saat Anda memperbarui sertifikat, instans yang menjalankan MySQL 5.6, 5.7, atau 8.4 akan direstart. Instans yang menjalankan MySQL 8.0 tidak direstart.
Setelah Anda mengaktifkan enkripsi SSL, penggunaan koneksi terenkripsi secara signifikan meningkatkan pemanfaatan CPU. Kami menyarankan agar Anda hanya mengaktifkan enkripsi SSL ketika Anda memerlukan enkripsi untuk titik akhir publik. Titik akhir internal relatif aman dan biasanya tidak memerlukan enkripsi.
Setelah Anda mengaktifkan enkripsi SSL paksa, hanya koneksi terenkripsi SSL dari client atau database proxy yang diizinkan. Koneksi tidak terenkripsi akan ditolak.
Versi TLS
Transport Layer Security (TLS) adalah protokol yang banyak digunakan untuk menjamin privasi dan integritas data dalam komunikasi internet. Protokol TLS memiliki beberapa versi. Tabel berikut menjelaskan versi TLS yang didukung oleh berbagai versi utama ApsaraDB RDS for MySQL.
ApsaraDB RDS untuk MySQL | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 |
8.4 | Tidak didukung | Tidak didukung | Didukung | Didukung |
8.0 | Didukung | Didukung | Didukung | Didukung (Sejak versi mesin minor 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 (RFC 8996). Untuk alasan keamanan, kami menyarankan agar Anda menggunakan TLS 1.2 atau versi yang lebih baru untuk komunikasi yang aman.
Konfigurasi ssl_cipher default
ApsaraDB RDS for MySQL menggunakan OpenSSL untuk mengimplementasikan komunikasi TLS yang aman. Pada versi mesin minor 20230831 untuk MySQL 5.7 dan versi mesin minor 20230930 untuk MySQL 8.0, ApsaraDB RDS for MySQL ditingkatkan ke OpenSSL 3.0. Secara default, OpenSSL 3.0 tidak mendukung komunikasi menggunakan TLS 1.0 atau TLS 1.1. Untuk informasi lebih lanjut, lihat dokumentasi resmi OpenSSL.
Untuk kompatibilitas, ApsaraDB RDS for MySQL menyesuaikan nilai default parameter ssl_cipher menjadi "ALL:@SECLEVEL=0" untuk mengembalikan dukungan terhadap TLS 1.0 dan TLS 1.1.
Jika beban kerja Anda hanya menggunakan TLS 1.2 atau versi yang lebih baru, kami menyarankan agar Anda mengatur parameter ssl_cipher ke "" (string kosong) di konsol ApsaraDB RDS untuk mencapai tingkat keamanan yang lebih tinggi.
Langkah 1: Aktifkan enkripsi SSL
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS dan klik ID instans tersebut.
Di panel navigasi kiri, klik Data Security.
Di tab SSL Encryption, klik sakelar di samping Disabled.
CatatanJika tab SSL tidak muncul, periksa apakah instans Anda memenuhi persyaratan di bagian Prasyarat.
Pada kotak dialog yang muncul, pilih titik akhir yang ingin Anda aktifkan enkripsi SSL-nya.
Anda dapat mengenkripsi titik akhir internal atau titik akhir publik, tetapi hanya dapat memilih satu titik akhir.
(Opsional) Untuk mengaktifkan enkripsi SSL paksa, klik sakelar di samping Forceful Encryption.
PentingUntuk mengaktifkan enkripsi SSL paksa, instans harus menjalankan MySQL 8.4, atau MySQL 8.0 atau 5.7 dengan versi mesin minor 20241130 atau lebih baru.
Setelah Anda mengaktifkan enkripsi SSL paksa, hanya koneksi terenkripsi SSL dari client atau database proxy yang diizinkan. Koneksi tidak terenkripsi akan ditolak.
Klik OK untuk mengaktifkan enkripsi SSL.
Proses ini membutuhkan waktu sekitar satu menit. Anda dapat merefresh halaman secara manual untuk melihat status instans.
Langkah 2: Unduh sertifikat CA
Setelah Anda mengaktifkan enkripsi SSL, Anda dapat mengunduh sertifikat CA untuk instans ApsaraDB RDS for MySQL. Client menggunakan sertifikat ini untuk memverifikasi keaslian instans RDS.
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS dan klik ID instans tersebut.
Di panel navigasi kiri, klik Data Security. Di tab SSL, klik Download CA Certificate.
File yang diunduh merupakan paket terkompresi yang berisi tiga file CA berikut:
File PEM: cocok untuk sebagian besar skenario.
File JKS: cocok untuk aplikasi Java. Kata sandinya adalah
apsaradb. Sertifikat CA dalam format PEM biasanya harus diimpor ke truststore, artinya harus dikonversi ke file JKS sebelum dapat digunakan di Java.File p7b: cocok untuk beberapa aplikasi Windows yang memerlukan file sertifikat PKCS #7.
Langkah 3: Terhubung dari client
Setelah Anda mengaktifkan enkripsi SSL, apakah koneksi client dienkripsi atau tidak bergantung pada jenis dan pengaturan client tersebut. Misalnya, beberapa client mungkin menggunakan koneksi terenkripsi secara default. Anda dapat mengubah pengaturan atau kode client untuk memastikan koneksi terenkripsi dibuat dan identitas instans ApsaraDB RDS for MySQL diverifikasi.
Jika Anda mengaktifkan enkripsi SSL paksa, hanya koneksi terenkripsi SSL yang diizinkan antara client dan instans ApsaraDB RDS for MySQL.
CLI
Untuk client MySQL versi 5.7.11 atau lebih baru, Anda dapat menambahkan opsi --ssl-mode ke perintah koneksi untuk mengonfigurasi enkripsi SSL.
Untuk client MariaDB dan client MySQL versi sebelum 5.7.11, gunakan opsi seperti --ssl dan --ssl-verify-server-cert. Untuk informasi lebih lanjut, lihat dokumentasi resmi MariaDB dan MySQL.
--ssl-mode=DISABLED: Koneksi tidak dienkripsi.--ssl-mode=PREFERREDatau jika opsi--ssl-modetidak ditentukan: Upaya dilakukan untuk membuat koneksi terenkripsi. Jika koneksi terenkripsi tidak dapat dibuat, koneksi tidak terenkripsi akan digunakan.--ssl-mode=REQUIRED: Koneksi terenkripsi wajib digunakan. Jika koneksi terenkripsi tidak dapat dibuat, koneksi gagal.--ssl-mode=VERIFY_CA: Koneksi terenkripsi wajib digunakan, dan client menggunakan sertifikat CA lokalnya untuk memverifikasi sertifikat server.--ssl-mode=VERIFY_IDENTITY: Koneksi terenkripsi wajib digunakan. Client menggunakan sertifikat CA lokalnya untuk memverifikasi sertifikat server dan juga memverifikasi bahwa hostname atau alamat IP server sesuai dengan yang ditentukan dalam sertifikat.
Contoh 1: Upaya membuat koneksi terenkripsi. Jika koneksi terenkripsi tidak dapat dibuat, gunakan koneksi tidak terenkripsi.
mysql -h {RDS_ENDPOINT} -u {RDS_ACCOUNT} -p --ssl-mode=PREFERREDContoh 2: Wajibkan koneksi terenkripsi dan verifikasi sertifikat server.
mysql -h {RDS_ENDPOINT} -u {RDS_ACCOUNT} -p --ssl-mode=VERIFY_CA --ssl-ca={CA_CERTIFICATE_PATH}/ApsaraDB-CA-Chain.pemPada contoh di atas, ganti {RDS_ENDPOINT}, {RDS_ACCOUNT}, dan {CA_CERTIFICATE_PATH} dengan nilai aktualnya.
Untuk informasi lebih lanjut mengenai opsi
--ssl-mode, lihat dokumentasi resmi MySQL.
MySQL Workbench
Buka MySQL Workbench dan pilih Database > Manage Connections.
Masukkan titik akhir RDS, username, dan password.
Di tab SSL, atur Use SSL, tentukan SSL CA File sebagai sertifikat CA yang diunduh dalam format PEM, lalu klik Test Connection atau ok.
Opsi untuk parameter Use SSL sesuai dengan opsi --ssl-mode yang dijelaskan di bagian CLI.
Data Management (DMS)
Saat Anda mendaftarkan instans ApsaraDB RDS for MySQL di Data Management (DMS), Anda dapat mengaktifkan sakelar Enable SSL. Untuk informasi lebih lanjut, lihat Daftarkan instans database Alibaba Cloud.
Anda juga dapat mengklik kanan instans terdaftar yang sudah ada, memilih Edit, lalu mengonfigurasi pengaturan di tab Advanced Information.
Kode aplikasi
Java
Connector/J (mysql-connector-java) adalah driver JDBC resmi untuk MySQL. Contoh ini menggunakan mysql-connector-java 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 telah didukung sejak mysql-connector-java 8.0.13. Jika Anda menggunakan versi sebelumnya, Anda harus menggunakan properti useSSL, requireSSL, dan verifyServerCertificate. Untuk informasi lebih lanjut, 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();
// Atur sslMode sesuai kebutuhan. Untuk opsi, lihat bagian CLI.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// Truststore menyimpan sertifikat CA. Contoh ini menggunakan format JKS.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Ganti path setelah file:/ dengan path ke file ApsaraDB-CA-Chain.jks Anda.
mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\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("rm-xxxxxx.mysql.rds.aliyuncs.com");
// Port database Anda
mysqlDS.setPort(3306);
// Akun database Anda
mysqlDS.setUser("xxxxxx");
// Kata sandi database Anda
mysqlDS.setPassword("xxxxxx");
// Nama database 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
# Instal pymysql: pip install pymysql
import pymysql
try:
# ca: Path ke file sertifikat CA. mode: Mode SSL yang digunakan.
ssl_config = {"ca":"/path/to/path/ca.crt", "mode":"VERIFY_CA"}
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)Tindakan Lainnya
Perbarui sertifikat cloud
Sertifikat cloud untuk instans ApsaraDB RDS for MySQL memiliki periode validitas 1 tahun. Jika sertifikat tidak diperbarui setelah kedaluwarsa, aplikasi client yang menggunakan koneksi terenkripsi tidak dapat terhubung ke instans tersebut. Sebelum sertifikat kedaluwarsa, Alibaba Cloud akan mengirimi Anda notifikasi melalui email, dan pesan internal di Message Center.
Anda dapat menggunakan Schedule Event untuk menyesuaikan waktu pembaruan otomatis sertifikat cloud instans ApsaraDB RDS for MySQL Anda. Untuk informasi lebih lanjut, lihat Scheduled events. Anda juga dapat memperbarui periode validitas sertifikat secara manual.
Setelah sertifikat cloud diperbarui secara otomatis, aplikasi client yang menggunakan koneksi terenkripsi tidak perlu mengunduh dan mengonfigurasi ulang sertifikat CA.
Untuk memperbarui sertifikat custom, lihat Perbarui sertifikat custom.
Memperbarui sertifikat untuk instans MySQL 8.0 tidak me-restart instans. Memperbarui sertifikat untuk instans MySQL 5.6, 5.7, atau 8.4 akan me-restart instans.
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS dan klik ID instans tersebut.
Di panel navigasi kiri, klik Data Security.
Klik tab SSL, lalu klik Update Expiration Time.
Periksa status enkripsi koneksi
Periksa paket sandi yang digunakan oleh sesi saat ini. Jika nilai dikembalikan, koneksi saat ini dienkripsi.
SHOW STATUS LIKE 'Ssl_cipher';Periksa versi SSL/TLS yang digunakan oleh sesi saat ini.
SHOW STATUS LIKE 'Ssl_version';Jika Anda menggunakan client command-line MySQL, Anda juga dapat menjalankan perintah
\suntuk memeriksa apakah koneksi saat ini dienkripsi. Jika koneksi dienkripsi, nilai SSL yang dikembalikan menunjukkan paket sandi saat ini.
Paksakan koneksi terenkripsi
Konfigurasikan server agar hanya mengizinkan koneksi terenkripsi
Hal ini didukung. Untuk informasi lebih lanjut, lihat Langkah 1: Aktifkan enkripsi SSL untuk instans ApsaraDB RDS for MySQL.
Konfigurasikan client agar hanya mengizinkan koneksi terenkripsi
Misalnya, jika Anda menggunakan client command-line, atur mode SSL ke REQUIRED, VERIFY_CA, atau VERIFY_IDENTITY dalam perintah koneksi. Hal ini hanya mengizinkan koneksi terenkripsi. Jika koneksi terenkripsi tidak dapat dibuat, koneksi gagal.
Konfigurasikan pengguna tertentu agar hanya menggunakan koneksi terenkripsi
Misalnya, perintah berikut mengonfigurasi akun testuser agar hanya menggunakan koneksi terenkripsi.
ALTER USER 'testuser'@'%' REQUIRE SSL;Lihat isi sertifikat CA
Jalankan perintah berikut untuk melihat isi sertifikat CA.
openssl x509 -in {path_to_the_CA_certificate}/ApsaraDB-CA-Chain.pem -textNonaktifkan enkripsi SSL
Menonaktifkan enkripsi SSL akan me-restart instans RDS Anda. Sistem memicu alih bencana primary/secondary untuk mengurangi dampaknya. Namun, lakukan operasi ini selama jam sepi.
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS berada. Lalu, temukan instans RDS dan klik ID instans tersebut.
Di panel navigasi kiri, klik Data Security.
Klik tab SSL.
Matikan sakelar di samping Enabled. Pada pesan yang muncul, klik OK.
FAQ
Fungsionalitas
Q1: Bagaimana cara menerapkan autentikasi dua arah? Artinya, mengautentikasi client selain server.
A: ApsaraDB RDS for MySQL tidak mendukung autentikasi client selama handshake SSL. Gunakan daftar izin dan manajemen akun untuk mengontrol akses.
Q2: Bagaimana cara mengenkripsi titik akhir pemisahan baca/tulis?
A: Untuk informasi lebih lanjut, lihat Atur enkripsi SSL proksi.
Q3: Bagaimana cara menonaktifkan SSL?
A: Untuk informasi lebih lanjut, lihat Nonaktifkan enkripsi SSL.