Einführung
MySQL ist das beliebteste relationale Open-Source-Datenbankverwaltungssystem der Welt. Moderne Paketmanager haben den Aufwand für die Inbetriebnahme von MySQL etwas verringert, aber es gibt noch einige Konfigurationsschritte, die nach der Installation durchgeführt werden sollten. Einer der wichtigsten Bereiche, in denen zusätzliche Zeit aufgewendet werden muss, ist die Sicherheit.
Standardmäßig ist MySQL so konfiguriert, dass nur lokale Verbindungen akzeptiert werden. Wenn Sie Remoteverbindungen zulassen müssen, ist dies unbedingt erforderlich. In diesem Handbuch wird gezeigt, wie Sie MySQL unter Ubuntu 16.04 so konfigurieren, dass Remoteverbindungen mit SSL / TLS-Verschlüsselung akzeptiert werden.
Voraussetzungen
Um diesem Handbuch folgen zu können, benötigen SietwoUbuntu 16.04-Server. Wir werden einen als MySQL-Server und den anderen als Client verwenden. Erstellen Sie auf jedem dieser Server einen Benutzer ohne Rootberechtigung mit den Berechtigungensudo
. Befolgen Sie unsereUbuntu 16.04 initial server setup guide, um Ihren Server in den entsprechenden Ausgangszustand zu versetzen.
Auf dem ersten Computer sollten SieMySQL serverinstalliert und konfiguriert haben. Befolgen Sie unsereMySQL installation guide for Ubuntu 16.04, um die Software zu installieren und zu konfigurieren.
Installieren Sie auf dem zweiten Computer das PaketMySQL client. Sie können den Paketindex vonapt
aktualisieren und die erforderliche Software installieren, indem Sie Folgendes eingeben:
sudo apt-get update
sudo apt-get install mysql-client
Wenn Ihr Server und Ihr Client bereit sind, fahren Sie unten fort.
Überprüfen Sie den aktuellen SSL / TLS-Status
Bevor wir beginnen, können wir den aktuellen Status von SSL / TLS auf der Instanz vonMySQL serverüberprüfen.
Melden Sie sich mit dem MySQL-Benutzerroot
bei einer MySQL-Sitzung an. Wir werden-h
verwenden, um die lokale IPv4-Loopback-Schnittstelle anzugeben, um den Client zu zwingen, eine Verbindung mit TCP herzustellen, anstatt die lokale Socket-Datei zu verwenden. Auf diese Weise können wir den SSL-Status für TCP-Verbindungen überprüfen:
mysql -u root -p -h 127.0.0.1
Sie werden aufgefordert, das Kennwort für MySQLroot
einzugeben, das Sie während des Installationsvorgangs ausgewählt haben. Anschließend werden Sie in eine interaktive MySQL-Sitzung versetzt.
Zeigen Sie den Status der SSL / TLS-Variablen an, indem Sie Folgendes eingeben:
SHOW VARIABLES LIKE '%ssl%';
Output+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | |
+---------------+----------+
9 rows in set (0.01 sec)
Die Variablenhave_openssl
undhave_ssl
sind beide alsDISABLED
markiert. Dies bedeutet, dass die SSL-Funktionalität auf dem Server kompiliert wurde, jedoch noch nicht aktiviert ist.
Überprüfen Sie den Status unserer aktuellen Verbindung, um Folgendes zu bestätigen:
\s
Output--------------
mysql Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using EditLine wrapper
Connection id: 30
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.17-0ubuntu0.16.04.1 (Ubuntu)
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 3 hours 38 min 44 sec
Threads: 1 Questions: 70 Slow queries: 0 Opens: 121 Flush tables: 1 Open tables: 40 Queries per second avg: 0.005
--------------
Wie aus der obigen Ausgabe hervorgeht, wird SSL derzeit nicht für unsere Verbindung verwendet, obwohl wir über TCP verbunden sind.
Schließen Sie die aktuelle MySQL-Sitzung, wenn Sie fertig sind:
exit
Jetzt können wir MySQL für SSL konfigurieren, um unsere Verbindungen zu sichern.
Generieren Sie SSL / TLS-Zertifikate und -Schlüssel
Um SSL-Verbindungen zu MySQL zu aktivieren, müssen zuerst die entsprechenden Zertifikats- und Schlüsseldateien generiert werden. Ein Dienstprogramm namensmysql_ssl_rsa_setup
wird mit MySQL 5.7 und höher bereitgestellt, um diesen Prozess zu vereinfachen. Ubuntu 16.04 hat eine kompatible Version von MySQL, daher können wir diesen Befehl verwenden, um die erforderlichen Dateien zu generieren.
Die Dateien werden im Datenverzeichnis von MySQL unter/var/lib/mysql
erstellt. Wir benötigen den MySQL-Prozess, um die generierten Dateien lesen zu können, daher übergeben wirmysql
als Benutzer, dem die generierten Dateien gehören sollen:
sudo mysql_ssl_rsa_setup --uid=mysql
Die Generation wird eine Ausgabe erzeugen, die ungefähr so aussieht:
OutputGenerating a 2048 bit RSA private key
...................................+++
.....+++
writing new private key to 'ca-key.pem'
-----
Generating a 2048 bit RSA private key
......+++
.................................+++
writing new private key to 'server-key.pem'
-----
Generating a 2048 bit RSA private key
......................................................+++
.................................................................................+++
writing new private key to 'client-key.pem'
-----
Überprüfen Sie die generierten Dateien, indem Sie Folgendes eingeben:
sudo find /var/lib/mysql -name '*.pem' -ls
Output 256740 4 -rw-r--r-- 1 mysql mysql 1078 Mar 17 17:24 /var/lib/mysql/server-cert.pem
256735 4 -rw------- 1 mysql mysql 1675 Mar 17 17:24 /var/lib/mysqlsql/ca-key.pem
256739 4 -rw-r--r-- 1 mysql mysql 451 Mar 17 17:24 /var/lib/mysqlsql/public_key.pem
256741 4 -rw------- 1 mysql mysql 1679 Mar 17 17:24 /var/lib/mysqlsql/client-key.pem
256737 4 -rw-r--r-- 1 mysql mysql 1074 Mar 17 17:24 /var/lib/mysqlsql/ca.pem
256743 4 -rw-r--r-- 1 mysql mysql 1078 Mar 17 17:24 /var/lib/mysqlsql/client-cert.pem
256736 4 -rw------- 1 mysql mysql 1675 Mar 17 17:24 /var/lib/mysqlsql/private_key.pem
256738 4 -rw------- 1 mysql mysql 1675 Mar 17 17:24 /var/lib/mysqlsql/server-key.pem
Die letzte Spalte zeigt die generierten Dateinamen. Die mittleren Spalten, in denen "mysql" angezeigt wird, geben an, dass die generierten Dateien den richtigen Benutzer- und Gruppenbesitz haben.
Diese Dateien sind die Schlüssel- und Zertifikatpaare für die Zertifizierungsstelle (beginnend mit "ca"), den MySQL-Serverprozess (beginnend mit "server") und für MySQL-Clients (beginnend mit "client"). Darüber hinaus werden die Dateienprivate_key.pem
undpublic_key.pem
von MySQL verwendet, um das Kennwort sicher zu übertragen, wenn kein SSL verwendet wird.
Aktivieren Sie SSL-Verbindungen auf dem MySQL Server
Moderne MySQL-Versionen suchen beim Starten des Servers im MySQL-Datenverzeichnis nach den entsprechenden Zertifikatdateien. Aus diesem Grund müssen wir die MySQL-Konfiguration nicht ändern, um SSL zu aktivieren.
Wir können stattdessen einfach den MySQL-Dienst neu starten:
sudo systemctl restart mysql
Öffnen Sie nach dem Neustart eine neue MySQL-Sitzung mit dem gleichen Befehl wie zuvor. Der MySQL-Client versucht automatisch, eine Verbindung mit SSL herzustellen, wenn dies vom Server unterstützt wird:
mysql -u root -p -h 127.0.0.1
Werfen wir einen Blick auf dieselben Informationen, die wir beim letzten Mal angefordert haben. Überprüfen Sie die Werte der SSL-bezogenen Variablen:
SHOW VARIABLES LIKE '%ssl%';
Output+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | ca.pem |
| ssl_capath | |
| ssl_cert | server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | server-key.pem |
+---------------+-----------------+
9 rows in set (0.00 sec)
Die Variablenhave_openssl
undhave_ssl
lauten diesmal "JA" anstelle von "DEAKTIVIERT". Darüber hinaus wurden die Variablenssl_ca
,ssl_cert
undssl_key
mit den Namen der relevanten Zertifikate gefüllt, die wir generiert haben.
Überprüfen Sie als Nächstes die Verbindungsdetails erneut:
\s
Output--------------
. . .
SSL: Cipher in use is DHE-RSA-AES256-SHA
. . .
Connection: 127.0.0.1 via TCP/IP
. . .
--------------
Dieses Mal wird die spezifische SSL-Verschlüsselung angezeigt, die angibt, dass SSL zum Sichern unserer Verbindung verwendet wird.
Gehe zurück zur Shell:
exit
Unser Server kann jetzt Verschlüsselung verwenden, es sind jedoch einige zusätzliche Konfigurationsschritte erforderlich, um den Remotezugriff und die Verwendung sicherer Verbindungen zu ermöglichen.
Konfigurieren sicherer Verbindungen für Remoteclients
Nachdem SSL auf dem Server verfügbar ist, können Sie den sicheren Remotezugriff konfigurieren. Dazu müssen wir:
-
SSL für Remoteverbindungen erforderlich
-
An eine öffentliche Schnittstelle binden
-
Erstellen Sie einen MySQL-Benutzer für Remoteverbindungen
-
Passen Sie unsere Firewall-Regeln an, um externe Verbindungen zuzulassen
Konfigurieren Sie den Remotezugriff mit obligatorischem SSL
Derzeit ist der MySQL-Server so konfiguriert, dass SSL-Verbindungen von Clients akzeptiert werden. Es werden jedoch weiterhin unverschlüsselte Verbindungen zugelassen, wenn dies vom Client angefordert wird.
Wir können dies beheben, indem wir die Optionrequire_secure_transport
aktivieren. Dies erfordert, dass alle Verbindungen entweder mit SSL oder mit einem lokalen Unix-Socket hergestellt werden. Da auf Unix-Sockets nur vom Server aus zugegriffen werden kann, ist die einzige Verbindungsoption, die Remotebenutzern zur Verfügung steht, SSL.
Öffnen Sie zum Aktivieren dieser Einstellung die Datei/etc/mysql/my.cnf
in Ihrem Texteditor:
sudo nano /etc/mysql/my.cnf
Im Inneren befinden sich zwei!includedir
-Anweisungen, mit denen zusätzliche Konfigurationsdateien erstellt werden. Wir müssen unsere eigenen Konfigurationsbeneathin diese Zeilen einfügen, damit sie alle widersprüchlichen Einstellungen überschreiben.
Erstellen Sie zunächst einen Abschnitt[mysqld]
, der auf den MySQL-Serverprozess abzielt. Setzen Sie unter dieser Abschnittsüberschriftrequire_secure_transport
aufON
:
/etc/mysql/my.cnf
. . .
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
# Require clients to connect either using SSL
# or through a local socket file
require_secure_transport = ON
Diese Leitung ist die einzige Einstellung, die zum Erzwingen sicherer Verbindungen erforderlich ist.
Standardmäßig ist MySQL so konfiguriert, dass es nur auf Verbindungen wartet, die vom lokalen Computer ausgehen. Um es so zu konfigurieren, dass es auf Remoteverbindungen wartet, können wirbind-address
auf eine andere Schnittstelle setzen.
Damit MySQL Verbindungen auf einer seiner Schnittstellen akzeptieren kann, können wirbind-address
auf "0.0.0.0" setzen:
/etc/mysql/my.cnf
. . .
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
# Require clients to connect either using SSL
# or through a local socket file
require_secure_transport = ON
bind-address = 0.0.0.0
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Starten Sie als nächstes MySQL neu, um die neuen Einstellungen zu übernehmen:
sudo systemctl restart mysql
Stellen Sie sicher, dass MySQL "0.0.0.0" anstelle von "127.0.0.1" abhört, indem Sie Folgendes eingeben:
sudo netstat -plunt
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4330/mysqld
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1874/sshd
tcp6 0 0 :::22 :::* LISTEN 1874/sshd
Das “0.0.0.0” in der obigen Ausgabe zeigt an, dass MySQL auf allen verfügbaren Schnittstellen auf Verbindungen wartet.
Als nächstes müssen wir MySQL-Verbindungen über unsere Firewall zulassen. Erstellen Sie eine Ausnahme, indem Sie Folgendes eingeben:
sudo ufw allow mysql
OutputRule added
Rule added (v6)
Remote-Verbindungsversuche sollten nun in der Lage sein, unseren MySQL-Server zu erreichen.
Konfigurieren Sie einen Remote-MySQL-Benutzer
Der MySQL-Server wartet jetzt auf Remoteverbindungen. Derzeit sind jedoch keine Benutzer konfiguriert, die eine Verbindung von einem externen Computer herstellen können.
Melden Sie sich bei MySQL als Benutzer vonroot
an, um loszulegen:
mysql -u root -p
Im Inneren können Sie mit dem BefehlCREATE USER
einen neuen Remotebenutzer erstellen. Wir werden die IP-Adresse unseres Client-Rechners im Host-Teil der Benutzerspezifikation verwenden, um die Verbindungen zu diesem Rechner einzuschränken.
Für eine gewisse Redundanz, falls die Optionrequire_secure_transport
in Zukunft deaktiviert wird, geben wir bei der Kontoerstellung auch an, dass dieser Benutzer SSL benötigt, indem wir die KlauselREQUIRE SSL
einschließen:
CREATE USER 'remote_user'@'mysql_client_IP' IDENTIFIED BY 'password' REQUIRE SSL;
Erteilen Sie als Nächstes den neuen Benutzern Berechtigungen für die Datenbanken oder Tabellen, auf die sie Zugriff haben sollen. Zur Demonstration erstellen wir eineexample
-Datenbank und geben unserem neuen Benutzer das Eigentum:
CREATE DATABASE example;
GRANT ALL ON example.* TO 'remote_user'@'mysql_client_IP';
Entleeren Sie als Nächstes die Berechtigungen, um diese Einstellungen sofort anzuwenden:
FLUSH PRIVILEGES;
Verlassen Sie die Shell wieder, wenn Sie fertig sind:
exit
Unser Server ist so eingerichtet, dass Verbindungen zu unserem Remote-Benutzer hergestellt werden können.
Testen von Remoteverbindungen
Testen Sie auf demMySQL client-Computer, ob Sie eine erfolgreiche Verbindung zum Server herstellen können. Verwenden Sie die Option-u
, um den Remotebenutzer anzugeben, und die Option-h
, um die IP-Adresse des MySQL-Servers anzugeben:
mysql -u remote_user -p -h mysql_server_IP
Nach dem Festlegen des Kennworts werden Sie beim Remote-Server angemeldet.
Stellen Sie sicher, dass Ihre Verbindung sicher ist:
\s
Output--------------
. . .
SSL: Cipher in use is DHE-RSA-AES256-SHA
. . .
Connection: mysql_server_IP via TCP/IP
. . .
--------------
Gehe zurück zur Shell:
exit
Versuchen Sie als Nächstes, eine unsichere Verbindung herzustellen:
mysql -u remote_user -p -h mysql_server_IP --ssl-mode=disabled
Nachdem Sie zur Eingabe Ihres Passworts aufgefordert wurden, sollte Ihre Verbindung abgelehnt werden:
OutputERROR 1045 (28000): Access denied for user 'remote_user'@'mysql_server_IP' (using password: YES)
Darauf haben wir hingearbeitet. Es zeigt, dass SSL-Verbindungen zulässig sind, während unverschlüsselte Verbindungen abgelehnt werden.
Zu diesem Zeitpunkt wurde unser MySQL-Server so konfiguriert, dass Remoteverbindungen sicher akzeptiert werden. Sie können hier aufhören, wenn dies Ihren Sicherheitsanforderungen entspricht. Es gibt jedoch einige zusätzliche Elemente, die wir implementieren können, um unsere Sicherheit und unser Vertrauen weiter zu erhöhen.
Konfigurieren der Validierung für MySQL-Verbindungen (optional)
Derzeit ist unser MySQL-Server mit einem SSL-Zertifikat konfiguriert, das von einer lokal generierten Zertifizierungsstelle (CA) signiert wurde. Das Zertifikat und das Schlüsselpaar des Servers reichen aus, um eingehende Verbindungen zu verschlüsseln.
Derzeit nutzen wir jedoch nicht die Vertrauensbeziehung, die eine Zertifizierungsstelle bereitstellen kann. Durch die Verteilung des CA-Zertifikats an die Clients sowie des Client-Zertifikats und des Schlüssels können beide Parteien nachweisen, dass ihre Zertifikate von einer gegenseitig vertrauenswürdigen Zertifizierungsstelle signiert wurden. Dies kann dazu beitragen, gefälschte Verbindungen zu böswilligen Servern zu verhindern.
Um diese zusätzliche, optionale Schutzmaßnahme zu implementieren, müssen wir:
-
Übertragen Sie die entsprechenden SSL-Dateien auf den Client-Computer
-
Erstellen Sie eine Client-Konfigurationsdatei
-
Ändern Sie unseren Remote-Benutzer, um ein vertrauenswürdiges Zertifikat anzufordern
Übertragen Sie die Client-Zertifikate auf den Client-Computer
Zu Beginn müssen wir die MySQL-Zertifizierungsstellendateien und Client-Zertifikatdateien vom MySQL-Server abrufen und auf dem MySQL-Client ablegen.
Erstellen Sie zunächst ein Verzeichnis fürMySQL client im Ausgangsverzeichnis des Benutzers, mit dem Sie eine Verbindung herstellen möchten. Nennen Sie diesclient-ssl
:
mkdir ~/client-ssl
Da der Zertifikatsschlüssel vertraulich ist, sollten wir den Zugriff auf dieses Verzeichnis sperren, damit nur der aktuelle Benutzer darauf zugreifen kann:
chmod 700 ~/client-ssl
Jetzt können wir die Zertifikatinformationen in das neue Verzeichnis kopieren.
Zeigen Sie auf dem Computer vonMySQL serverden Inhalt des CA-Zertifikats an, indem Sie Folgendes eingeben:
sudo cat /var/lib/mysql/ca.pem
Output-----BEGIN CERTIFICATE-----
. . .
-----END CERTIFICATE-----
Kopieren Sie die gesamte Ausgabe einschließlich der ZeilenBEGIN CERTIFICATE
undEND CERTIFICATE
in Ihre Zwischenablage.
Erstellen Sie auf denMySQL client eine Datei mit demselben Namen im neuen Verzeichnis:
nano ~/client-ssl/ca.pem
Fügen Sie den kopierten Zertifikatsinhalt aus Ihrer Zwischenablage ein. Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Zeigen Sie als Nächstes das Client-Zertifikat aufMySQL serveran:
sudo cat /var/lib/mysql/client-cert.pem
Output-----BEGIN CERTIFICATE-----
. . .
-----END CERTIFICATE-----
Kopieren Sie den Inhalt erneut in Ihre Zwischenablage. Denken Sie daran, die erste und letzte Zeile einzuschließen.
Öffnen Sie eine gleichnamige Datei aufMySQL client im Verzeichnisclient-ssl
:
nano ~/client-ssl/client-cert.pem
Fügen Sie den Inhalt aus Ihrer Zwischenablage ein. Speichern und schließen Sie die Datei.
Zeigen Sie abschließend den Inhalt der Client-Schlüsseldatei aufMySQL serveran:
sudo cat /var/lib/mysql/client-key.pem
Output-----BEGIN RSA PRIVATE KEY-----
. . .
-----END RSA PRIVATE KEY-----
Kopieren Sie den angezeigten Inhalt einschließlich der ersten und letzten Zeile in Ihre Zwischenablage.
Öffnen Sie aufMySQL client eine gleichnamige Datei im Verzeichnisclient-ssl
:
nano ~/client-ssl/client-key.pem
Fügen Sie den Inhalt aus Ihrer Zwischenablage ein. Speichern und schließen Sie die Datei.
Der Client-Computer sollte nun alle Anmeldeinformationen haben, die für den Zugriff auf den MySQL-Server erforderlich sind. Als nächstes müssen wir unseren Remote-Benutzer ändern.
Fordern Sie ein Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle für den Remotebenutzer an
Derzeit stehen dem MySQL-Client die Dateien zur Verfügung, um sein Zertifikat beim Verbindungsaufbau dem Server vorzulegen. Der Server ist jedoch immer noch nicht so eingerichtet, dass das Clientzertifikat von einer vertrauenswürdigen Zertifizierungsstelle erforderlich ist.
Um dies zu ändern, melden Sie sich unterMySQL server erneut beim MySQL-Root-Konto an:
mysql -u root -p
Als nächstes müssen wir die Anforderungen für unseren Remote-Benutzer ändern. Anstelle derREQUIRE SSL
-Klausel müssen wir dieREQUIRE X509
-Klausel anwenden. Dies impliziert die gesamte durch die vorherige Anforderung bereitgestellte Sicherheit, erfordert jedoch zusätzlich, dass der verbindende Client ein Zertifikat vorlegt, das von einer Zertifizierungsstelle signiert ist, der der MySQL-Server vertraut.
Verwenden Sie den BefehlALTER USER
, um die Benutzeranforderungen anzupassen:
ALTER USER 'remote_user'@'mysql_client_IP' REQUIRE X509;
Löschen Sie die Änderungen, um sicherzustellen, dass sie sofort angewendet werden:
FLUSH PRIVILEGES;
Beenden Sie wieder die Shell, wenn Sie fertig sind:
exit
Als nächstes können wir testen, ob wir noch eine Verbindung herstellen können.
Validierung des Testzertifikats beim Verbinden
Jetzt ist ein guter Zeitpunkt, um zu überprüfen, ob wir beide Parteien beim Herstellen einer Verbindung validieren können.
Versuchen Sie auf denMySQL client zunächst, eine Verbindung herzustellen, ohne die Client-Zertifikate anzugeben:
mysql -u remote_user -p -h mysql_server_IP
OutputERROR 1045 (28000): Access denied for user 'remote_user'@'mysql_client_IP' (using password: YES)
Ohne Angabe des Client-Zertifikats lehnt der Server die Verbindung ab.
Stellen Sie nun eine Verbindung her, während Sie die Optionen--ssl-ca
,--ssl-cert
und--ssl-key
verwenden, um auf die relevanten Dateien im Verzeichnis~/client-ssl
zu verweisen:
mysql -u remote_user -p -h mysql_server_IP --ssl-ca=~/client-ssl/ca.pem --ssl-cert=~/client-ssl/client-cert.pem --ssl-key=~/client-ssl/client-key.pem
Sie sollten erfolgreich angemeldet sein. Melden Sie sich wieder ab, um wieder auf Ihre Shell-Sitzung zuzugreifen:
exit
Nachdem wir den Zugriff auf den Server bestätigt haben, können wir eine kleine Verbesserung der Benutzerfreundlichkeit implementieren.
Erstellen Sie eine MySQL-Client-Konfigurationsdatei
Um zu vermeiden, dass Sie die Zertifikatdateien jedes Mal angeben müssen, wenn Sie eine Verbindung herstellen, können Sie eine einfache MySQL-Client-Konfigurationsdatei erstellen.
Erstellen Sie in Ihrem Home-Verzeichnis auf dem Computer vonMySQL clienteine versteckte Datei mit dem Namen~/.my.cnf
:
nano ~/.my.cnf
Erstellen Sie oben in der Datei einen Abschnitt mit dem Namen[client]
. Darunter können wir die Optionenssl-ca
,ssl-cert
undssl-key
festlegen, um auf die Dateien zu verweisen, die wir vom Server kopiert haben. Es sollte so aussehen:
~/.my.cnf
[client]
ssl-ca = ~/client-ssl/ca.pem
ssl-cert = ~/client-ssl/client-cert.pem
ssl-key = ~/client-ssl/client-key.pem
Die Optionssl-ca
weist den Client an, zu überprüfen, ob das vom MySQL-Server vorgelegte Zertifikat von der Zertifizierungsstelle signiert ist, auf die wir verwiesen haben. Dadurch kann der Client darauf vertrauen, dass er eine Verbindung zu einem vertrauenswürdigen MySQL-Server herstellt.
Die Optionenssl-cert
undssl-key
verweisen auf die Dateien, die erforderlich sind, um dem MySQL-Server zu beweisen, dass auch er über ein Zertifikat verfügt, das von derselben Zertifizierungsstelle signiert wurde. Dies ist erforderlich, wenn der MySQL-Server überprüfen soll, ob der Client auch von der Zertifizierungsstelle als vertrauenswürdig eingestuft wurde.
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Jetzt können Sie eine Verbindung zum MySQL-Server herstellen, ohne die Optionen--ssl-ca
,--ssl-cert
und--ssl-key
in der Befehlszeile hinzuzufügen:
mysql -u remote_user -p -h mysql_server_ip
Ihr Client und Server sollten nun beim Aushandeln der Verbindung jeweils Zertifikate vorlegen. Jede Partei ist so konfiguriert, dass sie das Remote-Zertifikat mit dem lokal vorhandenen CA-Zertifikat vergleicht.
Fazit
Ihr MySQL-Server sollte jetzt so konfiguriert sein, dass für Remoteclients gesicherte Verbindungen erforderlich sind. Wenn Sie die Schritte zum Überprüfen von Verbindungen mithilfe der Zertifizierungsstelle ausgeführt haben, wird von beiden Seiten ein gewisses Maß an Vertrauen hergestellt, dass die Remotepartei legitim ist.