So konfigurieren Sie SSL / TLS für MySQL unter Ubuntu 16.04

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 vonaptaktualisieren 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 MySQLrooteinzugeben, 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_transportaktivieren. 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.cnfin 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 vonrootan, 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_transportin 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-keyverwenden, 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.