GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So aktivieren Sie SSL und Remoteverbindungen für MySQL unter CentOS 7

MySQL ist ein relationales Open-Source-Datenbanksystem, das auf vielen Betriebssystemen funktioniert, einschließlich Windows, Linux, MacOS und FreeBSD. Es ist wahrscheinlich das beliebteste OpenSource-RDBMS und eine zentrale Komponente der LAMP- und LEMP-Stacks. Es gibt viele Anwendungen, die auf MySQL angewiesen sind, wie Wordpress, Joomla, TYPO3, phpBB und viele mehr.

In diesem Tutorial zeige ich Ihnen Schritt für Schritt, wie Sie MySQL sicher für Remoteverbindungen konfigurieren. Wenn Sie remote auf MySQL zugreifen müssen, müssen Sie entweder ein VPN verwenden, da MySQL die übertragenen Daten nicht verschlüsselt, oder Sie können MySQL für die Verwendung von SSL konfigurieren, wie ich Ihnen in diesem Tutorial zeigen werde. In dieser Konfiguration dürfen nur Benutzer mit den richtigen SSL-Zertifikatsdateien eine Verbindung zum MySQL-Server herstellen, und der Datenverkehr ist verschlüsselt. Wir werden die neueste Version von MySQL installieren und dann SSL für die Remote-Verbindung konfigurieren. Als Basissystem verwende ich einen CentOS 7-Server.

Was wir tun werden:

  1. Installieren Sie MySQL.
  2. Konfigurieren Sie das MySQL-Root-Passwort.
  3. Neue selbstsignierte SSL-Zertifikatsdateien generieren.
  4. SSL für MySQL aktivieren.
  5. Remoteverbindung aktivieren.
  6. Testen.

Voraussetzung

  • CentOS 7-Server
  • Root-Rechte

Schritt 1 - MySQL installieren

In diesem Tutorial verwenden wir MySQL 5.7, die derzeit neueste Version. Es wird aus dem MySQL-Repository installiert, also müssen wir dem System zuerst ein neues CentOS-Repository hinzufügen.

Fügen Sie das neue Repository für MySQL mit dem folgenden Befehl yum hinzu.

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

Sie werden aufgefordert, ein neues Paket zu installieren, geben Sie 'y ein ' und drücken Sie 'Enter ' zu bestätigen.

Jetzt können Sie die neueste MySQL-Version 5.7 wie folgt auf dem Server installieren:

yum -y install mysql-community-server

Wenn die Installation abgeschlossen ist, starten Sie den MySQL-Dienst und lassen Sie ihn mit dem Befehl systemctl automatisch beim Booten laufen.

systemctl start mysqld
systemctl enable mysqld

Stellen Sie sicher, dass MySQL läuft, indem Sie den von MySQL verwendeten Port (3306) überprüfen. Überprüfen Sie es mit dem netstat-Befehl unten.

netstat -plntu

MySQL wurde auf CentOS 7 aus dem MySQL-Repository installiert.

Schritt 2 – Konfigurieren Sie das MySQL-Root-Passwort

Standardmäßig generiert MySQL 5.7 ein Standard-Root-Passwort für Sie, wenn Sie den Dienst zum ersten Mal starten. Das Passwort wird in der MySQL-Protokolldatei „/var/log/mysqld.log“ gespeichert.

Um das standardmäßige MySQL-Root-Passwort anzuzeigen, können Sie den unten stehenden grep-Befehl verwenden.

grep 'temporary' /var/log/mysqld.log

Sie sehen ein ähnliches Ergebnis wie das untenstehende, mein Standardpasswort lautet "wxtX8Te&Uh1K". '.

A temporary password is generated for [email protected]: wxtX8Te&Uh1K

Verbinden Sie sich mit dem Standardpasswort mit der MySQL-Shell und ersetzen Sie das Passwort durch Ihr eigenes Passwort.

mysql -u root -p
TYPE IN DEFAULT PASSWORD

Ersetzen Sie nun das Standardpasswort durch Ihr eigenes Passwort. In dieser Anleitung verwende ich „[email protected] ' als neues MySQL-Root-Passwort. Führen Sie unten die MySQL-Abfragen aus.

ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]';
flush privileges;
exit;

Jetzt können Sie sich wieder mit dem neuen Passwort „[email protected]“ verbinden.

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

Schritt 3 – Generieren Sie neue selbstsignierte Zertifikatsdateien

Standardmäßig hat MySQL 5.7 seine eigenen SSL-Zertifikatsdateien im Verzeichnis ‚/var/lib/mysql‘. Aber in diesem Tutorial zeige ich Ihnen, wie Sie Ihre eigenen SSL-Zertifikatsdateien mit OpenSSL generieren und sie dann mit MySQL konfigurieren.

