Enkripsi SSL mengamankan data yang sedang ditransmisikan antara instans ApsaraDB RDS for MySQL dan klien, mencegah pemantauan, penyadapan, dan perubahan data. Secara default, enkripsi SSL dinonaktifkan.
Topik ini menjelaskan cara:
Mengaktifkan enkripsi SSL (dan secara opsional memaksa semua koneksi menggunakan SSL)
Mengunduh sertifikat CA
Mengonfigurasi klien — CLI, MySQL Workbench, DMS, Java, dan Python — untuk terhubung melalui SSL
Prasyarat
Sebelum memulai, pastikan bahwa:
Instans RDS Anda menjalankan salah satu versi dan edisi MySQL berikut untuk menggunakan SSL encryption:
MySQL version
RDS High-availability Edition
RDS Cluster Edition
RDS Basic Edition
8.0
Supported
Supported
Supported
5.7
Supported
Supported
Supported
5.6
Supported
—
—
Instans RDS Anda memenuhi kedua persyaratan berikut untuk menggunakan forceful SSL encryption:
Menjalankan MySQL 8.4, 8.0, atau 5.7 pada Edisi Dasar, Edisi Ketersediaan Tinggi, atau Edisi Kluster
Menjalankan versi mesin minor 20241130 atau lebih baru
Periksa detail ini di halaman Basic Information instans RDS Anda. Jika instans Anda memenuhi persyaratan tetapi tab SSL tidak muncul, perbarui versi mesin minor. Untuk detailnya, lihat Upgrade the minor engine version. Jika Anda mengubah metode penagihan instans RDS non-serverless yang menjalankan Edisi Dasar menjadi serverless, Anda harus mengaktifkan ulang enkripsi SSL.
Dampak potensial
Perilaku restart dan switchover:
Operation | MySQL 5.6 or 5.7 | MySQL 8.0 |
Enable SSL | Restarts; triggers primary/secondary switchover | Restarts; triggers primary/secondary switchover |
Disable SSL | Restarts; triggers primary/secondary switchover | Restarts; triggers primary/secondary switchover |
Update certificate | Restarts | Does not restart |
Lakukan operasi ini selama jam sepi, dan konfigurasikan aplikasi Anda agar terhubung ulang secara otomatis setelah restart.
CPU overhead: Koneksi yang dienkripsi SSL meningkatkan pemanfaatan CPU secara signifikan. Aktifkan SSL hanya untuk endpoint yang memerlukan enkripsi — biasanya endpoint publik.
Forceful SSL: Setelah mengaktifkan enkripsi SSL paksa, koneksi non-SSL dari klien dan proxy database akan ditolak.
Cara kerja
Saat Anda mengaktifkan enkripsi SSL, instans RDS menghasilkan sertifikat server, kunci publik, dan kunci privat.
Selama handshake SSL:
Instans RDS mengirimkan sertifikat server (termasuk kunci publik) ke klien.
Klien mengenkripsi kunci simetris menggunakan kunci publik yang diterima.
Instans RDS mendekripsi kunci simetris menggunakan kunci privatnya.
Kedua pihak menggunakan kunci simetris untuk mengenkripsi dan mendekripsi data.
Secara opsional, klien dapat memverifikasi sertifikat server terhadap sertifikat otoritas sertifikat (CA) untuk mengonfirmasi identitas server dan mencegah serangan man-in-the-middle.
Dukungan versi TLS
MySQL version | TLSv1.0 | TLSv1.1 | TLSv1.2 | TLSv1.3 |
8.0 | Supported | Supported | Supported | Supported (minor version 20221231 atau lebih baru) |
5.7 | Supported | Supported | Supported | Not supported |
5.6 | Supported | Supported | Supported | Not supported |
TLS 1.0 dan TLS 1.1 telah dinyatakan usang oleh Internet Engineering Task Force (IETF) pada tahun 2021. Gunakan TLSv1.2 atau versi yang lebih baru. Untuk detailnya, lihat RFC 8996.
Konfigurasi ssl_cipher
ApsaraDB RDS for MySQL menggunakan OpenSSL untuk TLS. OpenSSL ditingkatkan ke OpenSSL 3.0 untuk:
Instans MySQL 5.7 yang menjalankan versi mesin minor 20230831
Instans MySQL 8.0 yang menjalankan versi mesin minor 20230930
OpenSSL 3.0 tidak lagi mendukung TLSv1.0 dan TLSv1.1 secara default. Untuk menjaga kompatibilitas, parameter ssl_cipher secara default diatur ke "ALL:@SECLEVEL=0", yang mengaktifkan kembali TLSv1.0 dan TLSv1.1.
Jika beban kerja Anda hanya menggunakan TLSv1.2 atau versi yang lebih baru, atur ssl_cipher ke string kosong ("") di konsol ApsaraDB RDS untuk keamanan yang lebih kuat.
Jenis sertifikat
Kedua jenis sertifikat melindungi satu endpoint dan memiliki tujuan yang sama: mengaktifkan enkripsi SSL dan memungkinkan klien mengotentikasi server.
Cloud certificate | Custom certificate | |
Issued by | Alibaba Cloud | A CA or self-signed |
Validity period | 365 days | Customized |
Protected endpoints | 1 | 1 |
Topik ini membahas sertifikat cloud. Untuk menggunakan sertifikat kustom, lihat Configure a custom certificate.
Langkah 1: Aktifkan enkripsi SSL
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instans RDS Anda berada. Temukan instans tersebut dan klik ID-nya.
Di panel navigasi kiri, klik Data Security.
Di tab SSL, aktifkan sakelar di samping Disabled.
Jika tab SSL tidak muncul, periksa apakah instans Anda memenuhi semua persyaratan yang tercantum di bagian Prasyarat.
Pada kotak dialog yang muncul, pilih endpoint yang akan dilindungi — baik endpoint internal maupun publik — lalu klik OK. Hanya satu endpoint yang dapat dilindungi dalam satu waktu.
(Opsional) Aktifkan Forceful Encryption.
PentingEnkripsi SSL paksa memerlukan MySQL 8.4, 8.0, atau 5.7 dan versi mesin minor 20241130 atau lebih baru. Setelah mengaktifkan enkripsi SSL paksa, hanya koneksi yang dienkripsi SSL yang diterima. Koneksi non-SSL dari klien dan proxy database akan ditolak.
Tunggu sekitar 1 menit hingga proses selesai. Muat ulang halaman untuk mengonfirmasi fitur telah diaktifkan.
CatatanEnkripsi SSL untuk instans hanya baca bersifat independen dari instans utama. Mengaktifkan enkripsi SSL pada instans utama tidak secara otomatis mengaktifkannya pada instans hanya baca terkait. Untuk mengaktifkan enkripsi SSL pada instans hanya baca, buka halaman detail instans hanya baca tersebut, klik Data Security > SSL, lalu aktifkan enkripsi SSL secara manual.
Langkah 2: Unduh sertifikat CA
Buka halaman Instances, temukan instans Anda, lalu klik ID-nya.
Di panel navigasi kiri, klik Data Security. Di tab SSL, klik Download CA Certificate.
Paket yang diunduh berisi tiga file:
File | Format | Gunakan saat |
| PEM | Sebagian besar skenario |
| JKS (Java KeyStore) | Aplikasi Java; password adalah |
| P7B (PKCS#7) | Aplikasi Windows yang memerlukan format PKCS#7 |
Langkah 3: Terhubung menggunakan SSL
Setelah mengaktifkan enkripsi SSL, konfigurasikan klien Anda untuk terhubung melalui koneksi terenkripsi. Mode SSL yang tersedia adalah:
Mode | Behavior |
| Koneksi tidak dienkripsi |
| Mencoba koneksi terenkripsi; kembali ke koneksi tanpa enkripsi jika SSL tidak tersedia |
| Memerlukan koneksi terenkripsi; gagal jika enkripsi tidak tersedia |
| Memerlukan enkripsi dan memverifikasi sertifikat server terhadap sertifikat CA |
| Memerlukan enkripsi, memverifikasi sertifikat server, dan memverifikasi bahwa hostname sertifikat sesuai dengan koneksi aktual |
Jika enkripsi SSL paksa diaktifkan, hanya mode REQUIRED, VERIFY_CA, atau VERIFY_IDENTITY yang memungkinkan koneksi.
CLI
Untuk klien MySQL 5.7.11 atau versi lebih baru, gunakan opsi --ssl-mode.
Terhubung tanpa memverifikasi sertifikat server:
mysql -h <endpoint> -u <username> -p --ssl-mode=PREFERREDTerhubung dan verifikasi sertifikat server:
mysql -h <endpoint> -u <username> -p \
--ssl-mode=VERIFY_CA \
--ssl-ca=<path-to-certificate>/ApsaraDB-CA-Chain.pemGanti <endpoint>, <username>, dan <path-to-certificate> dengan nilai aktual Anda.
Untuk klien MySQL versi sebelum 5.7.11 dan klien MariaDB, gunakan--ssldan--ssl-verify-server-certsebagai gantinya. Lihat dokumentasi resmi MySQL dan MariaDB untuk detailnya.
MySQL Workbench
Buka MySQL Workbench dan pilih Database > Manage Connections.
Masukkan endpoint koneksi, username, dan password.
Di tab SSL, atur Use SSL ke mode yang diinginkan. Atur SSL CA File ke path file PEM yang diunduh, lalu klik Test Connection atau OK.
DMS
Saat mendaftarkan instans RDS Anda ke Data Management (DMS), konfigurasikan parameter Enable SSL. Untuk detailnya, lihat Register an Alibaba Cloud database instance.
Untuk memperbarui pengaturan pendaftaran yang sudah ada, klik kanan instans tersebut, pilih Edit, lalu konfigurasikan Enable SSL di bawah Advanced Information.
Kode aplikasi
Java
MySQL Connector/J (mysql-connector-java) adalah driver JDBC resmi untuk MySQL. Contoh ini menggunakan versi 8.0.19.
Tambahkan dependensi berikut:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>Properti sslMode didukung mulai mysql-connector-java 8.0.13. Untuk versi sebelumnya, gunakan properti useSSL, requireSSL, dan verifyServerCertificate sebagai gantinya. Lihat dokumentasi MySQL Connector/J.
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();
// Setel mode SSL. Opsi: DISABLED, PREFERRED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// Truststore menyimpan sertifikat CA. Contoh ini menggunakan format JKS.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Ganti dengan path aktual ke ApsaraDB-CA-Chain.jks di sistem Anda.
mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
// Kata sandi file JKS selalu apsaradb.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// Ganti nilai berikut dengan detail instans RDS Anda yang sebenarnya.
mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com"); // Endpoint RDS
mysqlDS.setPort(3306);
mysqlDS.setUser("xxxxxx"); // Username akun database
mysqlDS.setPassword("xxxxxx"); // Password akun database
mysqlDS.setDatabaseName("xxxxxx"); // Nama database
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:
ssl_config = {
"ca": "/path/to/ApsaraDB-CA-Chain.pem", # Path ke sertifikat CA
"mode": "VERIFY_CA" # Mode SSL
}
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)Operasi tambahan
Perbarui sertifikat cloud
Sertifikat cloud berlaku selama satu tahun. Jika sertifikat kedaluwarsa sebelum diperpanjang, klien yang menggunakan koneksi terenkripsi tidak dapat terhubung. Alibaba Cloud mengirimkan notifikasi kedaluwarsa melalui email atau pesan internal.
Untuk menjadwalkan perpanjangan otomatis, gunakan kotak dialog Schedule Event. Untuk detailnya, lihat Manage scheduled events.
Setelah perpanjangan otomatis, klien tidak perlu mengunduh ulang atau mengonfigurasi ulang sertifikat CA.
Untuk memperbarui sertifikat secara manual:
Memperbarui sertifikat akan merestart instans yang menjalankan MySQL 5.6 atau 5.7. Instans yang menjalankan MySQL 8.0 tidak direstart.
Buka halaman Instances, temukan instans Anda, lalu klik ID-nya.
Di panel navigasi kiri, klik Data Security.
Di tab SSL, klik Update Expiration Time.
Verifikasi koneksi terenkripsi
Jalankan pernyataan SQL berikut untuk memeriksa koneksi saat ini:
-- Periksa paket sandi yang digunakan oleh sesi saat ini.
-- Hasil yang tidak kosong mengonfirmasi koneksi dienkripsi.
SHOW STATUS LIKE 'Ssl_cipher';
-- Periksa versi TLS yang digunakan oleh sesi saat ini.
SHOW STATUS LIKE 'Ssl_version';Di CLI MySQL, jalankan \s untuk melihat detail koneksi. Jika koneksi dienkripsi, bidang SSL akan menampilkan paket sandi yang digunakan.
Wajibkan SSL untuk pengguna tertentu
ALTER USER 'testuser'@'%' REQUIRE SSL;Lihat isi sertifikat CA
openssl x509 -in <path-to-certificate>/ApsaraDB-CA-Chain.pem -textNonaktifkan enkripsi SSL
Menonaktifkan SSL akan merestart instans RDS dan memicu switchover primary/secondary. Lakukan operasi ini selama jam sepi.
Buka halaman Instances, temukan instans Anda, lalu klik ID-nya.
Di panel navigasi kiri, klik Data Security.
Di tab SSL, nonaktifkan SSL Encryption. Di dialog konfirmasi, klik OK.
FAQ
Apakah saya dapat mengonfigurasi autentikasi timbal balik yang memverifikasi identitas server dan klien?
ApsaraDB RDS for MySQL tidak mendukung verifikasi identitas klien selama handshake SSL. Gunakan daftar putih dan manajemen akun untuk mengontrol akses.
Bagaimana cara mengonfigurasi enkripsi SSL untuk endpoint pemisahan baca/tulis?
Lihat Mengonfigurasi enkripsi SSL untuk titik akhir proxy database.
Aplikasi Java: `javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints`
Galat ini terjadi dengan pengaturan keamanan JDK 7 atau JDK 8 default. Di file jre/lib/security/java.security pada host aplikasi Anda, atur:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024Aplikasi Java: `javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)`
MySQL Connector/J 8.0.18 dan versi sebelumnya menonaktifkan TLSv1.2 saat terhubung ke instans MySQL 5.6 atau 5.7. Perbaiki masalah ini dengan salah satu opsi berikut:
Tingkatkan MySQL Connector/J ke versi 8.0.19 atau lebih baru
Tingkatkan instans RDS ke MySQL 8.0
Tentukan versi TLS secara eksplisit dengan mengatur
enabledTLSProtocolsatautlsVersionskeTLSv1.2dalam konfigurasi koneksi Anda