MySQL Remote Connection with SSL

  • Hallo zusammen,


    ich möchte eine komplette Datenbank auf einen Vserver bei Netcup unter Debian 8 mit MariaDB replizieren - der netcup Server fungiert als Slave.
    Die Verbindung vom Slave zum Master klappt ohne Probleme, allerdings nicht, wenn der Nutzer, der sich auf den Master verbinden darf, SSL nutzen muss. Ich habe MySQL mit SSL nach folgendem Wiki auf beiden Servern eingerichtet: MySQL Verbindungen mit SSL verschlüsseln – Thomas-Krenn-Wiki


    Fehlermeldung, sobald dieser Nutzer nach der Anleitung damit angelegt wurde (allerdings nur mit USAGE Rechten): ERROR 1045 (28000): Access denied for user. Wie gesagt: Das tritt nur auf, sobald REQUIRE X509; oder REQUIRE SSL; bei einem Nutzer gesetzt ist. Ich habe die Ca, Certs und Keys auf den netcup Server vom Master kopiert. Die Firewall blockt es auch nicht, da die Authentifikation am Master ankommt.


    Hat jemand einen Rat, woran das liegen könnte?

  • Spontan würde ich darauf tippen, dass SSL entweder beim Master oder Slave doch nicht so korrekt eingerichtet ist, wie vermutet wird. Was gibt folgender Befehl in der MySQL-Konsole aus:

    Code
    show variables like '%ssl%';


    Deaktiviere das REQUIRE SSL nochmals und versuche vom Slave zum Master mit dem genannten User zu verbinden und dabei alle SSL-Parameter direkt anzugeben. Danach setze ein

    Code
    show status like '%ssl%';

    ab. Ist SSL auch bei diesem Versuch nicht aktiv, stimmt etwas mit Deinen Zertifikaten und/oder Keyfiles davon nicht.


    Sehr hilfreich ist übrigens auch folgendes in der my.cnf von allen beteiligten Servern:

    Code
    log-warnings = 2


    MySQL und SSL kann manchmal recht hinterhältig sein, bis man es zum Laufen bekommt. Siehe z.B. auch diese nette Geschichte.



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Hi,


    danke für die Tipps soweit.
    Also beide Server geben mit einem Testnutzer ohne require SSL aus:




    +---------------------+----------------------------+
    | Variable_name | Value |
    +---------------------+----------------------------+
    | have_openssl | YES |
    | have_ssl | YES |
    | 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 |
    | version_ssl_library | OpenSSL 1.0.1k 8 Jan 2015 |
    +---------------------+----------------------------+
    10 rows in set (0.00 sec)


    Die Abfrage, ob der Nutzer SSL verwendet ist:



    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Ssl_cipher | |
    +---------------+-------+
    1 row in set (0.00 sec)


    Wenn ich die SSL Parameter direkt angebe (

    Code
    mysql --ssl-ca=ca.pem  --ssl-cert=client-cert.pem --ssl-key=client-key.pem -h 1.1.1.1 -u test1 -p

    ) dann geht es und der User hat eine Cipher:


    +---------------+---------------------------+
    | Variable_name | Value |
    +---------------+---------------------------+
    | Ssl_cipher | DHE-RSA-AES256-GCM-SHA384 |
    +---------------+---------------------------+
    1 row in set (0.00 sec)


    Log warnings sind aktiviert, aber die eine Log ist mit MySQL Statements überflutet, da finde ich nichts. Hast du noch einen Tipp, wie ich es enger eingrenzen könnte, weil es scheint ja mit der User Deklaration zu tun zu haben?

  • Das ist normalerweise aber auch nicht notwendig. Wie sah denn Dein CHANGE MASTER TO Befehl aus? Normalerweise definiert man das dort, das reicht:


    Code
    MASTER_SSL = 1,
            MASTER_SSL_CA = '...',
            MASTER_SSL_CERT = '...',
            MASTER_SSL_KEY = '...',



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)