GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment activer SSL et les connexions à distance pour MySQL sur CentOS 7

MySQL est un système de base de données relationnelle open source qui fonctionne sur de nombreux systèmes d'exploitation, notamment Windows, Linux, MacOS et FreeBSD. C'est probablement le SGBDR OpenSource le plus populaire et un composant central des piles LAMP et LEMP. Il existe de nombreuses applications qui dépendent de MySQL comme Wordpress, Joomla, TYPO3, phpBB et bien d'autres.

Dans ce tutoriel, je vais vous montrer étape par étape comment configurer MySQL en toute sécurité pour les connexions à distance. Lorsque vous devez accéder à MySQL à distance, il est soit nécessaire d'utiliser un VPN car MySQL ne crypte pas les données transférées, soit vous pouvez configurer MySQL pour utiliser SSL, comme je vais vous le montrer dans ce tutoriel. Dans cette configuration, seuls les utilisateurs disposant des fichiers de certificat SSL corrects sont autorisés à se connecter au serveur MySQL et le trafic est crypté. Nous allons installer la dernière version de MySQL, puis configurer SSL pour la connexion à distance. Pour le système de base, j'utiliserai un serveur CentOS 7.

Ce que nous allons faire :

  1. Installez MySQL.
  2. Configurez le mot de passe racine MySQL.
  3. Générer de nouveaux fichiers de certificat SSL auto-signés.
  4. Activer SSL pour MySQL.
  5. Activer la connexion à distance.
  6. Test.

Prérequis

  • Serveur CentOS 7
  • Privilèges root

Étape 1 - Installer MySQL

Dans ce tutoriel, nous utiliserons MySQL 5.7, la dernière version à ce jour. Il est installé à partir du référentiel MySQL, nous devons donc d'abord ajouter un nouveau référentiel CentOS au système.

Ajoutez le nouveau référentiel pour MySQL avec la commande yum ci-dessous.

yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

Il vous sera demandé d'installer un nouveau package, tapez 'y ' et appuyez sur 'Entrée ' pour confirmer.

Vous pouvez maintenant installer la dernière version 5.7 de MySQL sur le serveur comme ceci :

yum -y install mysql-community-server

Une fois l'installation terminée, démarrez le service MySQL et activez-le pour qu'il s'exécute automatiquement au démarrage avec la commande systemctl.

systemctl démarrer mysqld
systemctl activer mysqld

Assurez-vous que MySQL est en cours d'exécution en vérifiant le port utilisé par MySQL (3306). Vérifiez-le avec la commande netstat ci-dessous.

netstat -plntu

MySQL a été installé sur CentOS 7 à partir du référentiel MySQL.

Étape 2 - Configurer le mot de passe racine MySQL

Par défaut, MySQL 5.7 génère un mot de passe root par défaut pour vous lors du premier démarrage du service. Le mot de passe est stocké dans le fichier journal MySQL '/var/log/mysqld.log'.

Pour voir le mot de passe root MySQL par défaut, vous pouvez utiliser la commande grep ci-dessous.

grep 'temporaire' /var/log/mysqld.log

Vous verrez un résultat similaire à celui ci-dessous, mon mot de passe par défaut est 'wxtX8Te&Uh1K '.

Un mot de passe temporaire est généré pour [email protected] :wxtX8Te&Uh1K

Connectez-vous au shell MySQL avec le mot de passe par défaut et remplacez le mot de passe par votre propre mot de passe.

mysql -u root -p
TAPER LE MOT DE PASSE PAR DÉFAUT

Remplacez maintenant le mot de passe par défaut par votre propre mot de passe. Dans ce tutoriel, j'utiliserai '[email protected] ' comme nouveau mot de passe root MySQL. Exécutez les requêtes MySQL ci-dessous.

ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]' ;
vider les privilèges ;
quitter ;

Vous pouvez maintenant vous reconnecter avec le nouveau mot de passe "[email protected]".

mysql -u root -p
TAPEZ LE NOUVEAU MOT DE PASSE '[email protected]'

Étape 3 - Générer de nouveaux fichiers de certificats auto-signés

Par défaut, MySQL 5.7 a ses propres fichiers de certificat SSL dans le répertoire '/var/lib/mysql'. Mais dans ce tutoriel, je vais vous montrer comment générer vos propres fichiers de certificat SSL avec OpenSSL, puis les configurer avec MySQL.

Dans cette étape, nous allons générer de nouveaux fichiers de certificats auto-signés. Nous avons besoin de 3 certificats :certificat CA, certificat et clé de serveur, certificat et clé client . Nous les créerons avec OpenSSL.

