DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Database Zone»Comment sécuriser MySQL 8 avec SSL/TLS sur Ubuntu 20.04
    Database Zone

    Comment sécuriser MySQL 8 avec SSL/TLS sur Ubuntu 20.04

    octobre 20, 2021
    Comment sécuriser MySQL 8 avec SSL/TLS sur Ubuntu 20.04
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email
    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 :

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.