Configuration de la connectivité SSL dans votre application pour se connecter en toute sécurité à la base de données Azure pour MySQLConfigure SSL connectivity in your application to securely connect to Azure Database for MySQL

La base de données Azure pour MySQL prend en charge la connexion de votre serveur Azure Database pour MySQL aux applications clientes à l’aide de Secure Sockets Layer (SSL).Azure Database for MySQL supports connecting your Azure Database for MySQL server to client applications using Secure Sockets Layer (SSL). L’application de connexions SSL entre votre serveur de base de données et vos applications clientes vous protège contre les « attaques de l’intercepteur » en chiffrant le flux de données entre le serveur et votre application.Enforcing SSL connections between your database server and your client applications helps protect against "man in the middle" attacks by encrypting the data stream between the server and your application.

Étape 1 : Obtenir un certificat SSLStep 1: Obtain SSL certificate

Téléchargez le certificat nécessaire pour communiquer via le protocole SSL avec votre serveur Azure Database pour MySQL à partir de https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem et enregistrez le fichier de certificat sur votre disque local (ce didacticiel utilise c:\ssl à titre d’exemple).Download the certificate needed to communicate over SSL with your Azure Database for MySQL server from https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem and save the certificate file to your local drive (this tutorial uses c:\ssl for example). Pour Microsoft Internet Explorer et Microsoft Edge : une fois le téléchargement terminé, renommez le certificat en BaltimoreCyberTrustRoot.crt.pem.For Microsoft Internet Explorer and Microsoft Edge: After the download has completed, rename the certificate to BaltimoreCyberTrustRoot.crt.pem.

Étape 2 : Créer une liaison SSLStep 2: Bind SSL

Connexion au serveur à l’aide de MySQL Workbench via le protocole SSLConnecting to server using the MySQL Workbench over SSL

Configurez MySQL Workbench pour vous connecter en toute sécurité via le protocole SSL.Configure the MySQL Workbench to connect securely over SSL. Dans la boîte de dialogue Configurer une nouvelle connexion, accédez à l’onglet SSL. Dans le champ SSL CA File:, entrez l’emplacement du fichier BaltimoreCyberTrustRoot.crt.pem.From the Setup New Connection dialogue, navigate to the SSL tab. In the SSL CA File: field, enter the file location of the BaltimoreCyberTrustRoot.crt.pem. enregistrer une vignette personnalisée Pour les connexions existantes, vous pouvez lier SSL en cliquant avec le bouton droit sur l’icône de connexion et en choisissant Modifier.save customized tile For existing connections, you can bind SSL by right-clicking on the connection icon and choose edit. Accédez ensuite à l’onglet SSL, puis liez le fichier de certificat.Then navigate to the SSL tab and bind the cert file.

Connexion au serveur à l’aide de l’interface de ligne de commande MySQL via le protocole SSLConnecting to server using the MySQL CLI over SSL

Vous pouvez également lier le certificat SSL dans l’interface de ligne de commande MySQL en exécutant les commandes suivantes.Another way to bind the SSL certificate is to use the MySQL command-line interface by executing the following commands.

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

Notes

Quand vous utilisez l’interface de ligne de commande MySQL sur Windows, vous pouvez recevoir une erreur SSL connection error: Certificate signature check failed.When using the MySQL command-line interface on Windows, you may receive an error SSL connection error: Certificate signature check failed. Dans ce cas, remplacez les paramètres --ssl-mode=REQUIRED --ssl-ca={filepath} par --ssl.If this occurs, replace the --ssl-mode=REQUIRED --ssl-ca={filepath} parameters with --ssl.

Étape 3 : Application de connexions SSL dans AzureStep 3: Enforcing SSL connections in Azure

Utilisation du portail AzureUsing the Azure portal

À partir du portail Azure, accédez à votre serveur de base de données Azure pour MySQL, puis cliquez sur Sécurité de la connexion.Using the Azure portal, visit your Azure Database for MySQL server, and then click Connection security. Utilisez le bouton bascule pour activer ou désactiver le paramètre Appliquer une connexion SSL, puis cliquez sur Enregistrer.Use the toggle button to enable or disable the Enforce SSL connection setting, and then click Save. Microsoft recommande de toujours activer le paramètre Appliquer une connexion SSL pour renforcer la sécurité.Microsoft recommends to always enable the Enforce SSL connection setting for enhanced security. enable-sslenable-ssl

Utilisation de l’interface de ligne de commande AzureUsing Azure CLI

Vous pouvez activer ou désactiver le paramètre ssl-enforcement en utilisant respectivement les valeurs Enabled ou Disabled dans Azure CLI.You can enable or disable the ssl-enforcement parameter by using Enabled or Disabled values respectively in Azure CLI.

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

Étape 4 : Vérifier la connexion SSLStep 4: Verify the SSL connection

Exécuter la commande mysql status pour vérifier que vous êtes connecté à votre serveur MySQL à l’aide de SSL :Execute the mysql status command to verify that you have connected to your MySQL server using SSL:

mysql> status

Confirmez le chiffrement de la connexion en vérifiant la sortie, qui doit indiquer : SSL: Cipher in use is AES256-SHA (SSL : Le chiffrement utilisé est AES256-SHA)Confirm the connection is encrypted by reviewing the output, which should show: SSL: Cipher in use is AES256-SHA

Exemple de codeSample code

Pour établir une connexion sécurisée vers une base de données Azure Database pour MySQL sur SSL à partir de votre application, consultez les exemples de code suivants :To establish a secure connection to Azure Database for MySQL over SSL from your application, refer to the following code samples:

PHPPHP

$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/BaltimoreCyberTrustRoot.crt.pem", NULL, NULL) ; 
mysqli_real_connect($conn, 'mydemoserver.mysql.database.azure.com', 'myadmin@mydemoserver', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno($conn)) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}

Python (MySQLConnector Python)Python (MySQLConnector Python)

try:
    conn=mysql.connector.connect(user='myadmin@mydemoserver', 
        password='yourpassword', 
        database='quickstartdb', 
        host='mydemoserver.mysql.database.azure.com', 
        ssl_ca='/var/www/html/BaltimoreCyberTrustRoot.crt.pem')
except mysql.connector.Error as err:
    print(err)

Python (PyMySQL)Python (PyMySQL)

conn = pymysql.connect(user = 'myadmin@mydemoserver', 
        password = 'yourpassword', 
        database = 'quickstartdb', 
        host = 'mydemoserver.mysql.database.azure.com', 
        ssl = {'ssl': {'ca': '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'}})

RubyRuby

client = Mysql2::Client.new(
        :host     => 'mydemoserver.mysql.database.azure.com', 
        :username => 'myadmin@mydemoserver',      
        :password => 'yourpassword',    
        :database => 'quickstartdb',
        :ssl_ca => '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'
    )

GolangGolang

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.mysql.database.azure.com', 'quickstartdb')   
db, _ := sql.Open("mysql", connectionString)

JAVA(JDBC)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.mysql.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);

JAVA(MariaDB)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.mysql.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);

Étapes suivantesNext steps

Passez en revue les différentes options de connectivité d’application de la rubrique Bibliothèques de connexions pour Azure Database pour MySQLReview various application connectivity options following Connection libraries for Azure Database for MySQL