Testen Sie, ob die MySQL-Shell mit --ssl-mode=REQUIRED für den angegebenen --host WIRKLICH funktioniert, ohne zuerst Benutzername, Passwort und Datenbanknamen anzugeben?

Testen Sie, ob die MySQL-Shell mit --ssl-mode=REQUIRED für den angegebenen --host WIRKLICH funktioniert, ohne zuerst Benutzername, Passwort und Datenbanknamen anzugeben?

Ich suche eine Möglichkeit imMySQL-Clientum nur zu prüfen, ob die --ssl-mode=REQUIREDRichtlinie auf eine bestimmte--host ist zu 100% gewährleistet, ohne dass Benutzername, Passwort und Datenbankname möglicherweise beschädigt werdenim Klartext über das Internet. Ausführen dieses Modus mit einem Argument wie: --ssl--check-handshake-only-then-disconnect-and-report.

Dies gilt für ein Szenario, in dem in Bezug auf den Webhost:

  • es gibt keine richtige/verfügbare/zuverlässige Dokumentation zur Verfügbarkeit von SSL auf dem Server,
  • und/oder kein oder nur komplizierter Zugriff auf den MySQL-Server und seine Konfigurationsinformationen.

Nach meinen bisherigen Recherchen glaube ich, dass esKeine Möglichkeit für einen 100% risikolosen SSL/TLS-Handshake-Testlaufwelches istoffensichtlich risikolos, da es ohne Angabe von Benutzername, Passwort, Datenbankname funktioniert.

Die Dokumentation für--ssl-mode=ERFORDERLICHgeht ganz einfach und kurz darauf ein:

ERFORDERLICH: Stellen Sie eine verschlüsselte Verbindung her, wenn der Server verschlüsselte Verbindungen unterstützt. Der Verbindungsversuch schlägt fehl, wenn keine verschlüsselte Verbindung hergestellt werden kann.

Man muss dem MySQL-Client (auch „Shell“ genannt) einfach vertrauen, dass er wirklich in dieser Reihenfolge arbeitet:

  1. Stellen Sie sicher, dass es --ssl-mode=REQUIREDin der gegebenen Situation funktioniert, andernfalls wird das Programm vorzeitig mit einer expliziten Fehlermeldung beendet.
  2. Erst wenn der Handshake und die Verschlüsselungsaushandlung erfolgreich waren, übermittelt der Client den angegebenen Benutzernamen, das Passwort und den Datenbanknamen.
  3. Und dass kein neuer Entwickler jemals genau bei dieser Bedingungsprüfung einen Fehler einführen wird …
  • Dies kann für erfahrene/alltägliche Benutzer ausreichend sein, die ihren MySQL-Client und ihr MySQL-Setup kennen und ihnen vertrauen.

  • Für Neulinge oder eingefleischte Skeptiker, die wirklich die Möglichkeit für einen 100% risikofreien Test brauchen, ist dies allerdings nicht optimal.

Ein wirklich „risikoloser Verbindungs-/Handshake-Testmodus“, der offensichtlich risikolos ist, weil er auch ohne die Übermittlung konkreter Anmeldeinformationen funktioniert, wäre sehr beruhigend.

  • Bevor ich mich anmelde beihttps://bugs.mysql.comund reichen Sie dort eine Funktionsanfrage ein
  • Ich frage hier, ob es vielleicht eine Möglichkeit gibt, die mir nicht bewusst ist.

Antwort1

Wenn Sie nur testen möchten, ob der Client einen Fehler ausgibt, wenn SSL nicht hergestellt werden kann, können Sie die folgenden beiden Methoden schnell und unkompliziert kombinieren:

  • Melden Sie sich einfach mit einem falschen Benutzernamen und Passwort an
  • zwingen Sie den Client, den SSL-Handshake mit einer fehlerhaften Chiffre wie--ssl-cipher SEED-SHA

Sie sollten immer den Fehler „SSL-Fehler“ und nicht „falsches Passwort“ sehen. Probieren Sie es mit „ --ssl-mode=REQUIREDon“ und „off“ aus, um zu überprüfen, ob ein Fehler ausgegeben wird oder auf Klartext zurückgegriffen wird.


Wenn Sie prüfen möchten, ob der Server SSL unterstützt (und in welchem ​​Umfang), ist etwas wie nmap besser geeignet. Stellen Sie sicher, dass Sie eine aktuelle Version von nmap haben, und verwenden Sie dann beispielsweise Folgendes, um den SSL-Status zu prüfen:

