systemctl start mysql
systemctl enable mysql
Définir un mot de passe racine MySQL
Par défaut, le mot de passe root MySQL n’est pas défini. Il est donc recommandé de définir le mot de passe root MySQL pour des raisons de sécurité.
Exécutez la commande suivante pour définir le mot de passe root MySQL :
mysql_secure_installation
Plusieurs questions vous seront posées comme indiqué ci-dessous :
Press y|Y for Yes, any other key for No: Y
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
New password:
Re-enter new password:
Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
À ce stade, MySQL est sécurisé et le mot de passe root est défini. Vous pouvez maintenant passer à l’étape suivante.
Vérifier le statut MySQL SSL/TLS
Tout d’abord, vous devrez vérifier si SSL/TLS est activé dans MySQL.
Pour ce faire, connectez-vous à MySQL avec la commande suivante :
mysql -u root -p
Une fois connecté, exécutez la commande suivante pour vérifier l’état SSL/TLS :
mysql> SHOW VARIABLES LIKE '%ssl%';
Exemple de sortie
+-------------------------------------+-----------------+
| Variable_name | Value |
+-------------------------------------+-----------------+
| admin_ssl_ca | |
| admin_ssl_capath | |
| admin_ssl_cert | |
| admin_ssl_cipher | |
| admin_ssl_crl | |
| admin_ssl_crlpath | |
| admin_ssl_key | |
| have_openssl | YES |
| have_ssl | YES |
| mysqlx_ssl_ca | |
| mysqlx_ssl_capath | |
| mysqlx_ssl_cert | |
| mysqlx_ssl_cipher | |
| mysqlx_ssl_crl | |
| mysqlx_ssl_crlpath | |
| mysqlx_ssl_key | |
| performance_schema_show_processlist | OFF |
| ssl_ca | ca.pem |
| ssl_capath | |
| ssl_cert | server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_fips_mode | OFF |
| ssl_key | server-key.pem |
+-------------------------------------+-----------------+
25 rows in set (0.01 sec)
Comme vous pouvez le voir, les deux have_openssl et avoir_ssl les valeurs sont désactivées.
Vous pouvez également vérifier l’état actuel de la connexion avec la commande suivante :
Exemple de sortie
--------------
mysql Ver 8.0.25-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
Connection id: 10
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 1 min 49 sec
Threads: 2 Questions: 15 Slow queries: 0 Opens: 147 Flush tables: 3 Open tables: 66 Queries per second avg: 0.137
--------------
Comme vous pouvez le voir, la connexion SSL n’est pas utilisée dans la connexion actuelle.
Maintenant, quittez le shell MySQL avec la commande suivante :
mysql> EXIT;
Créer des certificats SSL/TLS
Ensuite, vous devrez générer un certificat SSL/TLS et un fichier de clé sur votre serveur. Vous pouvez les créer en utilisant le script mysql_ssl_rsa_setup.
Maintenant, exécutez cet utilitaire comme indiqué ci-dessous pour générer le certificat et la clé SSL/TLS.
mysql_ssl_rsa_setup --uid=mysql
Cela générera et enregistrera tous les fichiers de certificat et de clé dans le répertoire de données de MySQL situé dans /var/lib/mysql. Vous pouvez les vérifier avec la commande suivante :
ls -l /var/lib/mysql/*.pem
Vous devriez voir tous les fichiers dans la sortie suivante :
-rw------- 1 mysql mysql 1680 Jul 10 07:45 /var/lib/mysql/ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 Jul 10 07:45 /var/lib/mysql/ca.pem
-rw-r--r-- 1 mysql mysql 1112 Jul 10 07:45 /var/lib/mysql/client-cert.pem
-rw------- 1 mysql mysql 1680 Jul 10 07:45 /var/lib/mysql/client-key.pem
-rw------- 1 mysql mysql 1680 Jul 10 07:45 /var/lib/mysql/private_key.pem
-rw-r--r-- 1 mysql mysql 452 Jul 10 07:45 /var/lib/mysql/public_key.pem
-rw-r--r-- 1 mysql mysql 1112 Jul 10 07:45 /var/lib/mysql/server-cert.pem
-rw------- 1 mysql mysql 1680 Jul 10 07:45 /var/lib/mysql/server-key.pem
Vous pouvez maintenant utiliser ces fichiers pour activer l’utilisation de SSL sur votre serveur MySQL.
Activer les connexions SSL sur MySQL
Pour activer le SSL/TLS dans MySQL. Redémarrez le service MySQL à l’aide de la commande ci-dessous :
systemctl restart mysql
Maintenant, connectez-vous au shell MySQL et vérifiez le statut avec la commande suivante :
mysql -u root -p --ssl-mode=required
mysql> SHOW VARIABLES LIKE '%ssl%';
Tu devrais voir ça les deux have_openssl et avoir_ssl les variables sont maintenant activées.
+-------------------------------------+-----------------+
| Variable_name | Value |
+-------------------------------------+-----------------+
| admin_ssl_ca | |
| admin_ssl_capath | |
| admin_ssl_cert | |
| admin_ssl_cipher | |
| admin_ssl_crl | |
| admin_ssl_crlpath | |
| admin_ssl_key | |
| have_openssl | YES |
| have_ssl | YES |
| mysqlx_ssl_ca | |
| mysqlx_ssl_capath | |
| mysqlx_ssl_cert | |
| mysqlx_ssl_cipher | |
| mysqlx_ssl_crl | |
| mysqlx_ssl_crlpath | |
| mysqlx_ssl_key | |
| performance_schema_show_processlist | OFF |
| ssl_ca | ca.pem |
| ssl_capath | |
| ssl_cert | server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_fips_mode | OFF |
| ssl_key | server-key.pem |
+-------------------------------------+-----------------+
Vous pouvez également vérifier l’état actuel de la connexion avec la commande suivante :
mysql> s
Exemple de sortie
--------------
mysql Ver 8.0.25-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
Connection id: 8
Current database:
Current user: root@localhost
SSL: Cipher in use is TLS_AES_256_GCM_SHA384
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 31 sec
Threads: 2 Questions: 6 Slow queries: 0 Opens: 134 Flush tables: 3 Open tables: 53 Queries per second avg: 0.193
--------------
La sortie ci-dessus indique que votre session MySQL actuelle utilise une connexion SSL.
Activer la connexion à distance et sécurisée dans MySQL
Par défaut, MySQL n’autorise pas la connexion à partir de l’hôte distant et autorise une connexion non sécurisée. Vous devrez donc configurer MySQL pour autoriser la connexion et accepter uniquement les connexions sécurisées.
Pour ce faire, éditez le fichier de configuration principal MySQL :
nano /etc/mysql/mysql.conf.d/mysqld.cnf
Ajoutez/Modifiez les lignes suivantes :
[mysqld]
require_secure_transport = ON
bind-address = 0.0.0.0
Enregistrez et fermez le fichier, puis redémarrez le service MySQL pour appliquer les modifications de configuration :
systemctl restart mysql
Ensuite, créez un nouvel utilisateur MySQL et une nouvelle base de données pour les clients MySQL distants.
mysql -u root -p
mysql> CREATE DATABASE remotedb;
mysql> CREATE USER 'remoteuser'@'mysql-client-ip' IDENTIFIED BY 'yourpassword' REQUIRE SSL;
Ensuite, accordez tous les privilèges à la base de données distante à l’aide de la commande suivante :
mysql> GRANT ALL PRIVILEGES ON remotedb.* TO 'remoteuser'@'mysql-client-ip' WITH GRANT OPTION;
Ensuite, videz les privilèges et quittez MySQL avec la commande suivante :
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
Vérifier la connexion SSL à partir du client MySQL distant
À ce stade, le serveur MySQL est configuré pour accepter uniquement les connexions sécurisées de l’hôte distant. Maintenant, il est temps de le tester.
Tout d’abord, connectez-vous à la machine cliente et connectez votre serveur MySQL avec la commande suivante :
mysql -h mysql-server-ip -u remoteuser -p
Une fois connecté, vérifiez le statut SSL avec la commande suivante :