In diesem Schritt werden wir neue selbstsignierte Zertifikatsdateien generieren. Wir benötigen 3 Zertifikate, CA-Zertifikat, Serverzertifikat und Schlüssel, Clientzertifikat und Schlüssel . Wir werden sie mit OpenSSL erstellen.

Erstellen Sie ein neues Verzeichnis für die SSL-Zertifikatsdateien „/etc/certs/“ und wechseln Sie in dieses Verzeichnis.

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

CA.pem-Datei des neuen CA-Zertifikats generieren.

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

Als nächstes müssen wir die serverseitigen Zertifikate erstellen. Erstellen Sie neue Serverzertifikatsdateien server-cert.pem und server-key.pem. Generieren Sie neue Zertifikatsdateien, entfernen Sie die Passphrase und signieren Sie sie mit dem CA-Zertifikat.

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

Generieren Sie nun Zertifikatsdateien für den Client. Der MySQL-Server akzeptiert nur eine Remote-Verbindung von dem Client, der über diese Zertifikatsdateien verfügt. Generieren Sie neue Client-Zertifikatsdateien, entfernen Sie die Passphrase und signieren Sie sie mit dem CA-Zertifikat.

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

Hinweis:

Die CA-Zertifikatsinformationen müssen sich von den Client- und Serverinformationen unterscheiden.

Alle Zertifikate, die wir für dieses Setup benötigen, wurden generiert. Jetzt können wir Zertifikatsdateien mit dem folgenden Befehl überprüfen.

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

Stellen Sie sicher, dass kein Fehler vorliegt, die Ergebnisse sind unten.

Alle Zertifikatsdateien wurden überprüft. Ändern Sie den Eigentümer des Verzeichnisses certs auf den Benutzer „mysql“ und ändern Sie die Berechtigungen aller Schlüsseldateien.

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

Schritt 4 – SSL für MySQL aktivieren

In diesem Schritt aktivieren wir SSL für MySQL. Bevor wir mit der Konfiguration und Aktivierung von SSL auf MySQL beginnen, müssen wir die Standardzertifikatsdateien im neuen Sicherungsverzeichnis sichern.

Erstellen Sie ein neues Backup-Verzeichnis 'mysql-certs ' für alle Zertifikate.

mkdir -p ~/mysql-certs/

Wechseln Sie in das Verzeichnis „/var/lib/mysql“ und verschieben Sie alle Standardzertifikate in das Sicherungsverzeichnis.

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/

Starten Sie nun den MySQL-Dienst neu.

systemctl restart mysqld

Als nächstes überprüfen Sie SSL von der MySQL-Shell. Melden Sie sich mit dem neuen Passwort bei mysql an:

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

Führen Sie die folgende Abfrage aus, damit wir den SSL-Status für MySQL sehen können.

SHOW GLOBAL VARIABLES LIKE '%ssl%';
STATUS;

Der SSL-Status ist „DEAKTIVIERT ', und der Root-Benutzer wurde ohne SSL verbunden .

Als nächstes aktivieren wir die SSL-Verbindung für MySQL. Wir müssen die MySQL-Konfigurationsdatei 'my.cnf bearbeiten ' Datei mit vim.

vim /etc/my.cnf

In der Datei „[mysqld] ' Abschnitt, fügen Sie die Konfiguration unten ein.

# Type your own certificates directory
ssl-ca=/etc/certs/ca.pem
ssl-cert=/etc/certs/server-cert.pem
ssl-key=/etc/certs/server-key.pem

Speichern Sie die Datei und beenden Sie vim, um den MySQL-Dienst neu zu starten.

systemctl restart mysqld

Melden Sie sich jetzt erneut bei MySQL an und überprüfen Sie das SSL.

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

Führen Sie die folgende Abfrage aus, um sicherzustellen, dass der Wert des SSL-Abschnitts "YES" ist '.

SHOW VARIABLES LIKE '%ssl%';
STATUS;

Sie werden sehen, dass SSL für MySQL aktiviert ist, aber der Root-Benutzer immer noch nicht über die SSL-Verbindung verbunden ist.

Um alle lokalen Benutzerverbindungen mit SSL zu erzwingen, bearbeiten Sie die MySQL-Konfigurationsdatei „my.cnf ' wieder.

vim /etc/my.cnf

Konfiguration unten bis zum Ende der Zeile einfügen.

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

Speichern und beenden, dann MySQL neu starten.

systemctl restart mysqld

Verbinden Sie sich erneut mit MySQL und überprüfen Sie die Verbindung und SSL aktiviert.

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


SHOW VARIABLES LIKE '%ssl%';
STATUS;

SSL wurde aktiviert und die lokale Verbindung verwendet ebenfalls SSL.

Schritt 5 – Remote-Verbindungen aktivieren

