Skip to main content

MySQL Connection über SSL

MySQL Connection über SSL

„Bitte eine sichere Connection zur Datenbank von einem externen Host, danke …“ So, oder so ähnlich klang mein Gedanke und wie sollte es auch anders sein, der Gedanke wollte umgesetzt werden.

Diese Anleitung basiert auf einer Standard-Paketinstallation von MySQL Server 5.5 auf einem Ubuntu 12.04 in der 64-Bit Version.

Voraussetzung für eine saubere SSL Verschlüsselung ist natürlich ein Zertifikat inklusive dem entsprechenden Schlüssel. Entweder gilt es hier also ein offizielles SSL-Zertifikat zu kaufen, oder ein selbst zertifiziertes zu erstellen. Da in der Regel der Quell- und der Ziel-Host in einer Hand sind, reicht hier meiner Meinung ein self-signed Zertifikat vollkommen aus – eine Anleitung, wie diese erstellt werden können findet sich hier in meinem Blog.

Nachdem nun das gewünschte SSL Zertifikat vorliegt wird dies auf dem Server, in einem passenden Verzeichnis abgelegt. Da unter Ubuntu alle relevanten MySQL Files per default unter /var/lib/mysql zu finden sind, habe ich mich für /var/lib/mysql/sslcert entschieden.

Jetzt muss die Konfigurationsdatei des MySQL Servers angepasst werden, diese ist die /etc/mysql/my.cnf. In diesem File ist die SSL Konfiguration bereits vorbereitet und die drei nötigen Zeilen ( in der Sektion [mysqld] ) müssen nun noch folgendermaßen angepasst werden:

ssl-ca=/var/lib/mysql/sslcert/cacert.pem
ssl-cert=/var/lib/mysql/sslcert/server-cert.pem
ssl-key=/var/lib/mysql/sslcert/server-key.pem

Vor dem Neustart des MySQL Servers sollten die entsprechenden Datenbank-Variablen diesen Status zeigen:

mysql> SHOW VARIABLES LIKE '%ssl%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        |          |
| ssl_capath    |          |
| ssl_cert      |          |
| ssl_cipher    |          |
| ssl_key       |          |
+---------------+----------+

Nun wird der MySQL Server neu gestartet ( am besten mittels service mysql restart ) und danach sollte sich der Status der Datenbank-Variablen wiefolgt geändert haben:

mysql> SHOW VARIABLES LIKE '%ssl%';
+---------------+----------------------------------------+
| Variable_name | Value                                  |
+---------------+----------------------------------------+
| have_openssl  | YES                                    |
| have_ssl      | YES                                    |
| ssl_ca        | /var/lib/mysql/sslcert/cacert.pem      |
| ssl_capath    |                                        |
| ssl_cert      | /var/lib/mysql/sslcert/server-cert.pem |
| ssl_cipher    |                                        |
| ssl_key       | /var/lib/mysql/sslcert/server-key.pem  |
+---------------+----------------------------------------+

Eigentlich ist nun alles fertig, sofern der sich verbindende Client auch die entsprechenden Client Zertifikate zur Verbindung nutzt. Bei mir aufgetretene Probleme waren diese, dass die Server-Zertifikate nicht den korrekten User ( im Filesystem ) hatten – dieser muss mysql sein – und der MySQL Server kam nicht mit SSL Unterstützung hoch, was durch einen Server-Start mit dem Parameter –ssl behoben werden kann.

Datenbank, Encrypted, MySQL, SSL


Sven Neidahl

Hallo, ich bin Sven, technikbegeisterter Mensch mit Blog-Ambitionen. Ich liebe Australian-Shepherds, leckeres Essen, laute Musik und Wandern mit anschliessendem Wellness-Programm, hauptsache "Lebe das Leben mit Liebe, Spass und Technik".

Schreibe einen Kommentar

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

Diese Seite ist durch reCAPTCHA und Google geschütztDatenschutz-Bestimmungen UndNutzungsbedingungen anwenden.

The reCAPTCHA verification period has expired. Please reload the page.