Créez un nouveau répertoire pour les fichiers de certificat SSL '/etc/certs/' et accédez à ce répertoire.

mkdir -p /etc/certs
cd /etc/certs

Générer un nouveau fichier ca.pem de certificat CA.

openssl genrsa 2048> ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem

Ensuite, nous devons créer les certificats côté serveur. Créez de nouveaux fichiers de certificat de serveur server-cert.pem et server-key.pem. Générez de nouveaux fichiers de certificat, supprimez la phrase secrète et signez-les avec le certificat CA.

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

Générez maintenant des fichiers de certificat pour le client. Le serveur MySQL n'acceptera que la connexion à distance du client qui possède ces fichiers de certificat. Générez de nouveaux fichiers de certificat client, supprimez la phrase secrète et signez-les à l'aide du certificat CA.

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

Remarque :

Les informations du certificat CA doivent être différentes des informations client et serveur.

Tous les certificats dont nous avons besoin pour cette configuration ont été générés. Nous pouvons maintenant vérifier les fichiers de certificat avec la commande ci-dessous.

openssl verify -CAfile ca.pem server-cert.pem client-cert.pem

Assurez-vous qu'il n'y a pas d'erreur, les résultats sont comme ci-dessous.

Tous les fichiers de certificat ont été vérifiés. Remplacez le propriétaire du répertoire certs par l'utilisateur 'mysql' et modifiez les autorisations de tous les fichiers clés.

chown -R mysql:mysql /etc/certs/
chmod 600 client-key.pem server-key.pem ca-key.pem

Étape 4 - Activer SSL pour MySQL

Dans cette étape, nous allons activer SSL pour MySQL. Avant de commencer à configurer et à activer SSL sur MySQL, nous devons sauvegarder les fichiers de certificat par défaut dans le nouveau répertoire de sauvegarde.

Créer un nouveau répertoire de sauvegarde 'mysql-certs ' pour tous les certificats.

mkdir -p ~/mysql-certs/

Allez dans le répertoire '/var/lib/mysql' et déplacez tous les certificats par défaut dans le répertoire de sauvegarde.

cd /var/lib/mysql/
mv ca.pem ca-key.pem ~/mysql-certs/
mv server-key.pem server-cert.pem ~/mysql-certs /
mv client-key.pem client-cert.pem ~/mysql-certs/
mv private_key.pem public_key.pem ~/mysql-certs/

Redémarrez maintenant le service MySQL.

systemctl redémarre mysqld

Ensuite, vérifiez SSL à partir du shell MySQL. Connectez-vous à mysql avec le nouveau mot de passe :

mysql -u root -p
TAPEZ LE NOUVEAU MOT DE PASSE '[email protected]'

Exécutez la requête ci-dessous afin que nous puissions voir le statut SSL pour MySQL.

AFFICHER LES VARIABLES GLOBALES COMME '%ssl%' ;
STATUT ;

Vous verrez que le statut SSL est 'DISABLED ', et l'utilisateur root a été connecté sans SSL .

Ensuite, nous allons activer la connexion SSL pour MySQL. Nous devons éditer le fichier de configuration MySQL 'my.cnf ' fichier avec vim.

vim /etc/mon.cnf

Dans le '[mysqld] ', collez la configuration ci-dessous.

# Tapez votre propre répertoire de certificats
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/server-cert.pem
ssl-key =/etc/certs/server-key.pem

Enregistrez le fichier et quittez vim, le service MySQL de redémarrage.

systemctl redémarre mysqld

Maintenant, connectez-vous à nouveau à MySQL et vérifiez le SSL.

mysql -u root -p
TAPEZ LE NOUVEAU MOT DE PASSE '[email protected]'

Exécutez la requête ci-dessous pour vous assurer que la valeur de la section SSL est 'OUI '.

AFFICHER LES VARIABLES COMME '%ssl%' ;
STATUT ;

Vous verrez que SSL pour MySQL est activé, mais l'utilisateur root n'est toujours pas connecté à l'aide de la connexion SSL.

Pour forcer la connexion de tous les utilisateurs locaux avec SSL, modifiez le fichier de configuration mysql 'my.cnf ' à nouveau.

vim /etc/mon.cnf

Collez la configuration ci-dessous jusqu'à la fin de la ligne.

[client]
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/client-cert.pem
ssl-key=/etc /certs/client-key.pem

Enregistrez et quittez, puis redémarrez MySQL.

systemctl redémarre mysqld

Connectez-vous à nouveau à MySQL et vérifiez la connexion et SSL activé.

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'


AFFICHER LES VARIABLES COMME '%ssl%' ;
STATUT ;