nmap --script ssl-enum-ciphers MyServerName -p 3306

Und wenn nichts anderes hilft, können Sie immer mit einer Paketerfassung/Wireshark überprüfen, dass Verbindungen keine Anmeldeinformationen vor SSL senden, obwohl dies eine Lernkurve erfordert.


Wie Sie erwähnen, ist dies einfach, wenn Sie mit demjenigen zusammenarbeiten können, der den Server kontrolliert, und zwar mit Optionen wie:

  • Verwenden Sie eine zertifikatsbasierte Authentifizierung, sodass niemals Geheimnisse übertragen werden
  • SSL auf der Serverseite erforderlich (was bei Internetzugang erforderlich sein sollte)
  • Kontrollieren Sie Verbindungen mit VPN oder SSH, bevor Sie eine Verbindung zu MySql herstellen

aber es ist nicht immer möglich


Ergebnisse von nmap– Dies scheint das richtige Werkzeug für diese Aufgabe zu sein!

nmap --script ssl-enum-ciphers  customerid-mysql.services.mywebhost.com -p 3306
Starting Nmap 7.93 ( https://nmap.org ) at 2022-12-16 01:39 CET
Nmap scan report for customerid-mysql.services.mywebhost.com (XXX.XX.X.XX)
Host is up (0.016s latency).
rDNS record for XXX.XX.X.XX: web20.mywebhost.com

PORT     STATE SERVICE
3306/tcp open  mysql
| ssl-enum-ciphers: 
|   TLSv1.2: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 4096) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 4096) - A
|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 4096) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 4096) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 4096) - A
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 4096) - A
|     compressors: 
|       NULL
|     cipher preference: client
|     warnings: 
|       Key exchange (dh 2048) of lower strength than certificate key
|       Key exchange (secp256r1) of lower strength than certificate key
|_  least strength: A

Nmap done: 1 IP address (1 host up) scanned in 3.23 seconds

Ergebnisse der mysqlKombination mit --ssl-cipherund--ssl-mode

$ mysql --ssl-cipher SEED-SHA  -h customerID-mysql.services.mywebhost.com -u fakeUser -p --ssl-mode=DISABLED 
Enter password: 
ERROR 1045 (28000): Access denied for user 'fakeUser'@'XX.XXX.XX.XX' (using password: YES)
  • ❌ Der Server akzeptiert Klartext.
  • ✅ Aber wir haben nur falsche Daten verraten.
  • ✅ Kein Schaden entstanden. Maximales Risiko festgestellt.
$ mysql --ssl-cipher SEED-SHA  -h customerID-mysql.services.mywebhost.com -u fakeUser -p --ssl-mode=REQUIRED 
Enter password: 
ERROR 2026 (HY000): SSL connection error: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
  • ✅ Server bricht mit fehlerhafter Verschlüsselung ab.
  • ℹ️ Aus der Theorie wissen wir, dass dies eintritt, bevor Anmeldeinformationen gesendet werden.
  • ✅ Dies ist also ein ausreichend guter Vortest für diejenigen, die über das Know-how verfügen.
$ mysql --ssl-cipher SEED-SHA  -h customerID-mysql.services.mywebhost.com -u fakeUser -p --ssl-mode=PREFERRED
Enter password: 
ERROR 2026 (HY000): SSL connection error: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
  • ✅ Auch wenn wir den Server mit PREFERRED in Versuchung führen, aber eine ungültige Chiffre angeben, trifft der Server die sichere Wahl und wird beendet.
  • ✅ Das ist beängstigend. Außerdem verstehe ich nicht, warum --ssl-cipher SEED-SHA genau ein schlechter Verschlüsselungscode ist und unter welchen Bedingungen dies getestet wird.
$ mysql  -h customerID-mysql.services.mywebhost.com -u fakeUser -p --ssl-mode=REQUIRED 
Enter password: 
ERROR 1045 (28000): Access denied for user 'fakeUser'@'77.119.77.94' (using password: YES)
  • ❓ Nicht sicher, wie ich das interpretieren soll:
  • ❌ Obwohl ich es ERFORDERLICH fand, wird das Protokoll weitergeführt (zumindest wird der Benutzername übermittelt, der zum Glück bisher nur „fakeUser“ lautet).
  • ❓Aber wurde das Passwort auch in dieser Anfrage gesendet?

verwandte Informationen