تكوين اتصال 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.
من مربع الحوار إعداد اتصال جديد، انتقل إلى علامة التبويب SSL.
تحديث الحقل استخدم SSL إلى Require.
في الحقل SSL CA File: أدخل موقع ملف BaltimoreCyberTrustRoot.crt.pem.
بالنسبة للاتصالات الموجودة، يمكنك ربط 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 لتحسين الأمان.
استخدام 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();
}
الخطوات التالية
للتعرف على انتهاء صلاحية الشهادة وتدويرها، راجع وثائق تدوير الشهادة