Verschlüsselte MySQL-Verbindung mit C#

Von MySQL.com direkt gibt es den MySQL Connector/NET. Mit diesem ist es möglich nativ auf die Datenbank zu zugreifen. Jedoch soll dieses vielleicht jedoch nicht nur lokal auf dem selben PC geschehen, sondern im Netzwerk oder gar im Internet.

Seit Version 5.03 ist möglich die Verbindungen zu verschlüsseln, jedoch wird standardmäßig die Auswahl einer verschlüsselten Verbindung im Connector gepflegt ignoriert, es bedarf weiterer Einstellungen im MySQL-Server und es gibt (bisher noch) EINE große Einschränkung: Vista-Nutzer sind außen vor, es ist mir nicht gelungen eine verschlüsselte Verbindung von Vista herzustellen, wobei dies unter XP ohne Probleme funktioniert. Ich hoffe, das Problem wird bald von den Entwicklern behoben, siehe http://bugs.mysql.com/bug.php?id=35895

Für eine verschlüsselte Verbindung muss der MySQL-Server jedoch auch SSL-tauglich gemacht werden. Wenn der Server aus den Sourcen selbst kompiliert wird, ist die Option

./configure --with-yassl

zu verwenden. Für bereits bestehende Server Pakete kann per folgenden Befehl in der MySQL-Shell abgefragt werden ob SSL unterstützt "yes", nicht unterstützt "no" oder abgeschalten "disabled" ist:

mysql> SHOW VARIABLES LIKE 'have_ssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl      | YES   |
+---------------+-------+

Nicht unterstützt bedeutet entweder ein MySQL-Paket zu installieren, welches SSL unterstüzt oder selbst aus den Sourcen mit SSL-Support kompilieren (s.o.)

Ist dass geschehen muss der Server nur noch mit SSL gestartet werden. Dazu kann der MySQL-Dämon entweder per SSL-Parameter gestartet werden oder man stellt dies in der Datei my.cnf direkt ein:

ssl-cipher=DHE-RSA-AES256-SHA:AES128-SHA
ssl-ca=/root/openssl/cacert.pem
ssl-cert=/root/openssl/server-cert.pem
ssl-key=/root/openssl/server-key.pem

Mit der Einstellung der Zertifikate ist MySQL für verschlüsselte Verbindungen konfiguiert. Natürlich müssen diese Zertifikate existieren, dazu steht ein Skript bereit, Example 2: http://dev.mysql.com/doc/refman/5.0/en/secure-create-certs.html. Es muss lediglich gespeichert, ausführbar und im obigen Beispiel im Verzeichnis /root/ ausgeführt werden.

Zuletzt ein Neustart

/etc/init.d/mysql restart

und nun unterstützt der MySQL-Server SSL. Der Parameter "Encrypt=true" im ConnectionsString des MySQL Connectors zeigt nun Wirkung – der Traffic wird nicht mehr im Klartext übertragen.

Viel Spass beim Ausprobieren!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.