تكوين اتصال SSL في التطبيق الخاص بك للاتصال بأمان بقاعدة بيانات Azure ل MariaDB

هام

قاعدة بيانات Azure ل MariaDB على مسار التقاعد. نوصي بشدة بالترحيل إلى قاعدة بيانات Azure ل MySQL. لمزيد من المعلومات حول الترحيل إلى قاعدة بيانات Azure ل MySQL، راجع ما يحدث لقاعدة بيانات Azure ل MariaDB؟.

تدعم قاعدة بيانات Azure ل MariaDB توصيل قاعدة بيانات Azure لخادم MariaDB بتطبيقات العميل باستخدام طبقة مآخذ التوصيل الآمنة (SSL). يساعد فرض اتصالات SSL التي تتم بين خادم قاعدة البيانات وتطبيقات العميل في الحماية ضد «هجمات الوسطاء» عن طريق تشفير تدفق البيانات بين الخادم والتطبيق.

الحصول على شهادة SSL

قم بتنزيل الشهادة اللازمة للاتصال عبر SSL مع خادم Azure Database for MariaDB من https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem واحفظ ملف الشهادة إلى محرك الأقراص المحلي (يستخدم هذا البرنامج التعليمي c:\ssl على سبيل المثال). بالنسبة إلى Microsoft Internet Explorer و Microsoft Edge: بعد اكتمال التنزيل، أعد تسمية الشهادة إلى BaltimoreCyberTrustRoot.crt.pem.

راجع الارتباطات التالية للشهادات للخوادم في السحب السيادية: Azure Government وMicrosoft Azure التي تديرها 21Vianet وAzure Germany.

ربط SSL

الاتصال بالخادم باستخدام MySQL Workbench عبر SSL

تكوين MySQL Workbench للاتصال بأمان عبر SSL.

  1. من مربع الحوار إعداد اتصال جديد، انتقل إلى علامة التبويب SSL.

  2. تحديث الحقل استخدم SSL إلى Require.

  3. في الحقل SSL CA File: أدخل موقع ملف BaltimoreCyberTrustRoot.crt.pem.

    Save SSL configuration

بالنسبة للاتصالات الموجودة، يمكنك ربط SSL بالنقر بزر الماوس الأيمن فوق أيقونة الاتصال واختيار تحرير. ثم انتقل إلى علامة التبويب SSL وربط ملف الشهادة.

الاتصال بالخادم باستخدام MySQL CLI عبر SSL

هناك طريقة أخرى لربط شهادة SSL وهي استخدام واجهة سطر الأوامر MySQL عن طريق تنفيذ الأوامر التالية.

mysql.exe -h mydemoserver.mariadb.database.azure.com -u Username@mydemoserver -p --ssl-mode=REQUIRED --ssl-ca=c:\ssl\BaltimoreCyberTrustRoot.crt.pem

إشعار

عند استخدام واجهة سطر الأوامر MySQL على Windows، قد تتلقى خطأ SSL connection error: Certificate signature check failed. إذا حدث ذلك، استبدل --ssl-mode=REQUIRED --ssl-ca={filepath} المعلمات بـ--ssl.

فرض اتصالات SSL في Azure

استخدام مدخل Microsoft Azure

باستخدام مدخل Microsoft Azure، قم بزيارة قاعدة بيانات Azure لخادم MariaDB، ثم حدد أمان الاتصال. استخدم زر التبديل لتمكين إعداد فرض اتصال SSL أو تعطيله، ثم حدد حفظ. توصي Microsoft دائمًا بتمكين فرض إعداد اتصال SSL لتحسين الأمان. enable-ssl for MariaDB server

استخدام Azure CLI

يمكنك تمكين أو تعطيل معلمة فرضssl باستخدام تمكين أو تعطيل قيم على التوالي في واجهة سطر الأوامر الخاص بـAzure.

az mariadb server update --resource-group myresource --name mydemoserver --ssl-enforcement Enabled

تحقق من اتصال SSL

نفذ أمر حالة mysql للتحقق من اتصالك بخادم MariaDB باستخدام SSL:

status

تأكد من تشفير الاتصال من خلال مراجعة الإخراج، والذي يجب أن يظهر: SSL: التشفير قيد الاستخدام هو AES256-SHA

التعليمة البرمجية العينة

لإنشاء اتصال آمن بقاعدة بيانات Azure ل MariaDB عبر SSL من التطبيق الخاص بك، راجع نماذج التعليمات البرمجية التالية:

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'
    )

روبي أون ريلز

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();
}

الخطوات التالية

للتعرف على انتهاء صلاحية الشهادة وتدويرها، راجع وثائق تدوير الشهادة