MariaDB-Client-Zertifkate, nur für einen bestimmten User

Hallo zusammen

Vorab: Es geht nicht um MySQL, sondern um MariaDB. Debian 9 verwendet halt aus Kompatibilitätsgründen immer noch Pfade, Variablen etc., welche das Wort mysql enthalten…

Wie haben einen MariaDB Master/Master-Cluster inkl einem Skript welches Stamm-, Client-, sowie Serverzertifikate generiert. Die Clientzertifikate werden vom Skript jeweils auf den anderen Server verteilt.

Nun:

Wenn ich in der /etc/mysql/mariadb.conf.d/50-server.cnf den Server-Part angebe, dann passiert soweit nix, es scheint optional zu sein ob der Client nun Zertifikate verwendet oder nicht.

Wenn ich aber sowas angebe, die Konfig der Client-Zertis, dann meckers das mysql-Konsolentool bei einer Eingabe von mysql -h localhost -u root -p password plötzlich:

# J.M., 2020-01-17 {

[client-mariadb]
#ssl = 0
#ssl-cert = /etc/mysql/client-cert.pem
#ssl-key = /etc/mysql/client-key.pem
#ssl-ca = /etc/mysql/ca-cert.pem

[client-mariadb-10.1]
#ssl = 0
#ssl-cert = /etc/mysql/client-cert.pem
#ssl-key = /etc/mysql/client-key.pem
#ssl-ca = /etc/mysql/ca-cert.pem

# } J.M., 2020-01-17

Sicherheitshalber habe ich 2 Abschnitte gemacht, und aktuell ist auch wieder jeder Zeile auskommentiert damit’s wieder geht.

Frage: Was muss ich da machen?

Ich möchte EINZING UND ALLEINE dass die Benutzer replication_server_1 sowie replication_server_2 die X509-Technik verwenden… alle anderen sind eh an localhost gebunden und somit nicht öffentlich.

Aber auch replication_server_1 sowie replication_server_2 sind nicht wirklich öffentlich replication_server_1 akzeptiert nur die IP von Server 2, replication_server_2 nur die von Server 1!

Um die replication_server_X-Benutzer zu erstellen, verwende ich folgende Befehl:

FLUSH PRIVILEGES;
DROP USER IF EXISTS 'replication_server_1'@'1.1.1.1';
FLUSH PRIVILEGES;
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication_server_1'@'1.1.1.1' IDENTIFIED BY 'my_password' REQUIRE X509;
UPDATE mysql.user SET authentication_string = PASSWORD('my_password') WHERE User = 'replication_server_1';
FLUSH PRIVILEGES;

resp.

FLUSH PRIVILEGES;
DROP USER IF EXISTS 'replication_server_2'@'2.2.2.2';
FLUSH PRIVILEGES;
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication_server_2'@'2.2.2.2' IDENTIFIED BY 'my_password' REQUIRE X509;
UPDATE mysql.user SET authentication_string = PASSWORD('my_password') WHERE User = 'replication_server_2';
FLUSH PRIVILEGES;

(CREATE USER scheint Mariadb 10.x nicht zu unterstützen, deshalb GRANT; und das nachträgliche UPDATE ist aus Kompatibilitätsgründen besser habe ich festgestellt. Und ein paar mal FLUSH PRIVILEGES schadet sicher auch nicht.)

Nun: Warum zum Teufel kann ich mich dann plötzlich lokal nicht mehr als root per mysql -h localhost -u root -p my_password einloggen mit diese Konfig, WTF!!

Der root-Benutzer ist schliesslich NICHT mit „REQUIRE X509“ geflaggt!!!

# J.M., 2020-01-17 {

[client-mariadb]
ssl = 1
ssl-cert = /etc/mysql/client-cert.pem
ssl-key = /etc/mysql/client-key.pem
ssl-ca = /etc/mysql/ca-cert.pem

[client-mariadb-10.1]
ssl = 1
ssl-cert = /etc/mysql/client-cert.pem
ssl-key = /etc/mysql/client-key.pem
ssl-ca = /etc/mysql/ca-cert.pem

# } J.M., 2020-01-17

oder auch

# J.M., 2020-01-17 {

