In diesem Blogpost besprechen wir einige der wichtigen Aspekte der Konfiguration und Verwaltung von SSL beim MySQL-Hosting. Dazu gehören die Standardkonfiguration, das Deaktivieren von SSL und das Aktivieren und Erzwingen von SSL auf einem MySQL-Server. Unsere Beobachtungen basieren auf der Community-Version von MySQL 5.7.21.
Standard-SSL-Konfiguration in MySQL
Standardmäßig installiert und aktiviert der MySQL-Server immer die SSL-Konfiguration. Es wird jedoch nicht erzwungen, dass Clients eine Verbindung über SSL herstellen. Clients können sich mit oder ohne SSL verbinden, da der Server beide Arten von Verbindungen zulässt. Sehen wir uns an, wie Sie dieses Standardverhalten des MySQL-Servers überprüfen können.
Wenn SSL standardmäßig auf dem MySQL-Server installiert und aktiviert ist, sehen wir normalerweise Folgendes:
- Vorhandensein von *.pem-Dateien im MySQL-Datenverzeichnis. Dies sind die verschiedenen Client- und Serverzertifikate und -schlüssel, die für SSL verwendet werden, wie hier beschrieben.
- Während des Serverstarts wird ein Hinweis in der mysqld-Fehlerprotokolldatei erscheinen, wie zum Beispiel:
- [Anmerkung] ca.pem, server-cert.pem und server-key.pem im Datenverzeichnis gefunden. Versuch, die SSL-Unterstützung mit ihnen zu aktivieren.
- Der Wert der Variablen „have_ssl“ ist JA:
mysql> zeigt Variablen wie „have_ssl“;
+—————+——-+
| Variablenname | Wert |
+—————+——-+
| have_ssl | JA |
+—————+——-+
Der MySQL-Client versucht standardmäßig immer, eine verschlüsselte Netzwerkverbindung mit dem Server herzustellen, und wenn dies fehlschlägt, fällt er auf den unverschlüsselten Modus zurück.
Also durch Verbindung zum MySQL-Server mit dem Befehl:
mysql -h
Mit dem Statusbefehl können wir überprüfen, ob die aktuelle Client-Verbindung verschlüsselt ist oder nicht:
mysql>-Status
————–
mysql Ver 14.14 Distrib 5.7.21, für Linux (x86_64) mit EditLine-Wrapper
Verbindungs-ID: 75
Aktuelle Datenbank:
Aktueller Benutzer: [email protected]
SSL: Verwendete Verschlüsselung ist DHE-RSA-AES256-SHA
Aktueller Pager: stdout
Outfile verwenden: ”
Trennzeichen verwenden: ;
Serverversion: 5.7.21-log MySQL Community Server (GPL)
Protokollversion: 10
Verbindung: 127.0.0.1 über TCP/IP
…………………………..
Das oben hervorgehobene SSL-Feld zeigt an, dass die Verbindung verschlüsselt ist. Wir können den MySQL-Client jedoch bitten, sich ohne SSL zu verbinden, indem wir den Befehl verwenden:
mysql -h
mysql>-Status
————–
Verbindungs-ID: 93
Aktuelle Datenbank:
Aktueller Benutzer: [email protected]
SSL: Nicht verwendet
Aktueller Pager: stdout
Outfile verwenden: ”
Trennzeichen verwenden: ;
Serverversion: 5.7.21-log MySQL Community Server (GPL)
Protokollversion: 10
Verbindung: 127.0.0.1 über TCP/IP
……………………………
Wir können sehen, dass wir ohne SSL eine Verbindung zu ihm herstellen können, obwohl SSL auf dem Server aktiviert ist.
MySQL-Tutorial – Konfigurieren und Verwalten von SSL auf Ihrem #MySQL-ServerClick To Tweet
SSL in MySQL deaktivieren
Wenn Sie SSL auf dem MySQL-Server anstelle der Standardoption „aktivierter, aber optionaler Modus“ vollständig deaktivieren möchten, können wir Folgendes tun:
- Löschen Sie das *.pem-Zertifikat und die Schlüsseldateien im MySQL-Datenverzeichnis.
- Starten Sie MySQL mit deaktivierter SSL-Option. Dies kann durch Hinzufügen eines Zeileneintrags erfolgen:
ssl=0 in der Datei my.cnf.
Das können wir beobachten:
- In den mysqld-Protokollen wird es KEINE Hinweise wie :
- geben
- [Anmerkung] ca.pem, server-cert.pem und server-key.pem im Datenverzeichnis gefunden. Versuch, die SSL-Unterstützung mit ihnen zu aktivieren.
- Der Wert der Variablen „have_ssl“ wird deaktiviert:
mysql> zeigt Variablen wie „have_ssl“;
+—————+——-+
| Variablenname | Wert |
+—————+——-+
| have_ssl | DEAKTIVIERT |
+—————+——-+
SSL in MySQL erzwingen
Wir haben gesehen, dass SSL zwar standardmäßig auf dem MySQL-Server aktiviert war, aber nicht erzwungen wurde und wir immer noch ohne SSL eine Verbindung herstellen konnten.
Indem wir jetzt die Systemvariable require_secure_transport festlegen, können wir erzwingen, dass der Server nur SSL-Verbindungen akzeptiert. Dies kann überprüft werden, indem versucht wird, sich mit dem folgenden Befehl mit dem MySQL-Server zu verbinden:
mysql -h
Und wir können sehen, dass die Verbindung mit folgender Fehlermeldung vom Server abgelehnt wird:
FEHLER 3159 (HY000):Verbindungen mit unsicherem Transport sind verboten, während –require_secure_transport=ON.
SSL-Überlegungen für Replikationskanäle
Standardmäßig verbinden sich in einer MySQL-Replikationskonfiguration die Slaves ohne Verschlüsselung mit dem Master.
Daher müssen Slaves MASTER_SSL=1; im Rahmen von „CHANGE MASTER TO“ Befehl, der Parameter für die Verbindung zum Master angibt. Bitte beachten Sie, dass diese Option auch obligatorisch ist, falls Ihr Master so konfiguriert ist, dass er eine SSL-Verbindung mit require_secure_transport erzwingt.