Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans cet article, vous allez apprendre à :
- Configurer votre instance de Serveur flexible Azure Database pour MySQL
- Avec SSL désactivé
- Avec SSL appliqué à la version TLS
- Établir une connexion à votre instance de Serveur flexible Azure Database pour MySQL à l’aide de la ligne de commande mysql
- Avec les connexions chiffrées désactivées
- Avec les connexions chiffrées activées
- Vérifier l’état du chiffrement pour votre connexion
- Établir une connexion à votre instance de Serveur flexible Azure Database pour MySQL avec des connexions chiffrées à l’aide de diverses infrastructures d’application
Vue d’ensemble de la prise en charge de TLS/SSL dans le serveur flexible Azure Database pour MySQL
Le Serveur flexible Azure Database pour MySQL prend en charge la connexion de vos applications clientes à l’instance de Serveur flexible Azure Database pour MySQL en utilisant le chiffrement SSL (Secure Sockets Layer) avec le protocole TLS (Transport Layer Security). TLS est un protocole standard qui garantit la sécurité des connexions réseau entre votre serveur de base de données et vos applications clientes, ce qui vous permet de respecter les exigences de conformité.
Le serveur flexible Azure Database pour MySQL prend en charge par défaut les connexions chiffrées à l’aide du protocole TLS 1.2 (Transport Layer Security), donc toutes les connexions entrantes qui utilisent les protocoles TLS 1.0 et TLS 1.1 sont refusées par défaut. Vous pouvez modifier la configuration de la mise en œuvre de la connexion chiffrée ou de la version TLS sur votre Serveur flexible, tel qu’abordé dans cet article.
Voici les différentes configurations des paramètres SSL et TLS possibles pour votre instance de Serveur flexible Azure Database pour MySQL :
Important
Selon la suppression de la prise en charge des protocoles TLS 1.0 et TLS 1.1, nous avons prévu précédemment de déprécier entièrement TLS 1.0 et 1.1 d’ici septembre 2024. Toutefois, en raison des dépendances identifiées par certains clients, nous avons décidé d’étendre la chronologie.
À compter du 31 août 2025, nous avons commencé la mise à niveau forcée pour tous les serveurs qui utilisent toujours TLS 1.0 ou 1.1. Après cette date, toutes les connexions qui s’appuient sur TLS 1.0 ou 1.1 peuvent cesser de fonctionner à tout moment. Pour éviter les interruptions de service potentielles, nous recommandons vivement aux clients d’effectuer leur migration vers TLS 1.2 avant le 31 août 2025.
| Scénario | Paramètres du serveur | Descriptif |
|---|---|---|
| Désactiver l'application stricte de TLS | require_secure_transport = OFF |
Si votre application héritée ne prend pas en charge les connexions chiffrées, vous pouvez désactiver l’application des connexions chiffrées. |
| Imposer TLS avec la version TLS < 1.2 (déconseillé en septembre 2024) |
require_secure_transport = ON et tls_version = TLS 1.0 ou TLS 1.1 |
Il n’est plus disponible ! |
| Appliquer TLS avec TLS version = 1.2(Configuration par défaut) |
require_secure_transport = ON et tls_version = TLS 1.2 |
Configuration par défaut. |
| Appliquer TLS avec TLS version = 1.3 |
require_secure_transport = ON et tls_version = TLS 1.3 |
Configuration recommandée ; pris en charge uniquement avec le serveur flexible Azure Database pour MySQL version v8.0 et ultérieure. |
Note
Les modifications apportées au chiffrement TLS ne sont pas prises en charge. Les suites de chiffrement conformes FIPS sont appliquées par défaut lorsque la valeur tls_version est définie TLS 1.2 ou TLS 1.3.
Désactiver l'application stricte de TLS sur votre instance de Serveur Flexible de la base de données Azure pour MySQL
Si votre application cliente ne prend pas en charge les connexions chiffrées, vous devez désactiver l’application des connexions chiffrées sur votre instance de Serveur flexible Azure Database pour MySQL. Pour désactiver la mise en œuvre des connexions chiffrées, vous devez définir le paramètre de serveur require_secure_transport sur OFF, comme indiqué dans la capture d’écran, et enregistrer la configuration du paramètre de serveur pour qu’elle prenne effet. require_secure_transport est un paramètre de serveur dynamique qui prend effet immédiatement et ne nécessite pas le redémarrage du serveur pour prendre effet.
Se connecter à l’aide du client de ligne de commande mysql avec TLS désactivé
L’exemple suivant montre comment vous connecter à votre serveur à l’aide de l’interface de ligne de commande mysql. Utilisez le paramètre de chaîne de connexion --ssl-mode=DISABLED pour désactiver la connexion TLS/SSL à partir du client mysql. Remplacez les valeurs par le nom et le mot de passe réels de votre serveur.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED
Important
Si vous définissez require_secure_transport à OFF sur l’instance de serveur flexible Azure Database pour MySQL, mais si le client se connecte à la connexion sécurisée, elle est acceptée quand même.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=REQUIRED
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.7.29-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show global variables like '%require_secure_transport%';
+--------------------------+-------+
| Variable_name | Value |
| +--------------------------+-------+ |
| require_secure_transport | OFF |
| +--------------------------+-------+ |
| 1 row in set (0.02 sec) |
En résumé, require_secure_transport=OFF la définition assouplit l’application des connexions chiffrées ; par conséquent, le serveur accepte les connexions non chiffrées en plus des connexions chiffrées.
Appliquer la version TLS
Pour définir des versions TLS sur votre instance de serveur flexible Azure Database pour MySQL, vous devez définir le tls_version paramètre du serveur. Le paramètre par défaut du protocole TLS est TLS 1.2. Si votre application prend en charge les connexions au serveur MySQL avec TLS, mais nécessite un protocole autre que TLS 1.2, définissez les versions TLS dans le paramètre de serveur.
tls_version est un paramètre de serveur statique qui nécessite un redémarrage du serveur pour que le paramètre prenne effet.
Se connecter à l’aide du client de ligne de commande mysql avec le protocole TLS/SSL
Télécharger le certificat SSL public
Pour établir des connexions chiffrées avec vos applications clientes, téléchargez le certificat DigiCert Global Root G2 et le certificat Microsoft RSA Root Certificate Authority 2017. Combinez les deux certificats avant de lancer une connexion au serveur. Pour obtenir des instructions détaillées, consultez Comment mettre à jour le magasin de certificats racine sur votre client
Note
Vous devez télécharger le certificat DigiCert Global Root G2 pour vos serveurs dans le cloud Azure Government.
Vous devez télécharger le certificat DigiCert Global Root pour vos serveurs dans Azure Mooncake.
Téléchargez le fichier de certificat dans votre l’emplacement favori. Par exemple, ce didacticiel utilise c:\ssl ou \var\www\html\bin sur votre environnement local ou l’environnement client où votre application est hébergée.
Si vous avez créé votre instance de Serveur flexible Azure Database pour MySQL avec l’option Accès privé (intégration au réseau virtuel), vous devez vous connecter à votre serveur à partir d’une ressource qui se trouve au sein du même réseau virtuel que votre serveur. Vous pouvez créer une machine virtuelle et l’ajouter au réseau virtuel créé avec votre instance de Serveur flexible Azure Database pour MySQL.
Si vous avez créé votre instance de Serveur flexible Azure Database pour MySQL avec l’option Accès public (adresses IP autorisées), vous pouvez ajouter votre adresse IP locale à la liste des règles de pare-feu sur votre serveur.
Vous pouvez choisir mysql.exe ou Utiliser MySQL Workbench avec Azure Database pour MySQL – Serveur flexible -- > pour vous connecter au serveur à partir de votre environnement local.
L’exemple suivant montre comment vous connecter à votre serveur à l’aide de l’interface de ligne de commande mysql. Utilisez le paramètre de chaîne de connexion --ssl-mode=REQUIRED pour appliquer la vérification du certificat TLS/SSL. Passez le chemin d’accès du fichier de certificat local au paramètre --ssl-ca. Remplacez les valeurs par le nom et le mot de passe réels de votre serveur.
sudo apt-get install mysql-client
wget --no-check-certificate https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem
mysql -h mydemoserver.mysql.database.azure.com -u mydemouser -p --ssl-mode=REQUIRED --ssl-ca=DigiCertGlobalRootG2.crt.pem
Note
Vérifiez que la valeur passée à --ssl-ca correspond au chemin de fichier du certificat que vous avez enregistré.
Si vous vous connectez avec la vérification complète (sslmode=VERTIFY_IDENTITY), utilisez \<servername\>.mysql.database.azure.com dans votre chaîne de connexion.
Si vous essayez de vous connecter à votre serveur avec des connexions non chiffrées, vous voyez une erreur indiquant que les connexions utilisant un transport non sécurisé sont interdites :
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
Vérifier la connexion TLS
Exécutez la commande mysql status pour vérifier que vous êtes connecté à l’aide de TLS :
mysql> status
Vérifiez que la connexion est chiffrée en examinant la sortie, qui doit indiquer : SSL: Cipher in use is. Cette suite de chiffrement est un exemple basé sur le client. Celle que vous voyez peut être différente.
Comment identifier les protocoles TLS configurés sur votre serveur ?
Vous pouvez exécuter la commande SHOW GLOBAL VARIABLES LIKE 'tls_version'; et vérifier la valeur pour identifier les protocoles configurés.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
Comment savoir quel protocole TLS mes clients utilisent pour se connecter au serveur ?
Pour vérifier la version TLS utilisée dans cette connexion, exécutez la requête SQL :
SELECT sbt.variable_value AS tls_version, t2.variable_value AS cipher,
processlist_user AS user, processlist_host AS host
FROM performance_schema.status_by_thread AS sbt
JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id
JOIN performance_schema.status_by_thread AS t2 ON t2.thread_id = t.thread_id
WHERE sbt.variable_name = 'Ssl_version' and t2.variable_name = 'Ssl_cipher' ORDER BY tls_version;
Établir une connexion à votre instance de Serveur flexible Azure Database pour MySQL avec des connexions chiffrées à l’aide de diverses infrastructures d’application
Les chaînes de connexion prédéfinies dans la page « Chaînes de connexion » disponibles pour votre serveur dans le portail Azure incluent les paramètres requis pour les langues courantes pour se connecter à votre serveur de base de données à l’aide de TLS/SSL. Le paramètre TLS/SSL varie en fonction du connecteur. Exemples : "useSSL=true", "sslmode=required" ou "ssl_verify_cert=true" et d’autres variantes.
Pour établir une connexion chiffrée à votre instance de Serveur flexible Azure Database pour MySQL par le biais du protocole TLS/SSL à partir de votre application, reportez-vous aux exemples de code suivants :
WordPress
Téléchargez le certificat public SSL et ajoutez les lignes suivantes dans le fichier wp-config.php après la ligne // **MySQL settings - You can get this info from your web host** //.
//** Connect with SSL ** //
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
//** SSL CERT **//
define('MYSQL_SSL_CERT','/FULLPATH/on-client/to/DigiCertGlobalRootG2.crt.pem');
PHP
$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/DigiCertGlobalRootG2.crt.pem", NULL, NULL);
mysqli_real_connect($conn, 'mydemoserver.mysql.database.azure.com', 'myadmin', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno()) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
PHP (avec PDO)
$options = array(
PDO::MYSQL_ATTR_SSL_CA => '/var/www/html/DigiCertGlobalRootG2.crt.pem'
);
$db = new PDO('mysql:host=mydemoserver.mysql.database.azure.com;port=3306;dbname=databasename', 'myadmin', 'yourpassword', $options);
Python (MySQLConnector Python)
try:
conn = mysql.connector.connect(user='myadmin',
password='<password>',
database='quickstartdb',
host='mydemoserver.mysql.database.azure.com',
ssl_ca='/var/www/html/DigiCertGlobalRootG2.crt.pem')
except mysql.connector.Error as err:
print(err)
Python (PyMySQL)
conn = pymysql.connect(user='myadmin',
password='<password>',
database='quickstartdb',
host='mydemoserver.mysql.database.azure.com',
ssl={'ca': '/var/www/html/DigiCertGlobalRootG2.crt.pem'})
Django (PyMySQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'quickstartdb',
'USER': 'myadmin',
'PASSWORD': 'yourpassword',
'HOST': 'mydemoserver.mysql.database.azure.com',
'PORT': '3306',
'OPTIONS': {
'ssl': {'ca': '/var/www/html/DigiCertGlobalRootG2.crt.pem'}
}
}
}
Ruby
client = Mysql2::Client.new(
:host => 'mydemoserver.mysql.database.azure.com',
:username => 'myadmin',
:password => 'yourpassword',
:database => 'quickstartdb',
:sslca => '/var/www/html/DigiCertGlobalRootG2.crt.pem'
)
Golang
rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("/var/www/html/DigiCertGlobalRootG2.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' , 'yourpassword', 'mydemoserver.mysql.database.azure.com', 'quickstartdb')
db, _ := sql.Open("mysql", connectionString)
Java (connecteur MySQL pour Java)
# 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');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
Java (connecteur MariaDB pour Java)
# 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');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
.NET (MySqlConnector)
var builder = new MySqlConnectionStringBuilder
{
Server = "mydemoserver.mysql.database.azure.com",
UserID = "myadmin",
Password = "yourpassword",
Database = "quickstartdb",
SslMode = MySqlSslMode.VerifyCA,
SslCa = "DigiCertGlobalRootG2.crt.pem",
};
using (var connection = new MySqlConnection(builder.ConnectionString))
{
connection.Open();
}
Node.js
var fs = require('fs');
var mysql = require('mysql');
const serverCa = [fs.readFileSync("/var/www/html/DigiCertGlobalRootG2.crt.pem", "utf8")];
var conn=mysql.createConnection({
host:"mydemoserver.mysql.database.azure.com",
user:"myadmin",
password:"yourpassword",
database:"quickstartdb",
port:3306,
ssl: {
rejectUnauthorized: true,
ca: serverCa
}
});
conn.connect(function(err) {
if (err) throw err;
});
Contenu connexe
- Utiliser MySQL Workbench avec Azure Database pour MySQL – Serveur flexible
- Utiliser PHP avec Azure Database pour MySQL – Serveur flexible
- Créer et gérer des réseaux virtuels pour Azure Database pour MySQL – Serveur flexible à l’aide d’Azure CLI
- mise en réseau dans le Serveur flexible Azure Database pour MySQL
- Règles de pare-feu du Serveur flexible Azure Database pour MySQL