Konfigurasikan konektivitas SSL di aplikasi Anda untuk terhubung dengan aman ke Azure Database for MariaDB
Penting
Azure Database for MariaDB berada di jalur penghentian. Kami sangat menyarankan Anda bermigrasi ke Azure Database for MySQL. Untuk informasi selengkapnya tentang migrasi ke Azure Database for MySQL, lihat Apa yang terjadi pada Azure Database for MariaDB?.
Azure Database for MariaDB mendukung sambungan server Azure Database for MariaDB Anda ke aplikasi klien menggunakan Lapisan Soket Aman (SSL). Menerapkan koneksi SSL antara server database dan aplikasi klien Anda membantu melindungi dari serangan "man in the middle" dengan mengenkripsi aliran data antara server dan aplikasi Anda.
Mendapatkan Sertifikat SSL
Unduh sertifikat yang diperlukan untuk berkomunikasi melalui SSL dengan Azure Database for MariaDB Anda dari https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem dan simpan file sertifikat ke drive lokal Anda (tutorial ini menggunakan c:\ssl misalnya). Untuk Microsoft Internet Explorer dan Microsoft Azure Stack Edge: Setelah unduhan selesai, ganti nama sertifikat menjadi BaltimoreCyberTrustRoot.crt.pem.
Lihat tautan berikut untuk sertifikat untuk server di sovereign cloud: Azure Government, Microsoft Azure yang dioperasikan oleh 21Vianet, dan Azure Jerman.
Mengikat SSL
Menyambungkan ke server menggunakan MySQL Workbench melalui SSL
Konfigurasikan MySQL Workbench untuk terhubung dengan aman melalui SSL.
Dari dialog Atur Koneksi Baru, buka ke tab SSL.
Perbarui bidang Gunakan SSL ke "Wajib".
Di bidang File CA SSL: masukkan lokasi file BaltimoreCyberTrustRoot.crt.pem.
Untuk koneksi yang sudah ada, Anda dapat mengikat SSL dengan mengklik kanan ikon koneksi dan memilih edit. Kemudian buka tab SSL dan ikat file sertifikat.
Menyambungkan ke server menggunakan CLI MySQL melalui SSL
Cara lain untuk mengikat sertifikat SSL adalah dengan menggunakan antarmuka baris perintah MySQL dengan menjalankan perintah berikut.
mysql.exe -h mydemoserver.mariadb.database.azure.com -u Username@mydemoserver -p --ssl-mode=REQUIRED --ssl-ca=c:\ssl\BaltimoreCyberTrustRoot.crt.pem
Catatan
Saat menggunakan antarmuka baris perintah MySQL di Windows, Anda mungkin menerima kesalahan SSL connection error: Certificate signature check failed
. Jika hal ini terjadi, ganti parameter --ssl-mode=REQUIRED --ssl-ca={filepath}
dengan --ssl
.
Menerapkan koneksi aman di Azure
Menggunakan portal Azure
Dengan menggunakan portal Azure, kunjungi server Azure Database for MariaDB Anda, lalu pilih keamanan Koneksi ion. Gunakan tombol alih untuk mengaktifkan atau menonaktifkan pengaturan Terapkan koneksi SSL, lalu pilih Simpan. Microsoft merekomendasikan untuk selalu mengaktifkan pengaturan Terapkan koneksi aman untuk peningkatan keamanan.
Menggunakan Azure CLI
Anda dapat mengaktifkan atau menonaktifkan parameter ssl-enforcement menggunakan nilai Enabled atau Disabled berturut-turut di Azure CLI.
az mariadb server update --resource-group myresource --name mydemoserver --ssl-enforcement Enabled
Memverifikasi koneksi aman
Jalankan perintah status mysql untuk memverifikasi bahwa Anda telah tersambung ke server MariaDB menggunakan SSL:
status
Konfirmasikan bahwa sambungan sudah dienkripsi dengan meninjau output, yang seharusnya menunjukkan: SSL: Cipher yang digunakan adalah AES256-SHA
Kode Sampel
Untuk membuat koneksi aman ke Azure Database for MariaDB melalui SSL dari aplikasi Anda, lihat kode sampel berikut:
PHP
$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/BaltimoreCyberTrustRoot.crt.pem", NULL, NULL) ;
mysqli_real_connect($conn, 'mydemoserver.mariadb.database.azure.com', 'myadmin@mydemoserver', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
if (mysqli_connect_errno($conn)) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
Python (MySQLConnector Python)
try:
conn = mysql.connector.connect(user='myadmin@mydemoserver',
password='yourpassword',
database='quickstartdb',
host='mydemoserver.mariadb.database.azure.com',
ssl_ca='/var/www/html/BaltimoreCyberTrustRoot.crt.pem')
except mysql.connector.Error as err:
print(err)
Python (PyMySQL)
conn = pymysql.connect(user='myadmin@mydemoserver',
password='yourpassword',
database='quickstartdb',
host='mydemoserver.mariadb.database.azure.com',
ssl={'ca': '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'})
Ruby
client = Mysql2::Client.new(
:host => 'mydemoserver.mariadb.database.azure.com',
:username => 'myadmin@mydemoserver',
:password => 'yourpassword',
:database => 'quickstartdb',
:sslca => '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'
:ssl_mode => 'required'
)
Ruby on Rails
default: &default
adapter: mysql2
username: username@mydemoserver
password: yourpassword
host: mydemoserver.mariadb.database.azure.com
sslca: BaltimoreCyberTrustRoot.crt.pem
sslverify: true
Golang
rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("/var/www/html/BaltimoreCyberTrustRoot.crt.pem")
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
log.Fatal("Failed to append PEM.")
}
mysql.RegisterTLSConfig("custom", &tls.Config{RootCAs: rootCertPool})
var connectionString string
connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true&tls=custom",'myadmin@mydemoserver' , 'yourpassword', 'mydemoserver.mariadb.database.azure.com', 'quickstartdb')
db, _ := sql.Open("mysql", connectionString)
Java (JDBC)
# generate truststore and keystore in code
String importCert = " -import "+
" -alias mysqlServerCACert "+
" -file " + ssl_ca +
" -keystore truststore "+
" -trustcacerts " +
" -storepass password -noprompt ";
String genKey = " -genkey -keyalg rsa " +
" -alias mysqlClientCertificate -keystore keystore " +
" -storepass password123 -keypass password " +
" -dname CN=MS ";
sun.security.tools.keytool.Main.main(importCert.trim().split("\\s+"));
sun.security.tools.keytool.Main.main(genKey.trim().split("\\s+"));
# use the generated keystore and truststore
System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
System.setProperty("javax.net.ssl.keyStorePassword","password");
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
System.setProperty("javax.net.ssl.trustStorePassword","password");
url = String.format("jdbc:mysql://%s/%s?serverTimezone=UTC&useSSL=true", 'mydemoserver.mariadb.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
Java (MariaDB)
# generate truststore and keystore in code
String importCert = " -import "+
" -alias mysqlServerCACert "+
" -file " + ssl_ca +
" -keystore truststore "+
" -trustcacerts " +
" -storepass password -noprompt ";
String genKey = " -genkey -keyalg rsa " +
" -alias mysqlClientCertificate -keystore keystore " +
" -storepass password123 -keypass password " +
" -dname CN=MS ";
sun.security.tools.keytool.Main.main(importCert.trim().split("\\s+"));
sun.security.tools.keytool.Main.main(genKey.trim().split("\\s+"));
# use the generated keystore and truststore
System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
System.setProperty("javax.net.ssl.keyStorePassword","password");
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
System.setProperty("javax.net.ssl.trustStorePassword","password");
url = String.format("jdbc:mariadb://%s/%s?useSSL=true&trustServerCertificate=true", 'mydemoserver.mariadb.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
.NET (MySqlConnector)
var builder = new MySqlConnectionStringBuilder
{
Server = "mydemoserver.mysql.database.azure.com",
UserID = "myadmin@mydemoserver",
Password = "yourpassword",
Database = "quickstartdb",
SslMode = MySqlSslMode.VerifyCA,
CACertificateFile = "BaltimoreCyberTrustRoot.crt.pem",
};
using (var connection = new MySqlConnection(builder.ConnectionString))
{
connection.Open();
}
Langkah berikutnya
Untuk mempelajari kedaluwarsa dan rotasi sertifikat, lihat dokumentasi rotasi sertifikat