So aktivieren Sie SSL und Remote-Verbindungen für MySQL unter CentOS 7

MySQL ist ein relationales Open-Source-Datenbanksystem, das auf vielen Betriebssystemen wie Windows, Linux, MacOS und FreeBSD funktioniert. 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 werde ich Ihnen Schritt für Schritt zeigen, wie Sie MySQL sicher für Remote-Verbindungen konfigurieren können. Wenn Sie auf MySQL aus der Ferne zugreifen müssen, ist es entweder erforderlich, ein VPN zu 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 sich nur Benutzer mit den richtigen SSL-Zertifikatsdateien mit dem MySQL-Server verbinden, und der Datenverkehr wird verschlüsselt. Wir werden die neueste Version von MySQL installieren und dann SSL für die Remote-Verbindung konfigurieren. Für das Basissystem werde ich einen CentOS 7 Server verwenden.

Was wir tun werden:

  1. MySQL installieren.
  2. Konfigurieren Sie das MySQL Root-Passwort.
  3. Neue selbstsignierte SSL-Zertifikatsdateien erzeugen.
  4. SSL für MySQL aktivieren.
  5. Fernverbindung aktivieren.
  6. Test.

Voraussetzung

  • CentOS 7 Server
  • Root-Rechte

Schritt 1 – MySQL installieren

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

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

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

Sie werden nach der Installation eines neuen Pakets gefragt, geben Sie ‚y‚ ein und drücken Sie ‚Enter‚ zur Bestätigung.

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

yum -y install mysql-community-server

Wenn die Installation abgeschlossen ist, starten Sie den MySQL-Dienst und aktivieren Sie ihn mit dem Befehl systemctl automatisch zum Startzeitpunkt.

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 dies mit dem Befehl netstat unten.

netstat -plntu

MySQL 5.7 auf CentOS 7 installieren

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

Schritt 2 – Konfigurieren des MySQL Root-Passworts

Standardmäßig generiert MySQL 5.7 beim ersten Start des Dienstes ein Standard-Root-Passwort für Sie. Das Passwort wird in der MySQL-Logdatei ‚/var/log/mysqld.log‘ gespeichert.

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

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

Du wirst ein ähnliches Ergebnis wie unten sehen, mein Standardpasswort ist’wxtX8Te&Uh1K‚.

A temporary password is generated for root@localhost: wxtX8Te&Uh1K

Verbinden Sie sich mit der MySQL-Shell mit dem Standardpasswort 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 diesem Tutorial werde ich ‚Hakase-labs123@‚ als neues MySQL-Rootpasswort verwenden. Führen Sie untenstehende MySQL-Abfragen aus.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Hakase-labs123@';
flush privileges;
exit;

MySQL Root-Passwort auf CentOS 7 konfigurieren

Jetzt können Sie sich wieder mit dem neuen Passwort’Hakase-labs123@‘ anmelden.

mysql -u root -p
TYPE NEW PASSWORD 'Hakase-labs123@'

Schritt 3 – Erstellen neuer selbstsignierter Zertifikatsdateien

Standardmäßig hat MySQL 5.7 seine eigenen SSL-Zertifikatsdateien im Verzeichnis’/var/lib/mysql‘. Aber in diesem Tutorial werde ich Ihnen zeigen, wie Sie Ihre eigenen SSL-Zertifikatsdateien mit OpenSSL erzeugen und dann mit MySQL konfigurieren können.

In diesem Schritt werden wir neue selbstsignierte Zertifikatsdateien generieren. Wir benötigen 3 Zertifikate, CA-Zertifikat, Server-Zertifikat und Schlüssel, Client-Zertifikat 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

Generieren Sie eine neue CA-Zertifikat ca.pem-Datei.

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

CA-Zertifikat für MySQL generieren

Als nächstes müssen wir die serverseitigen Zertifikate erstellen. Erstellen Sie neue Serverzertifikate server-cert.pem und server-key.pem Dateien. Erzeugen 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

Serverzertifikat für MySQL generieren

Erzeugen Sie nun Zertifikatsdateien für den Client. Der MySQL-Server akzeptiert nur Remote-Verbindungen von dem Client, der diese Zertifikatsdateien hat. Erzeugen 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

Client-Zertifikat für MySQL generieren

Hinweis:

Die CA-Zertifikat-Info muss sich von der Client- und Server-Info 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 wie unten beschrieben.

Überprüfen Sie die Zertifikatsfelder für MySQL.

Alle Zertifikatsdateien wurden verifiziert. Ändern Sie den Besitzer des certs-Verzeichnisses auf den Benutzer’mysql‘ und 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 werden wir SSL für MySQL aktivieren. Bevor wir mit der Konfiguration und Aktivierung von SSL auf MySQL beginnen, müssen wir die Standard-Zertifikatsdateien in das neue Backup-Verzeichnis sichern.

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

mkdir -p ~/mysql-certs/

Gehen Sie in das Verzeichnis’/var/lib/mysql‘ und verschieben Sie alle Standardzertifikate in das Backup-Verzeichnis.

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

Sicherung der standardmäßigen MySQL-Zertifikate in das neue Backup-Verzeichnis

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

