Einrichtung einer sicheren SSL-Verbindung für Informix Server und Clients
In öffentlichen, aber auch in privaten Netzwerken, besteht primär die Gefahr, dass eine Verbindung zwischen einem Datenbankserver und einem Client abgehört werden kann.
Der beste Weg um das Abhören zu verhindern, ist der Aufbau einer verschlüsselten Verbindung. Informix bietet eine einfache Möglichkeit SSL-Verbindungen einzurichten. Server und der Client verfügen dabei über einen privaten Schlüssel, der vor dem Verbindungsaufbau ausgetauscht und sowohl auf dem Server wie auf dem Client in einem verschlüsselten Keystore gespeichert wird.
Dieser Artikel beschreibt wie Sie mit wenigen Kommandos eine sichere SSL-Verbindung für Informix Server und Clients einrichten.
Ausgangspunkt für diesen Beitrag ist die Entwicklung des CURSOR Admin-Scout. Die Informix Administration mit dem Admin-Scout erfolgt klassisch über eine Server-Client Verbindung. Für uns war es ein wichtiges Anliegen diese Verbindung nach anerkannten Verfahren abzusichern. Der zweite Teil des Beitrags beschreibt daher die Einrichtung einer SSL-Verbindung zwischen Datenbankserver und dem Admin-Scout.
Einrichtung auf dem Server:
Voraussetzungen:
Je nach Betriebssystemversion braucht man das IBM GSKit (Gloabl Security Toolkit). Das Kommando gsk8capicmd in der Beschreibung muss je nach Plattform gsk8capicmd_32 oder gsk8capicmd_64 heißen. Die 8 im Kommando ist die Hauptversion des GSKit und kann sich in Zukunft auch ändern. Alle unsere Beispiele verwenden die 64Bit Variante. 32Bit Plattformen müssen hier die _64 durch _32 ersetzen.
Basierend auf der Anleitung der IBM (hier) sind auf dem Server folgende Schritte notwendig:
1. Erstellen eines Keystores auf dem Server und eines Zertifikates
Dazu erstellt man im $INFORMIXDIR als User informix zuerst ein Verzeichnis ssl.
In diesem Verzeichnis muss nun ein Keystore erstellt werden, der den Namen der Serverinstanz hat.
Dazu muss man den DBSERVERNAME aus der onconfig nutzen, nicht einen Aliasnamen des Servers. Da das Passwort nur hier benötigt und verschlüsselt abgespeichert wird, sollte man es sicher aufbewahren.
Bei der Option -dn beim Zertifikat erstellen, füllen sie die Felder CN=, OU=, O= und C= mit den Namen und Daten ihrer Firma. Das Label können sie frei wählen. In der onconfig muss später aber unter SSL_KEYSTORE_LABEL genau dieses Label angegeben werden. Auch auf dem Client muss das Zertifikat unter diesem Label im KeyStore abgelegt werden, weil der Server genau diesen Label-Namen beim Client anfragt.
cd $INFORMIXDIR/ssl
# Anlegen des KeyStore
gsk8capicmd_64 -keydb -create -db <DBSERVERNAME>.kdb -pw <Passwort> -type cms -stash
# Erzeugen des Zertifikates
gsk8capicmd_64 -cert -create -db <DBSERVERNAME>.kdb -pw <Passwort> -label <Labelname> -size 1024 -default_cert yes -dn
"CN=<DBSERVERNAME>,OU=<ORGANISATION UNIT>,O=<ORGANISATION>,C=<Ländercode 2 stellig>"
Der KeyStore ist damit vollständig erstellt. Allerdings benötigen wir das generierte Zertifikat auf allen Clients. Deshalb muss es jetzt noch aus dem KeyStore exportiert werden:
gsk8capicmd_64 -cert -extract -db <DBSERVERNAME>.kdb -format ascii -label <Labelname> -pw <Passwort> -target <Labelname>.cert
Durch dieses Kommando wird die Datei <Labelname.cert> erstellt. Wir müssen diese Datei auf alle Clients kopieren und dort in den Keystore einfügen.
2. Bearbeiten der onconfig-Datei der Instanz
In der onconfig-Datei der Instanz müssen folgende Einträge vorgenommen werden:
SSL_KEYSTORE_LABEL <Labelname>
NETTYPE socssl, <Anzahl Listener>,<Anzahl Connects pro Listener>,NET
VPCLASS encrypt,num=1,noage
DBSERVERALIASES <neuer Alias>
Je nach Größe der Instanz müssen sie die <Anzahl Listener>, <Anzahl Connects> bzw. die num= beim VPCLASS Parameter wählen. Dazu gelten die gleichen Regeln wie bei einer unverschlüsselten soctcp Verbindung.
Für die SSL-Verbindung muss der Variable DBSERVERALIASES ein neuer Listener-Name hinzugefügt werden. Dieser Listener muss nun noch in der sqlhosts-Date definiert werden.
3. Bearbeiten der sqlhosts-Datei
Für den eben in der onconfig eingetragenen Listener Name (DBSERVERALIASES) müssen nun noch die Verbindungsparameter definiert werden. Dazu muss eine neue Zeile in der sqlhosts-Datei eingetragen werden:
<neuer Alias> onsocssl <Hostname> <Port/Servicename>
Dies geht analog zu einer normalen onsoctcp Verbindung. Die SSL-Verbindung benötigt einen eigenen Port bzw. Servicenamen. Dem Hostnamen kann wie bei der soctcp ein * voran gestellt werden, um das Starten auf allen Netzwerkinterfaces zu erreichen.
Einrichtung auf dem Client
Der Pfad zum KeyStore auf dem Client ist nicht wie auf dem Server festgelegt. Der Ort kann in der Datei $INFORMIXDIR/etc/conssl.cfg definiert werden. Ist diese Datei nicht vorhanden, so wird der KeyStore in $INFORMIXDIR/etc erwartet.
1. Conssl.cfg erstellen
In der conssl.cfg müssen zwei Variablen gesetzt sein:
SSL_KEYSTORE_FILE /opt/informix/sslClient/client.kdb
SSL_KEYSTORE_STH /opt/informix/sslClient/client.sth
Im Beispiel gehen wir davon aus, das $INFORMIXDIR /opt/informix ist. Das Verzeichnis sslClient wird dort angelegt.
Der erste Eintag ist der Pfad zum Keystore und der zweite Eintrag ist der Pfad zum Password-File, das durch die Option -stash angelegt wird.
2. KeyStore erzeugen und Zertifikat importieren
Im Verzeichnis sslClient erzeugen wir den KeyStore mit:
gsk8capicmd_64 -keydb -create -db client.kdb -pw <Passwort> -type cms -stash
Jetzt benötigen wir die Datei <Labelname>.cert, die wir auf dem Server aus dem KeyStore exportiert haben.
gsk8capicmd_64 -cert -add -db client.kdb -pw <Passwort> -label <Labelname> -file <Labelname>.cert -format ascii
Sowohl auf dem Client wie auch auf dem Server, können sie sich den Inhalt des KeyStores mit folgenden Kommando anzeigen lassen:
gsk8capicmd_64 -cert -list -db <KeyStoreName>.kdb -stashed
Die Ausgabe sollte dann so sein:
Zertifikate gefunden
* Standard, - persönlich, ! zuverlässig, # secret key
! ol_scout
Wobei in diesem Fall ol_scout mein 'Labelname' ist.
Einrichtung auf dem Admin-Scout
Auch auf dem Admin-Scout benötigen wir die Datei <Labelname>.cert vom Server. Auf der Admin-Scout Startseite können wir ab der Version Scout-Version 2.3 den Menüpunkt 'Installation CSDK / SSL' benutzen. Hier kann, wenn nötig ein aktuelles Client-SDK installiert werden. Das ist allerdings nur notwendig, wenn die auf dem Scout installierte GSKit-Version für ihren Server zu alt ist.
Ist das nicht der Fall, müssen sie einmalig in dem Kasten 'Informix SSL Installation' in den beiden Passwort Feldern das gleiche Passwort angeben und den Button 'Create Keystore' drücken. Ist der Button ausgegraut, so existiert schon ein Keystore.
Klicken sie jetzt auf 'Select Certificate File' und wählen sie in dem Dateibrowser, der sich öffnet, ihre <Labelname>.cert Datei vom Server aus. Klicken sie dann auf 'Upload'. Nach dem erfolgreichen Upload der Datei geben sie den Namen des Labels im Feld 'Certificate Label' ein und klicken sie auf 'Install Certificate'. Das Zertifikat wird jetzt importiert und erscheint auf der rechten Seite unter 'Installed SSL Certificates'.
Hier kann ein Zertifikat durch einen Klick auf das rote Kreuz neben dem Labelnamen auch wieder entfernt werden.
Damit ist die Zertifikat-Installation abgeschlossen. Sie können jetzt unter Admin / Add Connection eine Verbindung zu der Instanz mit dem onsocssl Protokol einrichten.
(Andreas Seifert, Mai 2019)