Franz: MySQL/MariaDB unter Ubuntu 16.04: SSL einschalten

Hallo,

liebend gerne würde ich am MariaDB-Server SSL einschalten – alleine: ich krieg es nicht hin. Mir drängt sich inzwischen der doch etwas schräge Verdacht auf, dass MariaDB unter Ubuntu gar kein SSL kann.

In /etc/mysql/mariadb.conf.d/mysqld.cnf habe ich die drei SSL-Zeilen

ssl-ca=/etc/mysql/ca-cert.pem    
ssl-cert=/etc/mysql/server-cert.pem    
ssl-key=/etc/mysql/server-key.pem   

Die Dateien sind auch da und (testweise) für jeden lesbar, die Einträge sollen jeder für sich alleine schon das Einschalten von SSL bewirken. Kaputt sind sie wohl auch nicht, openssl x509 -text -in ca-cert.pem beschwert sich jedenfalls nicht.

Nach einem Neustart mittels systemctl restart mysql gibt die Datenbank mir diese Auskünfte:

+---------------+----------------------------+
| Variable_name | Value                      |
+---------------+----------------------------+
| have_openssl  | NO                         |
| have_ssl      | DISABLED                   |
| ssl_ca        | /etc/mysql/ca-cert.pem     |
| ssl_capath    |                            |
| ssl_cert      | /etc/mysql/server-cert.pem |
| ssl_cipher    |                            |
| ssl_crl       |                            |
| ssl_crlpath   |                            |
| ssl_key       | /etc/mysql/server-key.pem  |
+---------------+----------------------------+

Nach have_ssl=disabled müsste SSL grundsätzlich verfügbar sein. Mich irritiert an diesem Punkt allerdings schon das "no" nach have_openssl; warum sollte unter Ubuntu nicht OpenSSL benutzt werden?

Im Fehlerprotokoll steht übrigens nix. Im "general_log" steht zwar was, aber nix zu SSL.

Weiter geht's: Der Versuch, in der mysql-Konsole einen ssl-pflichtigen Benutzer anzulegen führt zu einer Fehlermeldung, und zwar ausgerechnet an dem Punkt, wo "require ssl" steht.


> create user 'test' identified by 'blafasel' require ssl;   

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'require ssl' at line 1

Den Benutzer ohne ssl anzulegen und anschließend mit grant … require ssl zu SSL zu verpflichten, funktioniert zwar, allerdings kann ich mich dann nicht mehr mit der mysql-Konsole anmelden (natürlich mit --ssl-ca etc.), es kommt nur "Access denied". Wird SSL für das Konto nicht mehr verlangt, klappt auch das Anmelden wieder.
Überflüssig, zu erwähnen, dass ein SSL-Angebot der Konsole nicht einmal optional akzeptiert wird. Die Verbindung wird hergestellt, aber der Status zeigt nur "SSL not in use."

Hat jemand eine Idee, woran es liegen könnte?

  1. Hallo,

    bei meiner MariaDB-Installation ist im Gegensatz zu deiner: have_openssl YES

    Hast du mal geprüft, ob die SSL-Lib überhaupt genutzt wird? Führe diesen Shell-Befehl mal aus:

    ldd `which mysqld` | grep ssl
    

    Wie ist der Update-Status des verwendeten Systems? Insbesondere SSL ... In der Doku steht der Hinweis, dass zu alte SSL-Versionen nicht genutzt werden.

    Grüße

    1. Hallo,

      Hast du mal geprüft, ob die SSL-Lib überhaupt genutzt wird?

      In der Doku steht der Hinweis, dass zu alte SSL-Versionen nicht genutzt werden.

      die Seite hatte ich zwar schon gesehen, aber überlesen, dass MariaDB aus dem Debian-Paket statisch mit yaSSL zusammengestöpselt wird (der betreffende Hinweis fing mit "Windows" an, da habe ich den Rest des Satzes überlesen …). Damit hatte sich dann zumindest auch have_openssl = NO erklärt. SSL war also drin, lief aber nicht.

      Nachdem ich den Kram nochmal durchgeguckt habe, entpuppte sich der private Serverschlüssel doch als Problem. Der hat angeblich von Haus aus ein Passwort, das vor Benutzung mit

      openssl rsa -in server-key.pem -out server-key.pem

      entfernt werden muss. Ich kann mich nicht entsinnen, beim Erzeugen des Schlüssels ein Passwort eingegeben zu haben, openssl fragt bei obigem Ummodeln auch nicht danach, aber sei's drum: Es läuft jetzt.

      1. Hallo,

        schön, dass es jetzt läuft. Mir ist noch aufgefallen, dass ich die Version direkt von den mariadb-Servern installiert habe (also nicht aus dem Debian Repository). Nur als Hinweis, falls das in der Zukunft nochmal für jemanden ein Problem werden sollte.

        Grüße

      2. Hallo und guten Morgen,

        Es läuft jetzt.

        Wenn der Port jetzt nach außen offen ist, solltest Du noch fail2ban einrichten für die Datenbank. Ich habe hier täglich zwischen 2 und 20 penetranten unberechtigten Nutzungsversuchen auf meinem MySQL-Zugang.

        Das Einrichten ist etwas fummelig, weil das Auswerten des Logformats noch angepasst werden muss.

        Grüße
        TS

        --
        es wachse der Freifunk
        http://freifunk-oberharz.de
  2. Hallo und guten Tag,

    Hat jemand eine Idee, woran es liegen könnte?

    Hast Du das Binding vom Localhost auf eine IP (oder alle = *) umgetellt. Auf Localhost funktioniert das SSL nicht. So ist es zumindest bei MySQL.

    Grüße
    TS

    --
    es wachse der Freifunk
    http://freifunk-oberharz.de
    1. Hallo TS,

      Hast Du das Binding vom Localhost auf eine IP (oder alle = *) umgetellt. Auf Localhost funktioniert das SSL nicht. So ist es zumindest bei MySQL.

      Nein, das stimmt nicht, da verwechselst du etwas. MySQL kann sogar über das Pipes-Protokoll SSL sprechen.

      LG,
      CK