mysql -u root -p
TYPE NEW PASSWORD 'Hakase-labs123@'

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

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

Sie werden sehen, dass der SSL-Status‘DISABLED‚ lautet und der Root-Benutzer ohne SSL verbunden wurde.

SSL bei deaktiviertem MySQL und Root User Connected ohne SSL

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

vim /etc/my.cnf

Fügen Sie im Abschnitt [mysqld]‚ die folgende Konfiguration 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, den MySQL-Dienst neu starten.

systemctl restart mysqld

Melden Sie sich nun erneut am MySQL an und überprüfen Sie das SSL.

mysql -u root -p
TYPE NEW PASSWORD 'Hakase-labs123@'

Führen Sie die folgende Abfrage durch, um sicherzustellen, dass der Wert des SSL-Abschnitts JA“ ist.

SHOW VARIABLES LIKE '%ssl%';
STATUS;

SSL für MySQL aktiviert, aber Root-Benutzer immer noch nicht ohne SSL verbunden.

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

Um die gesamte lokale Benutzerverbindung mit SSL zu erzwingen, bearbeiten Sie die mysql-Konfigurationsdatei ‚my.cnf‚ erneut.

vim /etc/my.cnf

Fügen Sie die Konfiguration unten an das Ende der Zeile ein.

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

Speichern und beenden Sie MySQL und starten Sie es dann neu.

systemctl restart mysqld

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

mysql -u root -p
TYPE NEW PASSWORD 'Hakase-labs123@'

SHOW VARIABLES LIKE ‚%ssl%‘;
STATUS;

SSL ist bei MySQL aktiviert und Root-Benutzer mit SSL verbunden.

SSL wurde aktiviert und die lokale Verbindung verwendet ebenfalls SSL.

Schritt 5 – Aktivieren von Remote-Verbindungen

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

MySQL-Konfigurationsdatei mit vim bearbeiten.

vim /etc/my.cnf

Fügen Sie diese Konfiguration unten am Ende des Abschnitts ‚[mysqld]‚ ein.

bind-address = *
require_secure_transport = ON

Speichern Sie die Datei und beenden Sie den Editor, den Neustart von MySQL.

systemctl restart mysqld

Erstellen Sie anschließend einen neuen Benutzer für die Remote-Verbindung. Ich werde einen neuen Benutzer namens‘hakase‚ mit dem Passwort‘Hakase-labs123@‚ erstellen und dem‘hakase‚-Benutzer alle Rechte gewähren. Der Benutzer „hakase“ kann sich nur mit dem Zertifikatsschlüssel verbinden.

mysql -u root -p
TYPE NEW PASSWORD 'Hakase-labs123@'

create user ‚hakase’@’%‘ identified by ‚Hakase-labs123@‘ REQUIRE X509;
grant all privileges on *.* to ‚hakase’@’%‘ identified by ‚Hakase-labs123@‘ REQUIRE X509;
flush privileges;

Neuen Benutzer für Remote-Verbindung MySQL anlegen

Es wurde ein neuer Benutzer für die Remote-Verbindung angelegt.

Hinweis:

Möglicherweise sehen Sie‘1 Warnung‚ im Ergebnis der mysql-Abfrage. Es ist nur eine Warnung, ALTER USER-Abfrage anstelle eines GRANT zu verwenden, da die’GRANT‘-Abfrage im nächsten Release veraltet sein wird.

Schritt 6 – Prüfung

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

  1. CA-Zertifikat – ca.pem
  2. Kundenzertifikat – client-cert.pem
  3. Kundenschlüssel – client-key.pem

Ich habe mich in ein anderes Linux-System eingeloggt und dort die mysql-client Pakete installiert. Dann habe ich alle Client-Zertifikatsdateien mit SCP heruntergeladen. Jetzt werde ich mich mit dem MySQL-Server mit den Zertifikatsdateien 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.

Fernverbindung zum MySQL Server CentOS 7 herstellen

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

STATUS;

Fernverbindung mit SSL auf MySQL

Benutzer hakase mit IP-Adresse 10.0.15.10.10 Verbunden mit dem MySQL-Server mit IP-Adresse 10.0.15.11, die Verbindung über TCP/IP auf Port 3306 und über SSL.

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

Zugriff verweigert Remote-Verbindung ohne Client-Zertifikat

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

Unten ist meine Konfiguration – Parameter einstellen.

Verbindung konfigurieren MySQLWorkbench

SSL-Konfiguration – Einstellung von SSL.

SSL-Konfiguration für MySQLWOrkbench

Und unten die Ergebnisse der Verbindung mit SSL Client Zertifikatsdateien.

MySQLWorkbench Mit SSL verbunden

Ein neuer Benutzer hat sich erfolgreich per Fernzugriff mit dem MySQL-Datenbankserver über eine SSL-Verbindung verbunden. Wenn ein Benutzer versucht, sich ohne die Zertifikatsdateien zu verbinden, wird das Ergebnis als‘abgelehnt‚ angezeigt. Die Installation und Konfiguration von MySQL mit SSL-Verbindung wurde erfolgreich durchgeführt.

Referenz

Das könnte dich auch interessieren …