4 Stimmen

Wie überprüft man, ob eine MySQL-Verbindung SSL-verschlüsselt ist?

Ich verwende den MySQL .NET Connector von der offiziellen MySQL-Website. Ich versuche, eine sichere SSL-Verbindung von meinem C#-Programm zu einer Mysql-Datenbank herzustellen. Der Mysql-Server erlaubt eine Verbindung mit SSL. Die Variable have_ssl ist auf yes gesetzt und ca-cert, server-cert und server-key sind angegeben.

Die Berechtigungen für den Benutzer sind:

'GRANT USAGE ON *.* TO \'logowanie\'@\'%\' IDENTIFIED BY PASSWORD \'*...\' REQUIRE SSL'
'GRANT SELECT ON `db`.`table1` TO \'logowanie\'@\'%\''

Also gehe ich davon aus, dass dieser Benutzer ohne SSL nicht anmelden kann? Liege ich richtig?

Meine Verbindungszeichenfolge im C#-Programm sieht so aus:

"server=127.0.0.1;uid=logowanie;pwd=log1;database=ewidencja;SslMode=Required";

Beachten Sie, dass diese Verbindungszeichenfolge keine Pfade zu Zertifikatsdateien hat! Es hat nur die Option "SSLMode=Required". Ist es möglich, eine SSL-verschlüsselte Verbindung ohne andere SSL-Optionen herzustellen?

Und der Benutzer kann sich anmelden und einige Select-Befehle auf table1 ausführen. Ich gehe also davon aus, dass diese Verbindung SSL-verschlüsselt ist? Wie kann ich überprüfen, ob diese Verbindung SSL-verschlüsselt ist, um 100% sicher zu sein?

9voto

sashoalm Punkte 68243

Meine Antwort von https://stackoverflow.com/a/46609559/492336 veröffentlichen:

Sie können diesen SQL-Befehl von innerhalb der MySqlConnection ausführen: SHOW SESSION STATUS LIKE 'Ssl_cipher', und es wird Ihnen zeigen, ob die Verbindung verschlüsselt ist.

Beispielcode:

var verbindung = new MySqlConnection(ConfigurationManager.AppSettings["Test"]);
verbindung.Open();
var befehl = new MySqlCommand("SHOW SESSION STATUS LIKE \'Ssl_cipher\'", verbindung);
MySqlDataReader leser = befehl.ExecuteReader();
while (leser.Read())
{
    Console.WriteLine($"{leser.GetString(0)}: {leser.GetString(1)}");
}

4voto

Miljen Mikic Punkte 14059

Wie kann ich überprüfen, ob diese Verbindung wirklich zu 100% SSL-verschlüsselt ist?

Installiere Wireshark, erfasse den Datenverkehr und du wirst zu 100% sicher sein, ob er verschlüsselt ist oder nicht.

1voto

Lee Stott Punkte 761

Openssl https://www.openssl.org/ wird mit einem Tool namens "s_client" geliefert, das zum Testen von SSL-Servern verwendet werden kann. Dies ist für *nix, Cygwin und Win32 verfügbar.

Beispielverwendung

$ openssl s_client -connect servername:port -CAfile /path/to/ca.pem -debug -showcerts

Es gibt eine Vielzahl von Optionen wie -pause, -state, etc., die für das Verfolgen von SSL während des Setups und Abbaus nützlich sein könnten.

Sicherheit

Verwenden Sie Wireshark, wie Miljen angemerkt hat.

Hier sind einige Tipps für Wireshark

  1. Verkehr mit Wireshark sammeln
  2. Überprüfen, ob der Inhalt der Pakete wie zufälliges Rauschen aussieht (zufällige Bytes).
  3. Dieser Output sollte ausreichen, um festzustellen, ob Sie SSL aktiviert haben.

Wenn Sie testen möchten, ob Ihr SSL-Code ordnungsgemäß funktioniert, könnten Sie auch überprüfen, ob Sie mit anderen SSL-Implementationen interoperieren können.

Haben Sie den öffentlichen Schlüssel des Servers ordnungsgemäß fest codiert oder das Serverzertifikat ordnungsgemäß überprüft, um sicherzustellen, dass es Ihrem Server entspricht und nicht einem Betrüger? Haben Sie die Clientauthentifizierung aktiviert? Haben Sie die Liste der akzeptablen Verschlüsselungssuiten vernünftig festgelegt? Haben Sie TLS 1.2 verwendet? Sind Sie sich bewusst, dass TLS nur den Kommunikationskanal sichert, aber Sie immer noch sicherstellen müssen, dass die Endpunkte sicher sind, z.B. vor verschiedenen bösartigen Angriffen?

Das könnte Sie bei Ihren Tests unterstützen. Hier sind einige Tipps

Zum Testen siehe https://www.owasp.org/index.php/Testing_for_SSL-TLS_%28OWASP-CM-001%29

Dieser Link enthält großartige Informationen, ist aber keineswegs erschöpfend. Diese Tests sind auf HTTPS ausgerichtet, sollten aber für jede SSL-Implementierung funktionieren, da das SSL-Protokoll analysiert wird, nicht das Anwendungsprotokoll auf höherer Ebene.

0voto

Toan Nguyen Punkte 10777

Auf einem CLI kannst du diesen Befehl ausführen, um zu überprüfen, ob die Daten verschlüsselt sind oder nicht.

sudo tcpdump -l -i eth0 -w - src or dst port 3306 | strings

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X