MariaDB için Azure Veritabanı'na güvenli bir şekilde bağlanmak üzere uygulamanızda SSL bağlantısı yapılandırma

Önemli

MariaDB için Azure Veritabanı kullanımdan kaldırılıyor. MySQL için Azure Veritabanı geçiş yapmanızı kesinlikle öneririz. MySQL için Azure Veritabanı geçiş hakkında daha fazla bilgi için bkz. MariaDB için Azure Veritabanı ne oluyor?.

MariaDB için Azure Veritabanı, güvenli yuva katmanı (SSL) kullanarak MariaDB için Azure Veritabanı sunucunuzu istemci uygulamalarına bağlamayı destekler. Veritabanı sunucunuzla istemci uygulamalarınız arasında SSL bağlantılarının zorunlu tutulması, sunucuya uygulamanız arasındaki veri akışını şifreleyerek "bağlantıyı izinsiz izleme" saldırılarına karşı korumaya yardımcı olur.

SSL sertifikası alma

MariaDB için Azure Veritabanı sunucunuzla https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem SSL üzerinden iletişim kurmak için gereken sertifikayı indirin ve sertifika dosyasını yerel sürücünüze kaydedin (bu öğreticide örneğin c:\ssl kullanılır). Microsoft Internet Explorer ve Microsoft Edge için: İndirme tamamlandıktan sonra sertifikayı BaltimoreCyberTrustRoot.crt.pem olarak yeniden adlandırın.

Bağımsız bulutlardaki sunucular için sertifikalar için aşağıdaki bağlantılara bakın: Azure Kamu, 21Vianet tarafından sağlanan Microsoft Azure ve Azure Almanya.

SSL bağlama

SSL üzerinden MySQL Workbench kullanarak sunucuya Bağlan

MySQL Workbench'i SSL üzerinden güvenli bir şekilde bağlanacak şekilde yapılandırın.

  1. Kurulum Yeni Bağlan ion iletişim kutusunda SSL sekmesine gidin.

  2. SSL Kullan alanını "Gerekli" olarak güncelleştirin.

  3. SSL CA Dosyası: alanına BaltimoreCyberTrustRoot.crt.pem dosyasının konumunu girin.

    Save SSL configuration

Mevcut bağlantılar için, bağlantı simgesine sağ tıklayıp Düzenle'yi seçerek SSL'yi bağlayabilirsiniz. Ardından SSL sekmesine gidin ve sertifika dosyasını bağlayın.

SSL üzerinden MySQL CLI kullanarak sunucuya Bağlan

SSL sertifikasını bağlamanın bir diğer yolu da aşağıdaki komutları yürüterek MySQL komut satırı arabirimini kullanmaktır.

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

Dekont

Windows'ta MySQL komut satırı arabirimini kullanırken hata SSL connection error: Certificate signature check failedalabilirsiniz. Bu durumda, parametrelerini ile --ssldeğiştirin--ssl-mode=REQUIRED --ssl-ca={filepath}.

Azure'da SSL bağlantılarını zorunlu tutma

Azure portalını kullanma

Azure portalını kullanarak MariaDB için Azure Veritabanı sunucunuzu ziyaret edin ve Bağlan ion güvenliği'ni seçin. SSL bağlantısını zorunlu kılma ayarını etkinleştirmek veya devre dışı bırakmak için iki durumlu düğmeyi kullanın ve kaydet'i seçin. Microsoft, gelişmiş güvenlik için SSL bağlantısını zorunlu kılma ayarının her zaman etkinleştirilmesini önerir. enable-ssl for MariaDB server

Azure CLI’yı kullanma

Azure CLI'da sırasıyla Etkin veya Devre Dışı değerlerini kullanarak ssl zorlama parametresini etkinleştirebilir veya devre dışı bırakabilirsiniz.

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

SSL bağlantısını doğrulama

MariaDB sunucunuza SSL kullanarak bağlandığınızdan emin olmak için mysql status komutunu yürütebilirsiniz:

status

Çıkışı gözden geçirerek bağlantının şifrelendiğinden emin olmak için şunu göstermelisiniz: SSL: Şifreleme kullanımda AES256-SHA

Örnek kod

Uygulamanızdan SSL üzerinden MariaDB için Azure Veritabanı güvenli bir bağlantı kurmak için aşağıdaki kod örneklerine bakın:

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 (MySQL Bağlan veya 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 (MySql Bağlan or)

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

Sonraki adımlar

Sertifika süre sonu ve döndürme hakkında bilgi edinmek için sertifika döndürme belgelerine bakın