Sicherheit

1. Prinzipien der Sicherheitsarchitektur

Die IsyFact-Referenzarchitektur beinhaltet auch Vorgaben für die Sicherheitsarchitektur einer Systemlandschaft. Eine davon ist die Forderung, dass IsyFact-konforme IT-Systeme gegen unberechtigte Nutzung zu schützen sind. Folgende Prinzipien der Sicherheit liegen der Erstellung einer Systemlandschaft zugrunde:

  • Authentifizierungsinformationen, wie Benutzername und Passwort, werden nicht über IT-Systeme hinweg weitergegeben. Nur der Eigentümer der Authentifizierungsinformationen und der zentrale IAM-Service besitzen Kenntnis über diese Informationen.

  • Eine Zweifaktor-Authentifizierung ist durch das Client-Zertifikat und dem darin enthaltenen Behördenkennzeichen (BHKNZ) als zusätzliches Authentifizierungsmerkmal konzipiert, allerdings setzt dies im IAM-Service voraus, dass dieses Merkmal dort auch ausgewertet werden kann.

  • Bei Aufrufen von Außen (durch Web-Clients oder externen Anwendungen) erfolgt die Authentifizierung und grobgranulare Autorisierung an den Außengrenzen der Systemlandschaft (Portal, Service-Gateway bzw. Authentication-Gateway).

  • Kommt der Aufruf von innerhalb der Systemlandschaft (z.B. bei einem Batch- oder Task-Aufruf), benötigt der (technische) Aufrufer eigene Authentifizierungsinformationen. Die Authentifizierung und grob granulare Autorisierung erfolgen durch das aufrufende IT-System (Batch/Task).

  • Wird zur Ausführung des Aufrufs ein Service einer anderen Geschäftsanwendung / Domäne benötigt, erfolgt dessen Aufruf im Namen und mit der Autorisierung des ursprünglichen Aufrufers.

  • Die feingranulare Autorisierung geschieht an den Systemgrenzen / externen Schnittstellen der aufgerufenen Geschäftsanwendung.

  • Existiert keine Systemlandschaft (d.h. IT-Systeme stehen für sich allein), gilt grundsätzlich, dass die Authentifizierung und grob granulare Autorisierung durch das aufrufende IT-System (Service oder Batch) erfolgen müssen.

Folgende Abbildung zeigt die Umsetzung der Prinzipien in der Systemlandschaft:

sicherheit iam integration awl.dn
Abbildung 1. Integration des IAM-Service in eine Systemlandschaft
Portal

Interne und externe Anwender rufen über das Portal die Geschäftsanwendung auf und werden dabei durch das Portal an den IAM-Service weitergeleitet, um die Authentifizierung durchzuführen. Erst nach erfolgreicher Authentifizierung leitet das Portal den Anwender zusammen mit den Autorisierungsinformationen an die Geschäftsanwendung weiter.

Service-Gateway

Das Service-Gateway hat die Aufgabe, Anfragen von externen Anwendungen entgegenzunehmen und zusammen mit den Autorisierungsinformationen an den passenden Service der Geschäftsanwendung weiterzuleiten. Aktuell übernimmt das Service-Gateway auch die Authentifizierung von externen Anwendungen. Dazu leitet es die von der externen Anwendung erhaltenen Authentifizierungsdaten an den IAM-Service weiter. Nach erfolgreicher Authentifizierung leitet das Service-Gateway die Anfrage zusammen mit den Autorisierungsinformationen an die Geschäftsanwendung weiter. Zukünftig soll das Service-Gateway keine Authentifizierungsanfragen mehr verarbeiten. Stattdessen soll das Authentication-Gateway verwendet werden.

Authentication-Gateway

Das Authentication-Gateway übernimmt die Authentifizierung von externen Anwendungen. Dazu leitet es die von der externen Anwendung erhaltene Authentifizierungsanfrage an den IAM-Service weiter. Nach erfolgreicher Authentifizierung gibt das Authentication-Gateway die Autorisierungsinformationen an die externe Anwendung zurück. Die externe Anwendung sendet die erhaltenen Autorisierungsinformationen gemeinsam mit der fachlichen Anfrage über das Service-Gateway an die Geschäftsanwendung.

Anwendungen innerhalb der Anwendungslandschaft

Wenn Anwendungen andere Geschäfts- und Querschnittsanwendungen innerhalb der Systemlandschaft aufrufen, verwenden sie die Autorisierungsinformationen des ursprünglichen Aufrufers oder authentifizieren sich mit ihren eigenen Zugangsdaten direkt am IAM-Service und nutzen die erhaltenen Autorisierungsinformationen zum Aufruf.

IAM-Service

Der IAM-Service verarbeitet die Authentifizierungsanfragen und beantwortet sie mit zeitlich begrenzten Autorisierungsinformationen. Dazu greift er im Regelfall auf das Benutzerverzeichnis zu.

