MySQL über TLS auf Ubuntu Top 10.Top 10

MySQL über TLS auf Ubuntu Top 10.Top 10
Traditionell befanden sich Ihr Datenbankserver und Ihr Frontend früher im selben isolierten Netzwerk. Dies ermöglichte es Frontend, mit der Datenbank über einen unverschlüsselten Kanal zu sprechen, ohne sich über die Sicherheit zu sorgen. All dies hat sich im letzten Jahr mit dem Aufstieg von Cloud und verteilten Systemen verändert. Ihre Apps sind in einem einzigen isolierten Netzwerk nicht mehr eingeschränkt. Mehr denn je muss die Kommunikation zwischen Frontend und Datenbank verschlüsselt und gesichert werden.Sie können dies erreichen, indem Sie entweder ein VPN verwenden, um ein isoliertes Netzwerk zu virtualisieren. Die Frontend und die Datenbank können Teil dieses VPN sein und die Kommunikation zwischen ihnen wird gesichert. Oder Sie können TLS verwenden, um die Daten, die an und aus der Datenbank gesendet werden. Wir werden MySQL installieren und so einrichten, dass Abfragen und Daten über TLS fließen.

Installieren von MySQL Server

In der Handbuch wird davon ausgegangen. Die folgenden Befehle in diesem Unterabschnitt sollen auf der Shell des Servers ausgeführt werden. Lassen Sie uns MySQL schnell installieren und auf Ubuntu einrichten.

$ sudo APT Update
$ sudo apt installieren Sie MySQL-Server
$ sudo mysql_secure_installation

Der letzte Befehl wird ein Skript ausführen, um einige der unsicheren Standardeinstellungen von MySQL zu ändern. Erstens wäre eine Aufforderung zur Installation eines Kennwort -Validierungs -Plugins. Dies würde überprüfen, ob das neue Passwort, das Sie für Benutzer einstellen, stark genug ist oder nicht. Sie können dieses Plugin abmelden, wenn Sie möchten. Danach werden Sie aufgefordert, MySQL Root -Benutzerkennwort festzulegen. Legen Sie ein starkes Stammbenutzerkennwort fest.

Drücken Sie Y | Y für Ja, eine andere Taste für Nein: n
Bitte setzen Sie das Passwort für Root hier ein.
Neues Kennwort:
Neues Passwort erneut eingeben:

Danach kann man so ziemlich sagen Ja Zu jeder anderen Eingabeaufforderung in diesem Skript, wenn das Skript den Testbenutzer beseitigt, die Testdatenbank entfernt, die Remote -Root -Anmeldung deaktiviert und schließlich seine Berechtigungstabelle neu lädt. Sobald dies erledigt ist, erstellen wir eine Datenbank und einen neuen Benutzer, der auf diese Datenbank auf diese Datenbank zugreifen kann, ohne dass SSH (oder Anmeldung) in die UNIX/Linux -Shell des Servers zugänglich ist. Aber bevor wir das tun, überprüfen wir, ob unser Aufbau von MySQL TLS integriert hat oder nicht.

Überprüfen Sie, ob TLS verfügbar ist

TLS ist nur in MySQL erhältlich, wenn MySQL so kompiliert wird, dass es in sie eingebaut ist. Es gibt kein dynamisches Modul zum Laden. Wenn Sie sich also nicht sicher sind, dass Ihr MySQL -Paket TLS installiert hat oder nicht, können Sie dies durch Ausführen überprüfen:

$ sudo mysql
MySQL> Variable wie '%SSL%' zeigen
+---------------+----------+
| Variable_name | Wert |
+---------------+----------+
| HABE_OPENSSSL | Deaktiviert |
| HABE_SSL | Deaktiviert |
| SSL_CA | |
| ssl_capath | |
| SSL_CERT | |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | |
+---------------+----------+
9 Zeilen im Set (0.00 Sek.)

Wenn es heißt, dass die Variablen HABE_OPENSSL Und HABE_SSL Werte einstellen auf BEHINDERTE Dann haben Sie SSL und können gut gehen (Sie müssen es nur aktivieren, indem Sie weiter lesen). Wenn die Werte auf festgelegt sind NEIN, Dann müssen Sie eine andere Version von MySQL in Ihrem Paketmanager oder anderswo erhalten.

MySQL> Beenden

MySQL konfigurieren

Standardmäßig hört MySQL Server nur auf der Loopback -Schnittstelle zu, dh in der Adresse 'localhost' oder '127 heißt es.0.0.1 ', für Remote -Verbindungen möchten wir, dass es auch auf die öffentliche statische IP zuhört. Öffnen Sie dies die Datei, /etc/mysql/mein.CNF und fügen Sie die folgenden Zeilen am Ende an.


[Mysqld]
required_secure_transport = on
Bind-Address =

Hier ersetzen Sie die mit der tatsächlichen IP Ihres Servers. Wenn Sie Zweifel daran haben, welche IP zu verwenden ist, können Sie 0 verwenden.0.0.0, um auf allen Schnittstellen zu hören. Starten Sie nun den Server neu, damit die neue Konfiguration stattfinden kann.

$ sudo Service MySQL Neustart

Remote -Benutzer erstellen

Hinweis: Wenn Sie die Datenbank in der Produktion verwenden möchten, besteht die Möglichkeit, dass der Client, der eine Verbindung zu dieser Datenbank herstellt - Ihr Front -End - eine statische IP hat. Wenn dies der Fall ist, ersetzen Sie das Prozentsatz "%" -Symbol durch die entsprechende Client -IP. "%" ist nur eine Wildcard, was "einen beliebigen Wert" bedeutet. Wir werden unsere konfigurieren MyUser Damit sich es von jeder IP -Adresse anmelden kann (z. B. die sich ändernde IP -Adresse Ihrer inländischen Breitbandverbindung), die wohl unsicher ist.

