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.

  1. Dari dialog Atur Koneksi Baru, buka ke tab SSL.

  2. Perbarui bidang Gunakan SSL ke "Wajib".

  3. Di bidang File CA SSL: masukkan lokasi file BaltimoreCyberTrustRoot.crt.pem.

    Save SSL configuration

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. enable-ssl for MariaDB server

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