Darüber hinaus finden Authentifizierung und Autorisierung nach den Vorgaben des Berechtigungskonzepts statt. Da das Berechtigungskonzept individuell für jede Systemlandschaft erstellt wird und sich im Einzelnen stark von Inhalt und Umfang her unterscheidet, ist es kein Bestandteil der IsyFact.

Eine detaillierte Beschreibung der erwähnten Zugriffskomponenten (Portal, Service-Gateway, Authentication-Gateway), des IAM-Service, der implementierten Authentifizierungsverfahren und der Autorisierungsinformationen (Access-Token) findet sich im Konzept Security.

1.1. Authentifizierung

Authentifikation: Verifikation der Identität eines Benutzers als Zugangskontrolle zu einem geschützten System. Dabei ist es erforderlich, eindeutige Eigenschaften (z.B. biometrische Daten) oder geheime Daten (z.B. Passwort) zur Überprüfung zu übergeben.

Nach der erfolgreichen Authentifizierung eines Benutzers gibt der IAM-Service Autorisierungsinformationen zurück. Diese Autorisierungsinformationen dienen dann als Nachweis des Nutzungsrechts des aufgerufenen Dienstes (s. Autorisierung). Die tatsächliche Identität und Authentifizierungsinformationen des Benutzers spielen ab hier keine Rolle mehr und sind deshalb nicht Teil der Autorisierungsinformationen.

In der Regel erfolgt die Authentifizierung von Benutzern über eine zentrale Komponente der Systemlandschaft, in welche das IT-System eingebettet ist, dem IAM-Service. Die Authentifizierung darf auch lokal, d.h. vom IT-System selbst, durchgeführt werden, falls es beispielsweise nicht in eine Systemlandschaft eingebettet ist.

Für die zentrale Authentifizierung wird in der IsyFact ein OAuth 2.0 konformer IAM-Service verwendet.

1.2. Autorisierung

Autorisierung: Zustimmung oder Erlaubnis, spezieller die Einräumung von Rechten gegenüber interessierten Rechtssubjekten, gegebenenfalls als Nutzungsrecht gegenüber Dritten.

Im aufgerufenen IT-System wird die Anfrage – je nach Schutzbedarf und Funktionalität – autorisiert. Zwingend wird das Vorhandensein sowie die Authentizität und Gültigkeit der mit der Anfrage mitgegebenen Autorisierungsinformationen geprüft. In IsyFact ist eine feingranulare Autorisierung vorgesehen: Im Benutzerverzeichnis sind zu einem Benutzer die ihm zugewiesenen Rollen in der Systemlandschaft verknüpft und Bestandteil der Autorisierungsinformationen aus dem IAM-Service. Anhand dieser Rollen aus den Autorisierungsinformationen weist das IT-System einem Aufruf anwendungsspezifische Rechte zu und prüft diese gegen die für die Nutzung des angefragten Service benötigten Rechte. xref: Wie genau Rollen und Rechte spezifiziert werden, beschreibt das Konzept Security im Kapitel Rollen und Rechte.

1.3. Nutzung von Zertifikaten

Ein Sicherheitszertifikat ist ein digitales Dokument, das die Identität einer Entität (Service oder Website) bestätigt und zur Absicherung der Kommunikationspartner auf der Transportschicht eingesetzt werden kann. Für den Einsatz eines Sicherheitszertifikates wird eine Public Key Infrastructure (PKI) benötigt. Hierbei besitzt jede Entität ein Schlüsselpaar mit einem öffentlichen und privaten Schlüssel, um ein Entitätsbezogenes Zertifikat zu erstellen, das mittels des privaten Schlüssels signiert wird. Der Identitätsbeweis einer Entität erfolgt dann durch die Signatur-Validierung mit dem öffentlichen Schlüssel, der entweder zuvor schon zwischen den beteiligten Kommunikationspartner ausgetauscht wurde oder erst direkt vor der Validierung beim Besitzer des Zertifikats abgeholt wird. Für die konkrete Umsetzung der Absicherung der Kommunikationsstrecke sind die Vorgaben der jeweiligen Security, die gegebene Infrastruktur und die Tatsache, dass sich diese verändern, zu beachten (Vgl. Versionierung). Welche Maßnahmen für eine sichere Kommunikation realisiert werden, ist mit dem jeweiligen Partner, der einen Service bereitstellt, abzustimmen.

Für alle implementierten Authentifizierungs- und Verschlüsselungsverfahren werden jedoch die folgenden Festlegungen getroffen:

  • Alle verwendeten Zertifikate müssen dem X509v3-Standard entsprechen (siehe: X509).

  • Privater Schlüssel und Zertifikate werden in einem PKCS#12-Format abgelegt (siehe: PKCS12).

  • Verwendet werden nur die im Standardumfang des JDKs enthaltenen kryptografischen Verfahren (siehe: Java Secure Socket Extensions).

