Le chiffrement SSL sécurise les données en transit entre les instances ApsaraDB RDS for MySQL et les clients, empêchant ainsi la surveillance, l'interception et la falsification. Par défaut, le chiffrement SSL est désactivé.
Cette rubrique explique comment :
Activer le chiffrement SSL (et éventuellement imposer l'utilisation de SSL pour toutes les connexions)
Télécharger le certificat d'autorité de certification (CA)
Configurer les clients — CLI, MySQL Workbench, DMS, Java et Python — pour se connecter via SSL
Prérequis
Avant de commencer, assurez-vous que :
-
Votre instance RDS exécute l'une des versions et éditions MySQL suivantes pour utiliser SSL encryption :
Version MySQL
Édition haute disponibilité RDS
Édition cluster RDS
Édition de base RDS
8,0
Pris en charge
Pris en charge
Pris en charge
5,7
Pris en charge
Pris en charge
Pris en charge
5,6
Pris en charge
—
—
-
Votre instance RDS répond aux deux exigences suivantes pour utiliser forceful SSL encryption :
Exécute MySQL 8.4, 8,0 ou 5,7 sur l'édition de base, l'édition haute disponibilité ou l'édition cluster
Exécute une version mineure du moteur 20241130 ou ultérieure
Vérifiez ces détails sur la page Basic Information de votre instance RDS. Si votre instance répond aux exigences mais que l'onglet SSL est absent, mettez à jour la version mineure du moteur. Pour plus de détails, consultez Mettre à niveau la version mineure du moteur . Si vous modifiez la méthode de facturation d'une instance RDS non serverless exécutant l'édition de base vers serverless, vous devez réactiver le chiffrement SSL.
Impacts potentiels
Comportement lors du redémarrage et du basculement :
|
Opération |
MySQL 5.6 ou 5,7 |
MySQL 8.0 |
|
Activer SSL |
Redémarre ; déclenche un basculement primaire/secondaire |
Redémarre ; déclenche un basculement primaire/secondaire |
|
Désactiver SSL |
Redémarre ; déclenche un basculement primaire/secondaire |
Redémarre ; déclenche un basculement primaire/secondaire |
|
Mettre à jour le certificat |
Redémarre |
Ne redémarre pas |
Effectuez ces opérations pendant les heures creuses et configurez votre application pour qu'elle se reconnecte automatiquement après un redémarrage.
Surcharge CPU : Les connexions chiffrées par SSL augmentent considérablement l'utilisation du CPU. Activez SSL uniquement pour les endpoints qui nécessitent un chiffrement, généralement l'endpoint public.
Chiffrement SSL obligatoire : Après l'activation du chiffrement SSL obligatoire, les connexions non SSL provenant des clients et des proxys de base de données sont refusées.
Fonctionnement
Lorsque vous activez le chiffrement SSL, l'instance RDS génère un certificat serveur, une clé publique et une clé privée.
Lors d'une négociation SSL :
L'instance RDS envoie le certificat serveur (incluant la clé publique) au client.
Le client chiffre une clé symétrique à l'aide de la clé publique reçue.
L'instance RDS déchiffre la clé symétrique à l'aide de sa clé privée.
Les deux parties utilisent la clé symétrique pour chiffrer et déchiffrer les données.
En option, le client peut vérifier le certificat serveur par rapport à un certificat d'autorité de certification (CA) pour confirmer l'identité du serveur et prévenir les attaques de type « man-in-the-middle ».
Support des versions TLS
|
Version MySQL |
TLSv1.0 |
TLSv1.1 |
TLSv1.2 |
TLSv1.3 |
|
8,0 |
Pris en charge |
Pris en charge |
Pris en charge |
Pris en charge (version mineure 20221231 ou ultérieure) |
|
5,7 |
Pris en charge |
Pris en charge |
Pris en charge |
Non pris en charge |
|
5,6 |
Pris en charge |
Pris en charge |
Pris en charge |
Non pris en charge |
TLS 1.0 et TLS 1.1 ont été dépréciés par l'Internet Engineering Task Force (IETF) en 2021. Utilisez TLSv1.2 ou une version ultérieure. Pour plus de détails, consultez RFC 8996 .
Configuration de ssl_cipher
ApsaraDB RDS for MySQL utilise OpenSSL pour TLS. OpenSSL a été mis à niveau vers OpenSSL 3.0 pour :
Les instances MySQL 5.7 exécutant la version mineure du moteur 20230831
Les instances MySQL 8.0 exécutant la version mineure du moteur 20230930
OpenSSL 3.0 ne prend plus en charge TLSv1.0 et TLSv1.1 par défaut. Pour maintenir la compatibilité, le paramètre ssl_cipher est défini par défaut sur "ALL:@SECLEVEL=0", ce qui réactive TLSv1.0 et TLSv1.1.
Si vos charges de travail utilisent uniquement TLSv1.2 ou une version ultérieure, définissez ssl_cipher sur une chaîne vide ("") dans la console ApsaraDB RDS pour renforcer la sécurité.
Types de certificats
Les deux types de certificats protègent un endpoint et servent le même objectif : activer le chiffrement SSL et permettre au client d'authentifier le serveur.
|
Certificat cloud |
Certificat personnalisé |
|
|
Émis par |
Alibaba Cloud |
Une autorité de certification ou auto-signé |
|
Période de validité |
365 jours |
Personnalisée |
|
Endpoints protégés |
1 |
1 |
Cette rubrique couvre les certificats cloud. Pour utiliser un certificat personnalisé, consultez Configurer un certificat personnalisé.
Étape 1 : Activer le chiffrement SSL
Accédez à la page Instances. Dans la barre de navigation supérieure, sélectionnez la région où réside votre instance RDS. Trouvez l'instance et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur Data Security.
-
Dans l'onglet SSL , activez l'interrupteur situé à côté de Disabled .
Si l'onglet SSL n'apparaît pas, vérifiez que votre instance répond à toutes les exigences listées dans Prérequis .
Dans la boîte de dialogue qui s'affiche, sélectionnez l'endpoint à protéger — interne ou public — et cliquez sur OK . Un seul endpoint peut être protégé à la fois.
-
(Facultatif) Activez Forceful Encryption .
ImportantLe chiffrement SSL obligatoire nécessite MySQL 8.4, 8,0 ou 5.7 et une version mineure du moteur 20241130 ou ultérieure. Après l'activation du chiffrement SSL obligatoire, seules les connexions chiffrées par SSL sont acceptées. Les connexions non SSL provenant des clients et des proxys de base de données sont refusées.
-
Attendez environ 1 minute que le processus se termine. Actualisez la page pour confirmer que la fonctionnalité est activée.
RemarqueLe chiffrement SSL pour une instance en lecture seule est indépendant de l'instance principale. L'activation du chiffrement SSL sur l'instance principale ne l'active pas automatiquement sur les instances en lecture seule associées. Pour activer le chiffrement SSL pour une instance en lecture seule, accédez à la page de détails de l'instance en lecture seule, cliquez sur Data Security > SSL, et activez manuellement le chiffrement SSL.
Étape 2 : Télécharger le certificat CA
Accédez à la page Instances, trouvez votre instance et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur Data Security . Dans l'onglet SSL , cliquez sur Download CA Certificate .
Le package téléchargé contient trois fichiers :
|
Fichier |
Format |
Utiliser lorsque |
|
|
PEM |
La plupart des scénarios |
|
|
JKS (Java KeyStore) |
Applications Java ; le mot de passe est |
|
|
P7B (PKCS#7) |
Applications Windows nécessitant le format PKCS#7 |
Étape 3 : Se connecter via SSL
Une fois le chiffrement SSL activé, configurez votre client pour qu'il établisse une connexion chiffrée. Les modes SSL disponibles sont les suivants :
|
Mode |
Comportement |
|
|
Les connexions ne sont pas chiffrées |
|
|
Tente d'établir une connexion chiffrée ; revient à une connexion non chiffrée si SSL n'est pas disponible |
|
|
Exige une connexion chiffrée ; échoue si le chiffrement n'est pas disponible |
|
|
Exige le chiffrement et vérifie le certificat du serveur par rapport au certificat de l'autorité de certification (CA) |
|
|
Exige le chiffrement, vérifie le certificat du serveur et s'assure que le nom d'hôte du certificat correspond à la connexion réelle |
Si le chiffrement SSL forcé est activé, seules les modes REQUIRED, VERIFY_CA ou VERIFY_IDENTITY autorisent les connexions.
CLI
Pour les clients MySQL version 5.7.11 ou ultérieure, utilisez l'option --ssl-mode.
Se connecter sans vérifier le certificat du serveur :
mysql -h <endpoint> -u <username> -p --ssl-mode=PREFERRED
Se connecter et vérifier le certificat du serveur :
mysql -h <endpoint> -u <username> -p \
--ssl-mode=VERIFY_CA \
--ssl-ca=<path-to-certificate>/ApsaraDB-CA-Chain.pem
Remplacez <endpoint>, <username> et <path-to-certificate> par vos valeurs réelles.
Pour les clients MySQL antérieurs à la version 5.7.11 et les clients MariaDB, utilisez plutôt les options--sslet--ssl-verify-server-cert. Consultez la documentation officielle de MySQL et MariaDB pour plus de détails.
MySQL Workbench
Ouvrez MySQL Workbench et choisissez Database > Manage Connections.
Saisissez le endpoint de connexion, le nom d'utilisateur et le mot de passe.
Dans l'onglet SSL, définissez Use SSL sur le mode souhaité. Définissez SSL CA File sur le chemin du fichier PEM téléchargé, puis cliquez sur Test Connection ou OK.
DMS
Lors de l'enregistrement de votre instance RDS dans Data Management (DMS), configurez le paramètre Enable SSL. Pour plus de détails, consultez la rubrique Enregistrer une instance de base de données Alibaba Cloud.
Pour mettre à jour le paramètre d'un enregistrement existant, faites un clic droit sur l'instance, sélectionnez Edit et configurez Enable SSL sous Advanced Information.
Application code
Java
MySQL Connector/J (mysql-connector-java) est le pilote JDBC officiel pour MySQL. Cet exemple utilise la version 8.0.19.
Ajoutez la dépendance suivante :
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
La propriété sslMode est prise en charge à partir de mysql-connector-java 8.0.13. Pour les versions antérieures, utilisez les propriétés useSSL, requireSSL et verifyServerCertificate. Consultez la documentation de MySQL Connector/J.
package com.aliyun.sample;
import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class Sample {
public static void main(String[] args) {
Connection conn = null;
MysqlDataSource mysqlDS = null;
try {
mysqlDS = new MysqlDataSource();
// Set the SSL mode. Options: DISABLED, PREFERRED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// The truststore holds the CA certificate. This example uses JKS format.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Replace with the actual path to ApsaraDB-CA-Chain.jks on your system.
mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
// The JKS file password is always apsaradb.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// Replace the following values with your actual RDS instance details.
mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com"); // RDS endpoint
mysqlDS.setPort(3306);
mysqlDS.setUser("xxxxxx"); // Database account username
mysqlDS.setPassword("xxxxxx"); // Database account password
mysqlDS.setDatabaseName("xxxxxx"); // Database name
conn = mysqlDS.getConnection();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Python
# Install PyMySQL: pip install pymysql
import pymysql
try:
ssl_config = {
"ca": "/path/to/ApsaraDB-CA-Chain.pem", # Path to the CA certificate
"mode": "VERIFY_CA" # SSL mode
}
conn = pymysql.connect(
host="******.mysql.rds.aliyuncs.com",
user="*****",
passwd="******",
db="*****",
ssl=ssl_config
)
cursor = conn.cursor()
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
print("Database version:", data[0])
cursor.close()
except pymysql.Error as e:
print(e)
Opérations supplémentaires
Mettre à jour un certificat cloud
Les certificats cloud sont valables pendant un an. Si le certificat expire avant son renouvellement, les clients utilisant des connexions chiffrées ne peuvent pas se connecter. Alibaba Cloud envoie des notifications d'expiration par e-mail ou par message interne.
Pour planifier le renouvellement automatique, utilisez la boîte de dialogue Schedule Event. Pour plus de détails, consultez la rubrique Gérer les événements planifiés.
Après le renouvellement automatique, les clients n'ont pas besoin de retélécharger ni de reconfigurer le certificat CA.
Pour renouveler manuellement le certificat :
La mise à jour du certificat redémarre les instances exécutant MySQL 5.6 ou 5,7. Les instances exécutant MySQL 8.0 ne redémarrent pas.
Accédez à la page Instances, recherchez votre instance et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur Data Security.
Dans l'onglet SSL, cliquez sur Update Expiration Time.
Vérifier la connexion chiffrée
Exécutez les instructions SQL suivantes pour inspecter la connexion actuelle :
-- Check the cipher suite used by the current session.
-- A non-empty result confirms the connection is encrypted.
SHOW STATUS LIKE 'Ssl_cipher';
-- Check the TLS version used by the current session.
SHOW STATUS LIKE 'Ssl_version';
Dans l'interface CLI MySQL, exécutez \s pour afficher les détails de la connexion. Si la connexion est chiffrée, le champ SSL indique la suite de chiffrement utilisée.
Exiger SSL pour un utilisateur spécifique
ALTER USER 'testuser'@'%' REQUIRE SSL;
Afficher le contenu du certificat CA
openssl x509 -in <path-to-certificate>/ApsaraDB-CA-Chain.pem -text
Désactiver le chiffrement SSL
La désactivation de SSL redémarre l'instance RDS et déclenche un basculement primaire/secondaire. Effectuez cette opération pendant les heures creuses.
Accédez à la page Instances, recherchez votre instance et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur Data Security.
Dans l'onglet SSL, désactivez SSL Encryption. Dans la boîte de dialogue de confirmation, cliquez sur OK.
FAQ
Puis-je configurer une authentification mutuelle qui vérifie à la fois les identités du serveur et du client ?
ApsaraDB RDS for MySQL ne prend pas en charge la vérification de l'identité du client lors de la négociation SSL. Utilisez les listes d'autorisation et la gestion des comptes pour contrôler l'accès.
Comment configurer le chiffrement SSL pour un endpoint de lecture/écriture ?
Consultez la rubrique Configurer le chiffrement SSL pour un endpoint de proxy de base de données.
Application Java : javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
Cette erreur se produit avec les paramètres de sécurité par défaut de JDK 7 ou JDK 8. Dans le fichier jre/lib/security/java.security de votre hôte d'application, définissez :
jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024
Application Java : javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
MySQL Connector/J 8.0.18 et versions antérieures désactivent TLSv1.2 lors de la connexion à des instances MySQL 5.6 ou 5,7. Corrigez ce problème en utilisant l'une des options suivantes :
Mettez à jour MySQL Connector/J vers la version 8.0.19 ou ultérieure
Mettez à niveau l'instance RDS vers MySQL 8.0
Spécifiez explicitement la version TLS en définissant
enabledTLSProtocolsoutlsVersionssurTLSv1.2dans votre configuration de connexion