In den obigen Schritten haben wir SSL bereits für den MySQL-Server aktiviert, und lokale Verbindungen müssen SSL verwenden. In diesem Schritt aktivieren wir Remote-Verbindungen für MySQL, aber wir erlauben nur Clients, die von unserer Zertifizierungsstelle signierte Zertifikatsdateien haben, um sich mit dem MySQL-Server zu verbinden.

Bearbeiten Sie die MySQL-Konfigurationsdatei mit vim.

vim /etc/my.cnf

Fügen Sie diese Konfiguration unten am Ende der Datei „[mysqld]“ ein ' Abschnitt.

bind-address = *
require_secure_transport = ON

Speichern Sie die Datei und beenden Sie den Editor, starten Sie MySQL neu.

systemctl restart mysqld

Erstellen Sie als Nächstes einen neuen Benutzer für die Remoteverbindung. Ich werde einen neuen Benutzer namens „hakase“ erstellen ' mit dem Passwort '[E-Mail geschützt] ' und gewähren Sie dem 'hakase alle Privilegien ' Benutzer. 'Hakase ' Benutzer können sich nur mit dem Zertifikatsschlüssel verbinden.

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

create user 'hakase'@'%' identified by '[email protected]' REQUIRE X509;
grant all privileges on *.* to 'hakase'@'%' identified by '[email protected]' REQUIRE X509;
flush privileges;

Neuer Benutzer für Fernverbindung wurde erstellt.

Hinweis:

Möglicherweise sehen Sie „1 Warnung ' im Ergebnis der MySQL-Abfrage. Es warnt nur vor der Verwendung der ALTER USER-Abfrage anstelle einer GRANT, da die 'GRANT'-Abfrage in der nächsten Version veraltet sein wird.

Schritt 6 – Testen

Im letzten Abschnitt dieses Tutorials werden wir testen, ob der neue Benutzer mit dem Namen „hakase“ in der Lage ist, sich mit Zertifikatsdateien remote mit dem MySQL-Server zu verbinden. Drei Zertifikate für den Client müssen heruntergeladen werden.

  1. CA-Zertifikat - ca.pem
  2. Client-Zertifikat - client-cert.pem
  3. Clientschlüssel - client-key.pem

Ich habe mich bei einem anderen Linux-System angemeldet und dort die mysql-client-Pakete installiert. Dann habe ich alle Client-Zertifikatsdateien mit SCP heruntergeladen. Jetzt werde ich mich mit den Zertifikatsdateien mit dem MySQL-Server verbinden.

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

10.0.15.11 =IP-Adresse des MySQL-Servers.

Sie können den Verbindungsstatus mit dieser Abfrage unten sehen.

STATUS;

Benutzer hakase mit IP-Adresse 10.0.15.10 Mit dem MySQL-Server mit der IP-Adresse 10.0.15.11 verbunden , die Verbindung über TCP/IP auf Port 3306 und mit SSL .

Wenn Sie versuchen, eine Verbindung ohne Zertifikatsdateien herzustellen, wird der folgende Fehler angezeigt.

Als nächstes werde ich mit der MySQLWorkbench-GUI von meinem Host testen.

Unten ist meine Konfiguration - Setting Parameter.

SSL-Konfiguration - SSL einstellen.

Und unten die Ergebnisse der Verbindung mit SSL-Client-Zertifikatsdateien.

Ein neuer Benutzer hat sich erfolgreich über eine SSL-Verbindung remote mit dem MySQL-Datenbankserver verbunden. Wenn ein Benutzer versucht, sich ohne die Zertifikatsdateien zu verbinden, lautet das Ergebnis „verweigert '. Installation und Konfiguration von MySQL mit SSL-Verbindung war erfolgreich.


Cent OS
  1. So setzen Sie Ihr MySQL-Root-Passwort unter CentOS 6 zurück

  2. So konfigurieren Sie entfernte und sichere Verbindungen für MySQL unter Ubuntu 16.04

  3. Aktivieren Sie SSL und Remoteverbindungen für MySQL

  4. CentOS / RHEL:So aktivieren Sie SSL für Apache

  5. So aktivieren Sie FTP in CentOS/RHEL 5 und 6

So aktivieren Sie Kdump auf RHEL 7 und CentOS 7

So aktivieren Sie das EPEL-Repository auf CentOS 8 und RHEL 8 Server

So installieren Sie Nginx mit PHP und MySQL (LEMP Stack) unter CentOS 7

So installieren Sie ONLYOFFICE unter Red Hat Linux (RHEL) und CentOS

So installieren Sie Nginx mit PHP und MySQL (LEMP Stack) unter CentOS 7.6

So installieren und aktivieren Sie das Remi-Repository unter CentOS 5, CentOS 6 und CentOS 7