Topik ini menjelaskan cara menghubungkan ke instans ApsaraDB RDS for MySQL menggunakan MySQL CLI atau JDBC setelah Anda mengaktifkan enkripsi SSL.
Prasyarat
Enkripsi SSL telah diaktifkan. Jika belum, lihat Aktifkan enkripsi SSL dengan cepat menggunakan sertifikat cloud atau Aktifkan enkripsi SSL menggunakan sertifikat kustom.
Anda memiliki Sertifikat CA database. Untuk mendapatkan sertifikat tersebut, lihat Unduh Sertifikat CA atau Aktifkan enkripsi SSL menggunakan sertifikat kustom.
Prosedur
Hubungkan ke MySQL menggunakan sertifikat cloud
Setelah Anda mengaktifkan enkripsi SSL, apakah koneksi antara klien dan instans ApsaraDB RDS for MySQL dienkripsi bergantung pada jenis klien dan konfigurasinya. Anda dapat memodifikasi pengaturan klien atau kode aplikasi untuk mewajibkan koneksi terenkripsi serta memverifikasi identitas instans.
Instans yang menjalankan MySQL 8.4, 8.0, atau 5.7 dengan versi mesin minor 20241130 atau lebih baru mendukung enkripsi SSL wajib. Jika Anda mengaktifkan enkripsi SSL wajib, klien hanya dapat terhubung ke instans melalui koneksi ber-SSL.
MySQL CLI
Untuk klien yang menjalankan MySQL 5.7.11 atau versi lebih baru, Anda dapat menambahkan opsi --ssl-mode ke perintah koneksi untuk mengonfigurasi enkripsi SSL.
Untuk klien MariaDB dan klien MySQL yang menjalankan 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=PREFERRED atau tanpa opsi --ssl-mode: Mencoba membuat koneksi terenkripsi. Jika gagal, klien menggunakan koneksi tanpa enkripsi.
--ssl-mode=REQUIRED: Koneksi terenkripsi wajib. Koneksi gagal jika tidak dapat dibuat koneksi terenkripsi.
--ssl-mode=VERIFY_CA: Memerlukan koneksi terenkripsi dan memverifikasi sertifikat server terhadap Sertifikat CA lokal.
--ssl-mode=VERIFY_IDENTITY: Memerlukan koneksi terenkripsi, memverifikasi sertifikat server terhadap Sertifikat CA lokal, serta memvalidasi bahwa hostname atau alamat IP dalam sertifikat server sesuai dengan yang digunakan untuk koneksi.
Contoh 1: Mencoba membuat koneksi terenkripsi. Jika gagal, koneksi tanpa enkripsi digunakan.
mysql -h {endpoint} -u {username} -p --ssl-mode=PREFERREDContoh 2: Memerlukan koneksi terenkripsi dan verifikasi sertifikat server.
mysql -h {endpoint} -u {username} -p --ssl-mode=VERIFY_CA --ssl-ca={path-to-ca-certificate}/ApsaraDB-CA-Chain.pemPada contoh di atas, ganti {endpoint}, {username}, dan {path-to-ca-certificate} dengan nilai aktual Anda.
Untuk informasi lebih lanjut tentang opsi --ssl-mode, lihat dokumentasi resmi MySQL.
MySQL Workbench
Buka MySQL Workbench dan pilih .
Masukkan endpoint, username, dan password.
Pada tab SSL, konfigurasikan parameter Use SSL, tentukan Sertifikat CA berformat PEM yang telah diunduh untuk bidang SSL CA File, lalu klik Test Connection atau OK.
CatatanUntuk penjelasan opsi parameter Use SSL, lihat deskripsi --ssl-mode pada bagian MySQL CLI.
Data Management (DMS)
Saat menambahkan instans ApsaraDB RDS for MySQL di Data Management (DMS), Anda dapat mengatur parameter Enable SSL. Untuk informasi lebih lanjut, lihat Daftarkan instans database Alibaba Cloud.
Anda juga dapat mengklik kanan instans yang sudah ada, memilih Edit Instance, lalu mengonfigurasi pengaturan pada bagian 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 didukung di mysql-connector-java 8.0.13 dan versi lebih baru. 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();
// Setel SslMode sesuai kebutuhan. Untuk opsi yang tersedia, lihat bagian MySQL CLI.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// Truststore menyimpan Sertifikat CA. Jenis truststore diatur ke 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");
// Password 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);
// Username database Anda
mysqlDS.setUser("xxxxxx");
// Password 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:
ssl_config = {"ca":"/path/to/path/ca.crt", "mode":"VERIFY_CA"} # "ca" adalah path Sertifikat CA. "mode" adalah ssl-mode.
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)Hubungkan ke MySQL menggunakan sertifikat kustom
MySQL CLI
Untuk klien yang menjalankan MySQL 5.7.11 atau versi lebih baru, Anda dapat menambahkan opsi --ssl-mode ke perintah koneksi untuk mengonfigurasi enkripsi SSL.
Untuk klien MariaDB dan klien MySQL yang menjalankan 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=PREFERRED atau tanpa opsi --ssl-mode: Mencoba membuat koneksi terenkripsi. Jika gagal, klien menggunakan koneksi tanpa enkripsi.
--ssl-mode=REQUIRED: Koneksi terenkripsi wajib. Koneksi gagal jika tidak dapat dibuat koneksi terenkripsi.
--ssl-mode=VERIFY_CA: Memerlukan koneksi terenkripsi dan memverifikasi sertifikat server terhadap Sertifikat CA lokal.
--ssl-mode=VERIFY_IDENTITY: Memerlukan koneksi terenkripsi, memverifikasi sertifikat server terhadap Sertifikat CA lokal, serta memvalidasi bahwa hostname atau alamat IP dalam sertifikat server sesuai dengan yang digunakan untuk koneksi.
Contoh:
Mencoba membuat koneksi terenkripsi. Jika gagal, koneksi tanpa enkripsi digunakan.
mysql -h {endpoint} -u {username} -p --ssl-mode=PREFERREDMemerlukan koneksi terenkripsi dan verifikasi sertifikat server.
mysql -h {endpoint} -u {username} -p --ssl-mode=VERIFY_CA --ssl-ca={path-to-custom-ca-certificate}
Pada contoh di atas, Anda harus mengganti
{RDS endpoint},{RDS username},{CA certificate path}, dan{custom CA certificate path}dengan nilai aktualnya.Untuk informasi lebih lanjut tentang opsi --ssl-mode, lihat dokumentasi resmi MySQL.
MySQL Workbench
Buka MySQL Workbench dan pilih Database > Manage Connections.
Masukkan endpoint, username, dan password.
Pada tab SSL, konfigurasikan parameter Use SSL dan tentukan Sertifikat CA kustom Anda untuk bidang SSL CA File. Lalu, klik Test Connection atau OK.
Untuk penjelasan opsi parameter Use SSL, lihat deskripsi --ssl-mode pada bagian MySQL CLI.
Data Management (DMS)
Saat menambahkan instans ApsaraDB RDS for MySQL di Data Management (DMS), Anda dapat mengatur parameter Enable SSL. Untuk informasi lebih lanjut, lihat Daftarkan instans database Alibaba Cloud.
Anda juga dapat mengklik kanan instans yang sudah ada, memilih Edit Instance, lalu mengonfigurasi pengaturan pada bagian 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>Jika Anda menggunakan sertifikat kustom, Anda harus membuat file JKS secara manual sebagai berikut:
Konversi sertifikat klien dan kunci privat Anda ke format PKCS#12 karena utilitas keytool tidak langsung mendukung impor kunci privat dan sertifikat dari format PEM. Gunakan OpenSSL untuk melakukan konversi:
openssl pkcs12 -export -in {custom-ca-certificate} -inkey {custom-ca-private-key} -out keystore.p12 -name ganyang -CAfile {custom-ca-certificate} # Masukkan password. Password ini diperlukan saat membuat koneksi. Enter Encryption Password: Verifying - Enter Encryption Password:Gunakan utilitas keytool untuk mengimpor file PKCS#12 ke file JKS baru:
keytool -importkeystore -deststorepass JKS-password -destkeypass key-password -destkeystore keystore.jks -deststoretype pkcs12 -srckeystore keystore.p12 -srcstoretype pkcs12 -srcstorepass P12-password -alias your-aliasParameter:
-deststorepass: Password untuk file JKS. -destkeypass: Password untuk kunci dalam file JKS. -destkeystore: File JKS yang akan dibuat atau file JKS yang sudah ada. -deststoretype: Jenis file tujuan (PKCS#12). -srckeystore: File PKCS#12 sumber. -srcstoretype: Jenis file sumber (PKCS#12). -srcstorepass: Password untuk file PKCS#12 sumber. -alias: Alias untuk sertifikat klien dan kunci privat.Dapatkan file JKS: Setelah impor berhasil, temukan file keystore.jks di direktori eksekusi.
Kode contoh berikut menggunakan properti sslMode untuk menentukan mode SSL. Properti ini didukung di mysql-connector-java 8.0.13 dan versi lebih baru. Jika Anda menggunakan versi sebelumnya, Anda harus menggunakan properti useSSL, requireSSL, dan verifyServerCertificate. Untuk informasi lebih lanjut, lihat dokumentasi MySQL.
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 SslMode sesuai kebutuhan. Untuk opsi yang tersedia, lihat bagian MySQL CLI.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// Contoh berikut menunjukkan parameter koneksi. Ganti nilai truststore dengan path dan password file JKS yang Anda buat dari sertifikat kustom.
// Truststore menyimpan Sertifikat CA. Jenis truststore diatur ke JKS.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Ganti path setelah file:/ dengan path ke file JKS kustom Anda.
mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
// Gunakan password yang Anda buat untuk file JKS kustom Anda.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// Titik akhir database Anda
mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com");
// Port database Anda
mysqlDS.setPort(3306);
// Username database Anda
mysqlDS.setUser("xxxxxx");
// Password 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:
ssl_config = {"ca":"/path/to/path/ca.crt", "mode":"VERIFY_CA"} # "ca" adalah path Sertifikat CA. "mode" adalah ssl-mode.
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)