$ sudo mysql
MySQL> Datenbank erstellen mydatabase;
MySQL> Benutzer erstellen 'myuser'@'%', das durch 'Passwort' identifiziert wurde. Erfordert SSL;
MySQL> Geben Sie alles auf mydatabase gewähren.* Zu 'myuser'@'%';

Ersetzen 'Passwort' mit einem tatsächlichen starken Passwort und wir haben einen Benutzer namens benannt MyUser Dies hat einen vollständigen Zugriff auf die Datenbank mydatabase.

TLS aktivieren (auch als "SSL" bekannt))

Während Sie als MySQL -Root -Benutzer bei der MySQL -Shell angemeldet sind, können Sie den Verbindungsstatus überprüfen, indem Sie \ s eingeben:

MySQL> \ s
--------------
Mysql ver 14.14 Verteiler 5.7.24 für Linux (x86_64) mithilfe von Editline -Wrapper
Verbindungs ​​-ID: 5
Aktuelle Datenbank:
Aktueller Benutzer: root@localhost
SSL: Nicht verwendet
Aktueller Pager: Stdout
Verwenden von Outfile: "
Verwenden von Trennzeichen :;
Serverversion: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Protokollversion: 10
Verbindung: Localhost über Unix Socket

Achten Sie auf die hervorgehobenen Linien über Verbindung und SSL. Während dieser Zustand für eine lokale Anmeldung des Stammbenutzer MyUser Der Verbindungstyp ist über TCP/IP kein Rohbuchse und eine SSL -Chiffre wird verwendet. Es gibt einen einfachen Befehl, um dies zu erreichen. Aber zuerst verlassen wir unsere MySQL -Eingabeaufforderung.

MySQL> Beenden

Jetzt rennen,

$ sudo mysql_ssl_rsa_setup --uid = mysql
$ sudo Service MySQL Neustart


Sobald dies erledigt ist, können Sie sich das ansehen HABE_SSL Variable nochmal.

$ sudo mysql
MySQL> Variablen wie '%SSL%' zeigen;
+---------------+-----------------+
| Variable_name | Wert |
+---------------+-----------------+
| HABE_OPENSSSL | Ja |
| HABE_SSL | Ja |
| SSL_CA | ca.pem |
| ssl_capath | |
| SSL_CERT | Server-Cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | Serverschlüssel.pem |
+---------------+-----------------+
9 Zeilen im Set (0.01 Sek.)

Anmelden von einem separaten MySQL -Client

Es gibt neue Parameter, die darauf hinweisen, dass TLS -Zertifikat und der Schlüssel vorhanden sind und TLS aktiviert ist. Jetzt können Sie sich von diesem Computer anmelden, einen MySQL -Client auf Ihrem lokalen Computer öffnen. Wenn Sie keinen (und verwenden Debian oder Ubuntu), erhalten Sie einen MySQL -Shell -Client:

$ sudo apt installieren Sie MySQL-Client
$ mysql -u myuser -p -h

Ersetze das MyUser Und Geben Sie mit Ihrem tatsächlichen Benutzernamen und Ihres Server -IP Ihr ausgewähltes Kennwort ein und Sie sollten in der Datenbank angemeldet werden. Überprüfen Sie die Verbindung:

MySQL> \ s
--------------
Mysql ver 14.14 Verteiler 5.7.24 für Linux (x86_64) mithilfe von Editline -Wrapper
Verbindungs ​​-ID: 5
Aktuelle Datenbank:
Aktueller Benutzer: remote_user@yourLocalip
SSL: Cipher verwendet ist Dhe-rsa-aes256-Sha
Aktueller Pager: Stdout
Verwenden von Outfile: "
Verwenden von Trennzeichen :;
Serverversion: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Protokollversion: 10
Verbindung: über TCP/IP
Server Zeichenset: Latin1
DB Charaktere: Latin1
Client Characterset: UTF8
Conn. Zeichenset: UTF8
TCP -Port: 3306
Betriebszeit: 13 min 52 Sekunden
Threads: 2 Fragen: 32 langsame Abfragen: 0 Öffnet: 107 Flush -Tabellen: 1
Geöffnete Tische: 100 Abfragen pro Sekunde AVG: 0.038
--------------

Sie können sehen, dass jetzt RSA verwendet wird, um Ihren Verkehr zu verschlüsseln, und die Verbindung zu einer bestimmten IP über TCP/IP ist. Jetzt ist Ihre Verbindung zu dieser MySQL -Datenbank sicher.

Abschluss

Dies ist der einfachste Weg, um Ihre Remote -MySQL -Verbindungen mit TLS zu sichern. Denken Sie daran, dass dies nicht dasselbe ist wie die Sicherung eines Phpmyadmin -Clients gegenüber TLS. Das ist TLS und HTTP zusammen und benötigt, um die Weboberfläche zu sichern. Die Verbindung zwischen dem PhpMyAdmin, der Ihre Web -Benutzeroberfläche und die Datenbank möglicherweise noch unverschlüsselt ist, was in Ordnung ist, solange sie sich auf demselben Server befinden.

Sie können mehr über die TLS -Verbindung, die zugrunde liegenden CAS, Zertifikate und das Schlüsselmanagement in den offiziellen Dokumenten von MySQL erfahren.