meta data for this page
  •  

This is an old revision of the document!


MariaDB zertifikatbasiertes Anmeldesystem

Das ab 2016 eingeführte Anmeldesystem an die KSDB basiert auf einer Benutzerauthorisierung durch Client-Zertifikate. Diese Zertifikate werden auf dem Server erstellt und in die HOME-Verzeichnisse der Benutzer kopiert.

Die Benutzer werden in der Datenbank angelegt als <user>@192.168.7.%, sodass sie sich nur noch anmelden können, wenn sie sich im Hausnetz befinden, was die Sicherheit erhöht.

Der Prozess gliedert sich nun in die Blöcke

  • Server-Zertifikate erstellen
  • Client-Zertifikate erstellen und Benutzer anlegen
  • Anmeldeverfahren anpassen

Server-Zertifikate erstellen

Auf dem Server benötigen wir zwei Zertifikate. Das erste ist ein sogenanntes CA-Zertifikat und bildet die Authorisierungs-Instanz. Die Zertifikate werden im Verzeichnis /volume1/system/certs angelegt.

cd /volume1/system
[ -e certs ] && rm -Rf certs
mkdir certs
cd certs
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -sha256 -days 3600 -key ca-key.pem -out ca-cert.pem -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/CN=ksco'
openssl genrsa 2048 > server06.kraemerschwab.com-key.pem 
openssl req -key server06.kraemerschwab.com-key.pem -new -sha256 -out server06.kraemerschwab.com-req.csr -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/OU=ksdb/CN=ksdb'
openssl x509 -req -in server06.kraemerschwab.com-req.csr -days 3600 -sha256 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server06.kraemerschwab.com-cert.pem
cp ca-cert.pem /volume1/transfer/software/ksdb/

Serverzertifikat in MariaDB installieren

Hierzu werden der Konfigurationsdatei /var/packages/MariaDB/etc/mysql/my.cnf die folgenden Zeilen angefügt:

ssl
ssl-ca = /volume1/system/certs/ca-cert.pem
ssl-cert = /volume1/system/certs/server06.kraemerschwab.com-cert.pem
ssl-key = /volume1/system/certs/server06.kraemerschwab.com-key.pem

Nun wird MariaDB neu gestartet mit dem Befehl:

/usr/share/mysql/mysql.server restart

Benutzer-Zertifikate erstellen

Das Benutzerzertifikat wird mit dem Script /volume1/system/create_user_cert.sh erstellt.

  • Nun werden die Benutzer umgestellt. Bisher meldete sich xyz mit einem Password pw_xyz an. Neu darf er sich, sofern er aus dem internen Netz kommt und SSL-zertifiziert ist, ohne Passwort anmelden. Kommt er jedoch von aussen, dann soll er sich mit dem bisherigen Passwort anmelden. Ohne SSL-Zertifikat darf er sich hingegen gar nie mehr anmelden.
  • Dazu müssen zuerst die Benutzer von % auf 192.168.1.% umgestellt werden mit
mysql -uroot -p -e"update mysql.user set host = '192.168.1.%' where host = '%';
mysql -Nsr -uroot -p -Dhaas >/var/tmp/userlist.tmp <<EOF
	SELECT CONCAT(
	'GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON haas.* TO \'', 
	login_user, 
	'\'@\'%\' REQUIRE Subject \'/C=CH/ST=Zuerich/L=Volketswil/O=Haas AG Print Finishing Systems & Solutions/OU=', 
	IFNULL(text_1, login_user), 
	'/CN=', login_user, '\' AND ISSUER \'/C=CH/ST=Zuerich/L=Volketswil/O=Haas AG/CN=haas\';\n',
	'set password for \'', login_user, '\'@\'%\' = \'', password, '\';\n',
	'GRANT USAGE ON haas.* TO \'', 
	login_user, 
	'\'@\'192.168.1.%\' REQUIRE Subject \'/C=CH/ST=Zuerich/L=Volketswil/O=Haas AG Print Finishing Systems & Solutions/OU=', 
	REPLACE(IFNULL(text_1, login_user), 'ü', 'ue'), 
	'/CN=', login_user, '\' AND ISSUER \'/C=CH/ST=Zuerich/L=Volketswil/O=Haas AG/CN=haas\';\n',
	'set password for \'', login_user, '\'@\'192.168.1.%\' = \'\';\n') \
	FROM personal p join mysql.user u on u.user = p.login_user and u.host = '192.168.1.%' WHERE p.inaktiv = 0 AND p.gruppe_jn = 0;
EOF

mysql -uroot -p </var/tmp/userlist.tmp

rm /var/tmp/userlist.tmp