Uygulamanıza güvenli bir şekilde bağlanmak için uygulamanıza SSL bağlantısını MariaDB için Azure Veritabanı

MariaDB için Azure Veritabanı, MariaDB için Azure Veritabanı (SSL) kullanarak istemci uygulamalarına Güvenli Yuva Katmanı 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 SSL üzerinden iletişim kurmak için gereken sertifikayı indirin ve sertifika dosyasını yerel sürücünize kaydedin (bu öğreticide https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem örneğin c:\ssl kullanılır). Microsoft Internet Explorer ve Microsoft Edge: İndirme işlemi tamamlandıktan sonra sertifikayı BaltimoreCyberTrustRoot.crt.pem olarak yeniden adlandırin.

Bağımsız bulutlarda sunucuların sertifikaları için aşağıdaki bağlantılara bakın: Azure Kamu, Azure Çinve Azure Almanya.

SSL bağlama

SSL üzerinden MySQL Workbench kullanarak sunucuya bağlanma

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

  1. Yeni Bağlantı Kur iletişim penceresinde 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.

    SSL yapılandırmasını kaydetme

Mevcut bağlantılar için bağlantı simgesine sağ tıklar ve düzenle'yi seçerek SSL'yi bebilirsiniz. Ardından SSL sekmesine gidin ve sertifika dosyasını bağlayın.

SSL üzerinden MySQL CLI kullanarak sunucuya bağlanma

SSL sertifikasını bağlamanın başka bir yolu, 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

Not

Windows'da MySQL komut satırı arabirimini kullanırken bir hata SSL connection error: Certificate signature check failed alabilirsiniz. Bu gerçekleşirse, --ssl-mode=REQUIRED --ssl-ca={filepath} parametreleri ile değiştirin --ssl .

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

Azure portalını kullanma

Azure portal kullanarak, MariaDB sunucusu için Azure veritabanı ' nı ziyaret edin ve bağlantı güvenliği' ne tıklayın. SSL bağlantısını zorla ayarını etkinleştirmek veya devre dışı bırakmak için iki durumlu düğmeyi kullanın ve ardından Kaydet' e tıklayın. Microsoft, gelişmiş güvenlik için her zaman SSL bağlantısını zorla ayarını etkinleştirmenizi önerir. MariaDB sunucusu için Enable-SSL

Azure CLI’yı kullanma

Azure CLı 'de sırasıyla etkin veya devre dışı değerler 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

SSL kullanarak MariaDB sunucunuza bağlandığınızı doğrulamak için MySQL Status komutunu yürütün:

status

Çıktıyı inceleyerek bağlantının şifrelendiğini onaylayın; bu, şunu göstermelidir: SSL: kullanımdaki ŞIFRE AES256-SHA

Örnek kod

Uygulamanızdan SSL üzerinden MariaDB için Azure veritabanı 'na 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 (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 rayları

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

Sonraki adımlar

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