[client-mariadb]
ssl = 0
ssl-cert = /etc/mysql/client-cert.pem
ssl-key = /etc/mysql/client-key.pem
ssl-ca = /etc/mysql/ca-cert.pem

[client-mariadb-10.1]
ssl = 0
ssl-cert = /etc/mysql/client-cert.pem
ssl-key = /etc/mysql/client-key.pem
ssl-ca = /etc/mysql/ca-cert.pem

# } J.M., 2020-01-17

(Habe zuerst gedacht ssl = x bestimmt ob das Zeugs in jedem Fall ZWANGSLÄUFIG angewendet werden soll - also für jeden Account)

Wie kriege ich es also hin dass die Verschlüsselung nur für einen bestimmten Benutzer mysql_replication_X erforderlich wird.

Und komisch ist, dass das mysql-Konsolentool stress macht mit der Meldung „Unable to very peer checksum“, das Windows-MySQL-GUI-Frontend-Tool „HeidiSQL“ wiederum nicht. WTF hoch 27!!!

Haben die Client-SSL-Einträge in der Konfig zu folge, dass auf dem lokalen System dann mit dem mysql-Konsolentool immer versucht wird die Client-Zertifikate (zur Verbindungsverschlüselung) zu verwenden - auch wenn dann der root halt gar nicht mit „… REQUIRE X509“ geflaggt ist und das zum ganzen Stress führt.

Dann müsste ich evtl. auf diese Client-Einträge verzichten, um bei der SQL-Anweisung wo der Master-Server definiert wird irgendeinen Pfad mitliefern?

Z.B. was in der Art (Pseudocode):

STOP SLAVE;
RESET SLAVE;
RESET MASTER;
CHANGE MASTER TO master_host='1.1.1.1', master_port=3306, master_user='replication_server_1', master_password='my_password', master_log_file='mysql-bin.000001', master_log_pos=313, ssl-cert='/etc/mysql/client-cert.pem' ssl-key='/etc/mysql/client-key.pem' ssl-ca='/etc/mysql/ca-cert.pem'
START SLAVE;
FLUSH PRIVILEGES;
EXIT;

...und dann noch in der Konsole `systemctl restart mysql` ??

Eben halb diesen ganzen Kran nur für diese einzelne Verbindung:

" ssl-cert=’/etc/mysql/client-cert.pem’ ssl-key=’/etc/mysql/client-key.pem’ ssl-ca=’/etc/mysql/ca-cert.pem’ "

Danke für die Feedbacks.

Grüsse, Jan

Das hier alles nutzt mir relativ wenig , wie man für spetifische User das einrichtet, wenn dann plötzlich der root-Account damit „verseucht“ ist !!!

-> https://mariadb.com/kb/en/securing-connections-for-client-and-server/

Und das hier nutzt auch nix, aber evtl. ist ssl = x bei MariaDB rausgerissen worden??

[client-mariadb]
ssl = 0
ssl-cert = /etc/mysql/client-cert.pem
ssl-key = /etc/mysql/client-key.pem
ssl-ca = /etc/mysql/ca-cert.pem

[client-mariadb-10.1]
ssl = 0
ssl-cert = /etc/mysql/client-cert.pem
ssl-key = /etc/mysql/client-key.pem
ssl-ca = /etc/mysql/ca-cert.pem

ssl = 0 deaktiviert den ganzen Karsumpel offensichtlich also nicht!!!

Das hier alles nutzt mir relativ wenig , wie man für spezifische User das einrichtet, wenn dann plötzlich der root-Account damit „verseucht“ ist: Securing Connections for Client and Server

…oder gibt das, was man bei der MariaDB-Konfig im Client-Abschnitt festlegt nur für die MySQL-eigenen Kommandoteilen-Tools wie mysql ?

Die Client-Abschnitte in der Konfig-Datei heissen evtl.:

"Verwende mit den MariaDB-eigenen-Kommandozeilen-CLIENT Tools (mysql, mysqldmp etc.) immer SSL mit den angegebenen Zertifikaten, egal was mit dem nun Zielsystem ist"

und NICHT

"Erwarte als Server immer einen Client, der diese Zertifikate einsetzt" ??

-> Vielleicht läuft deshalb auch der Windows-Client „HeidiSQL“ weiter ohne zu meckern, da er über SSH (REMOTE_IP:22) dann direkt auf localhost:3306 geht …?