SSL a été activé et la connexion locale utilise également SSL.

Étape 5 - Activer les connexions à distance

Dans les étapes ci-dessus, nous avons déjà activé SSL pour le serveur MySQL et les connexions locales sont obligées d'utiliser SSL. Dans cette étape, nous allons activer les connexions à distance pour MySQL, mais nous autorisons uniquement les clients disposant de fichiers de certificat signés par notre autorité de certification à se connecter au serveur MySQL.

Modifiez le fichier de configuration MySQL avec vim.

vim /etc/mon.cnf

Collez cette configuration ci-dessous à la fin du '[mysqld] '.

bind-address =*
require_secure_transport =ON

Enregistrez le fichier et quittez l'éditeur, puis redémarrez MySQL.

systemctl redémarre mysqld

Ensuite, créez un nouvel utilisateur pour la connexion à distance. Je vais créer un nouvel utilisateur nommé 'hakase ' avec le mot de passe '[email protected] ' et accorder tous les privilèges au 'hakase ' utilisateur. 'hakase ' l'utilisateur ne pourra se connecter qu'avec la clé de certificat.

mysql -u root -p
TYPE NEW PASSWORD '[email protected]'

créer l'utilisateur 'hakase'@'%' identifié par '[email protected]' NÉCESSITE X509 ;
accorder tous les privilèges sur *.* à 'hakase'@'%' identifié par '[email protected]' REQUIRE X509 ;
vider les privilèges ;

Un nouvel utilisateur pour la connexion à distance a été créé.

Remarque :

Vous verrez peut-être "1 avertissement" ' dans le résultat de la requête mysql. Il s'agit simplement d'un avertissement concernant l'utilisation de la requête ALTER USER au lieu d'une requête GRANT, car la requête "GRANT" sera obsolète dans la prochaine version.

Étape 6 - Tester

Dans la dernière section de ce didacticiel, nous testerons si le nouvel utilisateur nommé "hakase" est capable de se connecter au serveur MySQL à distance avec des fichiers de certificat. Trois certificats pour le client doivent être téléchargés.

  1. Certificat CA - ca.pem
  2. Certificat client :client-cert.pem
  3. Clé client :client-key.pem

Je me suis connecté à un autre système Linux et y ai installé les packages mysql-client. Ensuite, j'ai téléchargé tous les fichiers de certificat client avec SCP. Je vais maintenant me connecter au serveur MySQL avec les fichiers de certificat.

mysql -h 10.0.15.11 -u hakase \
--ssl-ca=ca.pem \
--ssl-cert=client-cert.pem \
--ssl -key=clé-client.pem -p

10.0.15.11 =Adresse IP du serveur MySQL.

Vous pouvez voir l'état de la connexion avec cette requête ci-dessous.

STATUT ;

Hakase de l'utilisateur avec l'adresse IP 10.0.15.10 Connecté au serveur MySQL avec l'adresse IP 10.0.15.11 , la connexion via TCP/IP sur le port 3306 et en utilisant SSL .

Lorsque vous essayez de vous connecter sans fichiers de certificat, vous verrez l'erreur comme ci-dessous.

Ensuite, je vais tester avec l'interface graphique MySQLWorkbench de mon hôte.

Voici ma configuration - Paramètre de réglage.

Configuration SSL - Paramétrage SSL.

Et ci-dessous les résultats de la connexion avec les fichiers du certificat client SSL.

Un nouvel utilisateur s'est connecté avec succès à distance au serveur de base de données MySQL avec une connexion SSL. Lorsqu'un utilisateur essaie de se connecter sans les fichiers de certificat, le résultat sera 'refusé '. L'installation et la configuration de MySQL avec une connexion SSL ont réussi.


Cent OS
  1. Comment réinitialiser votre mot de passe racine MySQL sur CentOS 6

  2. Comment activer le journal des requêtes lentes pour MySQL

  3. Activer SSL et les connexions à distance pour MySQL

  4. CentOS / RHEL :Comment activer SSL pour Apache

  5. Comment activer FTP dans CentOS/RHEL 5 et 6

Comment activer Kdump sur RHEL 7 et CentOS 7

Comment activer le référentiel EPEL sur les serveurs CentOS 8 et RHEL 8

Comment installer Nginx avec PHP et MySQL (pile LEMP) sur CentOS 7

Comment installer ONLYOFFICE sur Red Hat Linux (RHEL) et CentOS

Comment installer Nginx avec PHP et MySQL (pile LEMP) sur CentOS 7.6

Comment installer et activer le référentiel Remi sur CentOS 5, CentOS 6 et CentOS 7