Der Service-Consumer soll die Verbindung zu einem externen Service verschlüsselt per HTTPS aufbauen. Der Aufbau einer transportverschlüsselten Verbindung via HTTPS basiert immer auf einer zertifikatsbasierten Authentifizierung der beteiligten Entitäten.

  • Einseitige Authentifizierung: Der externe Service weist sich mit seinem Server-Zertifikat gegenüber dem Service-Consumer aus. Dies ist für verschlüsselte Verbindungen obligatorisch.

  • Beidseitige Authentifizierung (mTLS): Zusätzlich weist sich auch der Service-Consumer gegenüber dem externen Service mit einem Client-Zertifikat aus. Dies sollte immer dann eingesetzt werden, wenn besonders schützenswerte Daten verarbeitet oder sicherheitskritische Domänen berührt werden.

1.3.1. Zertifikatsbasierte Client-Authentifizierung

Bei Verwendung der Client-Authentifizierung per Zertifikat benötigt der Service-Consumer:

  • ein Zertifikat, das von einer vertrauenswürdigen CA signiert ist,

  • den zugehörigen privaten Schlüssel, welcher lokal im Keystore bleibt. Die nutzende Anwendung übergibt dem Service-Provider das Zertifikat beim Aufruf der externen Serviceprovider-Methode, der die Signatur des Zertifikats mittels des öffentlichen Schlüssels des Service-Consumers validiert. Der private Schlüssel wird ausschließlich zur kryptografischen Signatur des TSL-Handshakes genutzt.

Alle notwendigen Informationen zur Erstellung von Zertifikaten -ausgehend von einem Sicherheitsschlüsselpaar- können z.B. hier eingesehen werden.

In der nutzenden Anwendung werden das Zertifikat und der private Schlüssel in einer PKCS#12-Datei im Config-Verzeichnis der Anwendung abgelegt. Die Erstellung bzw. Aktualisierung des Zertifikats wird vom Betrieb durch Bearbeitung der Datei vorgenommen. Wird das Passwort für den privaten Schlüssel in einer Property, zusammen mit den übrigen betrieblichen Konfigurationen der Anwendung, vorgehalten, ist zu beachten: Die Gefahr besteht, dass der private Schlüssel über Logs, Artefakte, Konfigurations-Viewer oder Versions-Verwaltungslösungen zugänglich wird. Aus diesem Grund sollte das Passwort für den privaten Schlüssel über einen Secret-Mechanismus (Secret-Datei, Secret-Manager, …​) verfügbar gemacht werden. Die Bereitstellung des privaten Schlüssels ist vom Betrieb im Rahmen des betrieblichen Konfigurationsprozesses festzulegen.

1.4. Ablage von Zertifikaten

Bei einer verschlüsselten Verbindung weist sich der externe Service mit einem Server-Zertifikat aus. Zur Überprüfung ist ein TrustStore erforderlich, der vertrauenswürdige Zertifikate enthält. Diese dienen der Validierung eingehender Zertifikate und stellen die Integrität der Gegenstelle sicher.

Für höhere Sicherheit wird mTLS empfohlen. Dabei authentifiziert sich zusätzlich der Service-Consumer mit seinem Client-Zertifikat, das in einem KeyStore samt privatem Schlüssel (und ggf. Zertifikatskette) abgelegt ist (siehe Zertifikatsbasierte Client-Authentifizierung). Damit wird die eigene Identität nachgewiesen.

Ein PKCS#12-Keystore speichert die privaten Schlüssel und die zugehörigen Zertifikate der eigenen Komponente. Der TrustStore dagegen enthält ausschließlich die Zertifikate, die für die Authentifizierung der Kommunikationspartner dienen.

1.4.1. Installation des Zertifikats auf der Maschine

Zertifikate können direkt als Dateien auf dem Dateisystem einer Maschine gespeichert werden, z. B. im Format .pem, .crt oder .key. Für den produktiven Einsatz wird jedoch die Ablage in Keystores/TrustStores empfohlen, die von der Anwendung beim Start oder zur Laufzeit geladen werden.

1.4.2. Besonderheiten bei der Kommunikation über SOAP

Für Kommunikation mit externen Services auf Basis von SOAP im Zusammenspiel mit Client-Zertifikaten ist zu beachten: Sofern nicht für alle Verbindungen derselbe Schlüssel verwendet wird, muss eine SocketFactory-Instanz pro Verbindung zur Verfügung gestellt werden. Damit ist ein globales Setzen von Key- und Truststores in der JVM nicht mehr ausreichend. Die SocketFactory-Instanzen können erst nach Initialisierung des ServiceStubs gesetzt werden, so kann die WSDL-Datei nicht über die gesicherte Verbindung abgerufen werden. Empfohlen wird die WSDL-Datei lokal vorzuhalten und aus dem Dateisystem zu laden, sodass sie nicht zur Laufzeit über das Netz geladen werden muss. Dies birgt allerdings die Möglichkeit einer Versions-Diskrepanz zwischen lokal vorgehaltener WSDL und aktueller Service-Provider WSDL.