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.

Leider verlangt MariaDB, dass das Server-SSL-Zertifikat noch mit der alten Stufe SHA1 verschlüsselt ist. Dieses kann aber nicht mehr für die Web-Authentifizierung verwendet werden, da die Browser eine neuere Technologie verlangen. Deshalb müssen zwei Server-Zertifikate erstellt werden. Als Client-Zertifikat muss nur eines mit SHA256-Verschlüsselung erstellt werden.

cd /volume1/system
[ -e certs ] && rm -Rf certs
mkdir certs
cd certs
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -sha1 -days 3600 -key ca-key.pem -out ca-cert.pem -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/CN=ksco'
openssl req -new -x509 -nodes -sha256 -days 3600 -key ca-key.pem -out ca-cert2.pem -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/CN=ksco'
openssl genrsa 2048 > server06-key.pem 
openssl req -key server06-key.pem -new -sha1 -out server06-req.csr -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/OU=ksdb/CN=server06'
openssl x509 -req -in server06-req.csr -days 3600 -sha1 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server06-cert.pem
openssl req -key server06-key.pem -new -sha256 -out server06-req2.csr -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/OU=ksdb/CN=server06' -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:server06,DNS:server06.kraemerschwab.local,DNS:server06.plan-bee.ch")) -extensions SAN

openssl x509 -req -in server06-req2.csr -days 3600 -sha256 -CA ca-cert2.pem -CAkey ca-key.pem -set_serial 01 -out server06-cert2.pem  -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:server06,DNS:server06.kraemerschwab.local,DNS:server06.plan-bee.ch")) -extensions SAN


openssl genrsa 2048 > server08-key.pem 
openssl req -key server08-key.pem -new -sha1 -out server08-req.csr -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/OU=ksdb/CN=server08'
openssl x509 -req -in server08-req.csr -days 3600 -sha1 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server08-cert.pem
openssl req -key server08-key.pem -new -sha256 -out server08-req2.csr -subj '/C=CH/ST=Zug/L=Zug/O=KSCO Investment Management/OU=ksdb/CN=server08' -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:server08,DNS:server08.kraemerschwab.backup,DNS:server08.plan-bee.ch")) -extensions SAN
openssl x509 -req -in server08-req2.csr -days 3600 -sha256 -CA ca-cert2.pem -CAkey ca-key.pem -set_serial 01 -out server08-cert2.pem -extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:server08,DNS:server08.kraemerschwab.backup,DNS:server08.plan-bee.ch")) -extensions SAN

openssl pkcs12 -export -in ca-cert2.pem -inkey ca-key.pem -out ca.p12 -passout pass:
cp ca-cert2.pem /volume1/transfer/software/ksdb/
cp ca.p12 /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-cert.pem
ssl-key = /volume1/system/certs/server06-key.pem

Nun wird MariaDB neu gestartet mit dem Befehl:

/usr/share/mysql/mysql.server restart

Server-Zertifikat im Web-Server installieren

Auf der Diskstation kann unter Systemsteuerung - Sicherheit das Zertifikat importiert werden:

  • Zertifikat: /volume1/system/certs/server06-cert2.pem
  • Schlüssel: /volume1/system/certs/server06-key.pem
  • CA: /volume1/system/certs/ca-cert2.pem

Client-Zertifikat in der Webseite verlangen

Damit im KSWeb die PHP-Scripts eine Anmeldung an die Datenbank durchführen können, wird folgendes benötigt:

  • im File /volume1/web/ksweb/.htaccess
SSLVerifyClient optional_no_ca
SSLVerifyDepth 5
SSLOptions +StdEnvVars
  • in der MariaDB muss ein Benutzer angelegt sein mit '<benutzer>'@'localhost' mit speziellem Passwort.
  • beim Benutzer muss das CA-Zertifikat und Client-Zertifikat importiert sein

Benutzer-Zertifikate erstellen

Das Benutzerzertifikat wird mit dem Script /volume1/system/create_user_cert.sh erstellt. Das Script erstellt im HOME-Verzeichnis ein Unterverzeichnis ksdb und legt die folgenden Dateien an:

  • key.pem - die Schlüssel-Datei
  • cert.pem - das Zertifikat in PEM-Form für die Datenbank-Anmeldung
  • <user>-cert.p12 - das Zertifikat zum Import in den Browser fürs KSWEB

Benutzerzertifikate installieren

Für den Zugang zur Datenbank regelt das Start-Script ksdb.vbs bereits die Installation - es muss nichts mehr gemacht werden. Für den Zugriff auf die KSWEB-Seiten sind auf dem Arbeitsplatzrechner folgende Schritte auszuführen:

  • Doppelklick auf die Datei \\server06\transfer\software\ksdb\ca.p12
  • Als Speicherort (Store Location) ist Local Machine zu wählen
  • Passwort ist leer
  • Das Zertifikat ist explizit in den Store Trusted Root Certification Authorities aufzunehmen
  • Doppelklick auf die Datei \\server06\home\ksdb\<user>-cert.p12
  • Als Speicherort (Store Location) ist Current user zu wählen
  • Passwort ist leer
  • Das Zertifikat kann automatisch gespeichert werden

Beim Aufruf einer Seite im KSWEB verlangt der Browser ein Zertifikat. Der Browser wird allerdings bereits das soeben installierte Zertifikat vorschlagen.