2017-10-06 6 views
0

Ich denke, meine Frage ist ähnlich wie C#: how to check if a MySqlConnection is using SSL or not?, aber leider hat es keine guten Antworten, weil es vielleicht unklar ist. Also hier ist mein nehmen:Überprüfen Sie, ob MySqlConnection SSL verwendet

ich eine neue Verbindung erstellt haben:

var connection = new MySqlConnection("Data Source=example.com;Port=3306;Database=Foo;User Id=root;Password=foo;SSL Mode=Required"); 

Wie überprüfe ich es SSL verwendet, ist es so etwas wie connection.IsOverSSL?

Edit:

Ich versuchte SHOW SESSION STATUS LIKE 'Ssl_cipher' verwenden, aber das gibt mir Ssl_cipher auch wenn SSL Mode=Required:

Der Code, den ich verwenden ist:

var connection = new MySqlConnection(ConfigurationManager.AppSettings["Test"]); 
connection.Open(); 
var command = new MySqlCommand("SHOW SESSION STATUS LIKE \'Ssl_cipher\'", connection); 
MySqlDataReader reader = command.ExecuteReader(); 
while (reader.Read()) 
{ 
    Console.WriteLine(reader.GetString(0)); 
} 

Nach https://dev.mysql.com/doc/refman/5.7/en/using-encrypted-connections.html, sollte es geben mich Ssl_cipher | DHE-RSA-AES128-GCM-SHA256

+1

Ich denke, es gibt keine bestimmte Eigenschaft zur Verfügung gestellt, um zu überprüfen, ob 'MySqlConnection' SSL verwendet. Der nächste Weg besteht darin, den Netzwerkverkehr mit einem externen Tool zu erfassen, wie in diesen ähnlichen Problemen beschrieben: https://stackoverflow.com/questions/42703027/how-determine-if-using-ssl-in-a-mysql-connection & https://stackoverflow.com/questions/14389921/how-to-check-whether-a-mysql-connection-is-ssl-encrypted. –

Antwort

0

Sie können die Verbindungszeichenfolge für das Wort "SSL" anzeigen. Dadurch können Sie wissen, ob Ihre IDbConnection in diesem Fall ssl verwendet. Eine Liste der Verbindungszeichenfolgen, die Sie mit MySql verwenden können, finden Sie unter ConnectionStrings.com. Lassen Sie mich wissen, ob dies Ihr Problem löst.

Ich würde versuchen, die Verbindungszeichenfolge zu betrachten. Hier ist eine Lösung, um dies zu demonstrieren.

var connStr = "Data Source=example.com;Port=3306;Database=Foo;User Id=root;Password=foo;SSL Mode=Required"; 
var sslElement = connStr.Split(';') 
    .SingleOrDefault(s => s.StartsWith("SSL", StringComparison.InvariantCultureIgnoreCase)); 

var sslModeEnabled = (sslElement != null 
    && string.Equals(sslElement.Split('=')[1].Trim(), "None", StringComparison.InvariantCultureIgnoreCase) == false); 


Console.WriteLine($"SSL Mode Enabled: {sslModeEnabled}"); 
+0

Mein Problem ist, dass ich der Verbindungszeichenfolge nicht traue - was, wenn "das Wort SSL" keine Wirkung hat? Woher weißt du, dass es etwas bewirkt? Vielleicht wird es nicht geehrt. – sashoalm

+0

Was meinst du mit der Verbindungszeichenfolge? Die Verbindungszeichenfolge für MySql muss in einem bestimmten Format korrekt sein? Hier ist die Referenz [Kapitel 6 Connector/Net Connection-String Optionen Referenz] (https://dev.mysql.com/doc/connector-net/en/connector-net-connection-options.html). Laut eigener Dokumentation haben Sie nur drei Optionen für den Namen. SSL-Modus, SslMode und Ssl-Modus. Alle drei haben das Wort "SSL" in ihnen. Die andere Alternative besteht darin, auf dem ";" Zeichen und suchen Sie das SSL-Element und suchen Sie nach dessen Wert, um es zu validieren. Hilft das? –

+0

Meine Verbindungszeichenfolge hat bereits 'SSL Mode = Required'. Meine Frage war nicht darüber. Ich bin mir nicht sicher, dass die Flagge selbst Wirkung hat, also möchte ich unabhängig überprüfen, dass die Verbindung wirklich SSL ist. – sashoalm

0

stellte sich heraus, war ich nicht in der zweiten Spalte der Abfrage drucken, das funktioniert jetzt:

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

Er druckt Ssl_cipher: AES256-SHA für SSL Mode=Required und Ssl_cipher: für SSL Mode=None. Auf der anderen Seite, bekomme ich Ssl_cipher: AES256-SHA, auch wenn SSL Mode insgesamt fehlt, vielleicht ist es standardmäßig aktiviert.

+0

Bitte sehen Sie meine Bearbeitung oben. –

Verwandte Themen