Themenübersicht
Bei einer Migration auf Security Server 25 sind derzeit insbesondere folgende Themen zu beachten:
- Java 25, Container-Image und Helm
- Datenbank-Upgrade (Schema 29 auf 33)
- Authentifizierung, CORS und Keycloak-Integration
- Datenbankkonfiguration und Connection-Pool
- REST-API und neue HSM-Endpunkte
- Entfernte Komponenten
Weitere Themen werden mit zukünftigen Produktversionen und neuen Erkenntnissen ergänzt.
Überblick über die Änderungen
Die folgenden Änderungen können bestehende Installationen beeinträchtigen, wenn sie nicht berücksichtigt werden:
| Nr. | Änderung | Betroffen | Erforderliche Maßnahme | Abschnitt |
|---|---|---|---|---|
| 1 | Datenbankschema 29 auf 33, nicht umkehrbar; alte und neue Instanzen dürfen nicht dieselbe Datenbank nutzen | Alle | Datensicherung erstellen; alle alten Instanzen vor dem Start der neuen stoppen | Datenbank-Upgrade |
| 2 | Standardwert für CORS ist jetzt eine Liste von Arvato-Domänen | Browserbasierte Oberflächen anderer Herkunft | aep.security.cors.pattern setzen |
Authentifizierung |
| 3 | Health-Probes unter /actuator/health/liveness und /readiness; nur health und prometheus sind erreichbar |
Helm, Kubernetes, Monitoring | Probes und Monitore anpassen | Java 25, Container und Helm |
| 4 | Eigene JAVA_OPTS müssen --add-opens=java.base/sun.security.util=ALL-UNNAMED enthalten |
Alle, die JAVA_OPTS überschreiben |
Option ergänzen | Java 25, Container und Helm |
| 5 | Eigene hibernate.cfg.xml: Hibernate 5 auf 6, Standard-Pool ist jetzt HikariCP |
Alle, die eine eigene Datei einbinden | Neue Vorlage als Ausgangspunkt verwenden | Datenbankkonfiguration |
| 6 | Keycloak-Integration ersetzt; Bouncr-/APIM-Werte sind Platzhalter | Nutzer von oauth2-token-roles und oauth2-token-roles-allowed |
Anmeldung erneut testen; echte Bouncr-/APIM-Werte setzen | Authentifizierung |
| 7 | Image-Name, Maven-Koordinaten und Name des Standalone-ZIPs geändert | CI/CD, Helm-Values, Nutzer der Client-Bibliothek | Referenzen anpassen | Java 25, Container und Helm |
| 8 | TCN-Sockets und ServiceRuntime-Launcher entfernt | Zugriff auf die TR-03109-CA über TCN; ServiceRuntime-Installationen | Konnektivität prüfen oder auf das Spring-Boot-Deployable wechseln | Entfernte Komponenten |
| 9 | Entrypoint prüft DB_*-Variablen und bricht bei Fehlern ab |
Alle Container-Installationen | DB_DRIVER und DB_DIALECT setzen; DB_URL und DB_USERNAME verwenden |
Datenbankkonfiguration |
Java 25, Container-Image und Helm
Hintergrund
Security Server 25 basiert auf Java 25 und Spring Boot 4.0.7 (Jakarta EE). Die bisherige Version lief auf Java 11 mit Spring Boot 2.6.6. BouncyCastle wurde von Version 1.83 auf 1.84 aktualisiert.
Auswirkungen
| Bereich | Bisher | Security Server 25 |
|---|---|---|
| Java | 11 (openjdk:11.0.16) |
25 (eclipse-temurin:25) |
| Spring Boot | 2.6.6 | 4.0.7 |
| Container-Image | <registry>/b2b/fss |
<registry>/aep/b2b/aep-securityserver |
| Container-Benutzer | fss (uid 5000) |
aep-securityserver (uid 5000) |
| Helm-Chart | fss-helm, Common Library Chart 1.0.15 |
aep-securityserver-helm, Common Library Chart 1.0.22 |
| JDBC-Treiber PostgreSQL | 42.2.9 | 42.7.11 |
Die UID des Container-Benutzers bleibt unverändert, daher sind Berechtigungen auf eingebundenen Volumes nicht betroffen. Die mitgelieferten JDBC-Treiber für MSSQL (11.2.0) und Oracle (ojdbc8) bleiben gleich.
Die Standard-JAVA_OPTS enthalten zusätzlich -Xmx512m -Xms256m --add-opens=java.base/sun.security.util=ALL-UNNAMED.
Erforderliche Anpassungen
Container und Helm
- Passen Sie die Image-Referenz an (
.../aep/b2b/aep-securityserver). - Passen Sie die Health-Probes im Helm-Chart an:
| Probe | Bisher | Neu |
|---|---|---|
| liveness | /fss/api/actuator/health |
/fss/api/actuator/health/liveness |
| readiness | /fss/api/actuator/health |
/fss/api/actuator/health/readiness |
| startup | /fss/api/actuator/health, failureThreshold: 30, initialDelaySeconds: 30 |
/fss/api/actuator/health/readiness, failureThreshold: 72, initialDelaySeconds: 10 |
| Timeout der Probes | 1 s | 3 s |
- Es sind nur noch die Actuator-Endpunkte
healthundprometheuserreichbar. Prometheus bleibt unter/fss/api/prometheus. - Wenn Sie
JAVA_OPTSüberschreiben, behalten Sie die Option--add-opens=java.base/sun.security.util=ALL-UNNAMEDbei. Erhöhen Sie-Xmxbei großen Keystores. - Wenn Sie einen eigenen Entrypoint verwenden, hat sich die Launcher-Klasse zu
org.springframework.boot.loader.launch.JarLaunchergeändert (bisherorg.springframework.boot.loader.JarLauncher). - Der Cluster-Modus bleibt unverändert (
-Dcluster.node=...oderCLUSTER_USE_CLUSTERNODE_HOSTNAME=true,-Dcluster.service.period=...).
Installation ohne Docker (ZIP)
- Das Artefakt heißt jetzt
aep-securityserver-rest-<version>.zip(bishersecurityserver-rest-<version>.zip). - Installieren Sie eine Java-25-Laufzeitumgebung. Das Startskript
start.shverwendet die neue Launcher-Klasse. - Die Service-Dateien liegen jetzt unter
etc/init.d(SysV, bisheretc_init.d) und neu unteretc/systemd/securityserver(systemd).
Maven-Koordinaten
Für Nutzer der Java-Client-Bibliothek: Die groupId ist jetzt de.arvato-systems.aep, die artifactIds beginnen mit aep-securityserver- (z. B. aep-securityserver-client). Bisher war die groupId fastlane-securityserver mit artifactIds wie com.nextlevel.fastlane.security.server.client. Die Java-Pakete bleiben unverändert.
Überprüfung
GET /fss/api/actuator/health/readinessliefertUP.- Die Pods starten ohne Neustarts. Beim ersten Start läuft das Datenbank-Upgrade, das Startup-Probe berücksichtigt dies mit bis zu 72 Fehlversuchen.
- Der Prometheus-Endpunkt und Ihre Dashboards funktionieren mit den geänderten Pfaden.
Datenbank-Upgrade
Hintergrund
Security Server 25 hebt das Datenbankschema von Version 29 auf Version 33 an. Die Upgrade-Skripte (secserverUpdateToVersionNN.sql) werden vom mitgelieferten Upgrade-Manager ausgeführt. Unterstützt werden PostgreSQL, Oracle und MSSQL.
Auswirkungen
| Version | Änderung |
|---|---|
| 30 | Stellt die Spalte certstore.hsmencryptedprivatekey sicher (wird nur angelegt, falls sie fehlt) und legt die Tabelle hsmencryptedkeyblob an (client, hsmalias, blob, created_at; Fremdschlüssel auf client, Löschweitergabe) |
| 31 | hibernate_sequences: Die Spalte sequence_next_hi_value wird nach next_val kopiert und anschließend gelöscht (ID-Generator von Hibernate 6). Es gibt eigene Varianten für Oracle und PostgreSQL |
| 32 | certstore.email wird zu address umbenannt. Existiert address bereits, wird dieser Schritt übersprungen. Das Befüllen von Adresse und Beschreibung für AS4-/API-Zertifikate wird erneut ausgeführt |
| 33 | Neuer Index thumbprint_idx auf certstore (thumbprint, clientid) |
Die Versionsnummern unterscheiden sich von der bisherigen Linie: Dort war Version 29 die Umbenennung von email in address. In Security Server 25 liegt diese Umbenennung bei Version 32, die Versionen 29 bis 31 enthalten HSM- und Sequenz-Änderungen. Die neuen Skripte sind für diesen Fall wiederholbar ausgelegt.
Folgen:
- Kein Downgrade. Die bisherige Version benötigt
sequence_next_hi_value, die nach Version 31 nicht mehr existiert. Ein Rollback ist nur durch Wiederherstellen der Datensicherung möglich. - Keine gemischten Versionen. Betreiben Sie alte und neue FSS-Instanzen nie gleichzeitig gegen dieselbe Datenbank. Im Cluster-Betrieb stoppen Sie zuerst alle alten Knoten und starten dann die neuen. Ein Rolling Update über beide Generationen hinweg wird nicht unterstützt.
- Das Upgrade läuft beim ersten Start der neuen Version. Der Datenbankbenutzer benötigt dafür DDL-Rechte (ALTER, CREATE TABLE, CREATE INDEX).
Erforderliche Anpassungen
- Erstellen Sie eine Datensicherung der FSS-Datenbank.
- Spielen Sie die Sicherung in eine Testumgebung ein und starten Sie Security Server 25 dagegen. Testen Sie das Upgrade zuerst an einer Kopie Ihrer Produktivdatenbank.
- Stoppen Sie für die Produktion alle alten Instanzen, bevor Sie die neue Version starten.
Überprüfung
- Die Logs enthalten keine Fehler der Upgrade-Befehle. Diese protokollieren bei manchen Fehlern nur und fahren fort, lesen Sie die Logs daher aufmerksam.
- Im Cluster-Betrieb: Fügen Sie auf einem Knoten ein Testzertifikat hinzu und prüfen Sie, dass die übrigen Knoten es innerhalb des Poll-Intervalls übernehmen.
Authentifizierung, CORS und Keycloak-Integration
Hintergrund
Die Werte für aep.security.auth-method bleiben unverändert: no-secure, basic, oauth2-token-roles (Keycloak) und oauth2-token-roles-allowed (Azure B2C). Auch die Rollennamen (FSS-CertificateManager-Read/Write, FSS-ClientManager-*, FSS-RuleManager-*, FSS-Crl, FSS-Message) bleiben gleich. Die Integration von Keycloak wurde jedoch ersetzt (neue Klasse KeycloakSecurityConfiguration).
Auswirkungen
- Profile
secureundnosecure: Das Image liefert Standardwerte mit (aep.security.auth-method: no-secure). Die Profile setzen bereitskeycloak.enabledund schließen die CRISP-Security-Autokonfiguration aus. Sie müssen für diese beiden Profile wederauth-methodnochspring.autoconfigure.excludesetzen.aep.security.auth-methodist nur fürbasic,oauth2-token-rolesoderoauth2-token-roles-allowederforderlich. - CORS: Der Standardwert für
aep.security.cors.patternist jetzt eine Liste von Arvato-Domänen (bisherhttp://*,https://*). Browserbasierte Clients anderer Herkunft werden abgelehnt. - Bouncr/APIM:
aep.security.apim.internalApiKey,aep.security.bouncr.instanceIdundaep.security.bouncr.hosthaben als Standardwert"fill in the correct value". - Keycloak: Die bisherige Keycloak-Adapter-Integration wurde ersetzt.
keycloak.jsonwird weiterhin gelesen. - Es gibt ein neues optionales Spring-Profil
crispfür CRISP-Umgebungen. Alle anderen Kunden können es ignorieren. SecurityGatewayPropertiesist unverändert (gleiche Properties und Namen). Ihre vorhandenen-D-Properties und HSM-Pool-Einstellungen (HSM_*) können Sie weiterverwenden.
Erforderliche Anpassungen
- Setzen Sie
aep.security.cors.patternauf die Herkunft(en) Ihrer Oberfläche. - Wenn Sie
oauth2-token-roles-allowednutzen, tragen Sie echte Werte füraep.security.apim.internalApiKey,aep.security.bouncr.instanceIdundaep.security.bouncr.hostein. - Wenn Sie
oauth2-token-roles(Keycloak) nutzen, prüfen Sie die Anmeldung und die Rollenzuordnung mit Ihrem Realm. - Prüfen Sie eigene
application*.yml-Dateien gegen die Property-Änderungen von Spring Boot 3 und 4. Umbenannte oder entferntespring.*- undmanagement.*-Schlüssel werden stillschweigend ignoriert und nicht abgelehnt.
Überprüfung
- Anmeldung mit jedem von Ihnen genutzten Clienttyp.
- Aufrufe aus Ihrer Browser-Oberfläche werden nicht durch CORS blockiert.
aep.security.auth-method und keycloak.enabled für Ihren Betriebsmodus.Datenbankkonfiguration und Connection-Pool
Hintergrund
Die Datenbankverbindung wird über hibernate.cfg.xml und Umgebungsvariablen konfiguriert. Mit Spring Boot 4 wird Hibernate 6 eingesetzt, der Standard-Connection-Pool ist jetzt HikariCP (c3p0 ist veraltet).
Auswirkungen
Erforderliche Variablen: DB_DRIVER, DB_URL, DB_USERNAME, DB_PASSWORD, DB_DIALECT.
| Bisheriger Name | Neuer Name | Hinweis |
|---|---|---|
DB_JDBC_URL |
DB_URL |
Der alte Name funktioniert weiterhin, es wird eine Warnung protokolliert |
DB_USER |
DB_USERNAME |
Wie oben |
DB_POOL_IMPL=c3p0 |
DB_POOL_IMPL=hikari (Standard) |
c3p0 ist veraltet |
- Der Entrypoint bricht jetzt ab, wenn
DB_DRIVERoderDB_DIALECTleer sind oder eine numerische oder boolesche Pool-Einstellung ungültig ist. Bisher gab es keine Prüfung. - Neue optionale Pool-Einstellungen:
DB_POOL_MIN_SIZE(5),DB_POOL_MAX_SIZE(20),DB_POOL_HIKARI_*,DB_POOL_UCP_*,DB_VALIDATION_QUERY. - Platzhalter in
hibernate.cfg.xmlwerden nur ersetzt, solange die Datei nochDB_URL_TO_REPLACEenthält.
Erforderliche Anpassungen
- Verwenden Sie die neuen Variablennamen
DB_URLundDB_USERNAME. - Setzen Sie
DB_DRIVERundDB_DIALECT. - Wenn Sie eine eigene
hibernate.cfg.xmleinbinden, gehen Sie von der neuen Vorlage aus und prüfen Sie Pool- und Dialekt-Eigenschaften. - Die Eigenschaft
hbm2ddl.automuss nicht gesetzt werden. Das Schema wird durch die Upgrade-Skripte verwaltet.
Überprüfung
- Der Container startet ohne Fehlermeldung des Entrypoints (
Required environment variable ... is missing or empty). - Die Datenbankverbindung wird aufgebaut und das Datenbank-Upgrade läuft durch.
REST-API und neue HSM-Endpunkte
Hintergrund
Alle bestehenden Endpunkte behalten Pfade, Parameter und Rollen. Port (2222), Basispfad (/fss/api/v1/) und Swagger (/fss/api/swagger-ui.html) bleiben gleich.
Auswirkungen
| Änderung | Details |
|---|---|
Neu GET /hsm-aliases/{alias}/{purpose}?client= |
Listet HSM-Aliase (sliceFrom, sliceTo, hsmAlias) zu einem Zertifikats-CN und Zweck. Rolle HSM_MANAGER_READ |
Neu POST /externalized-key/convert-to-external-key?client=&alias= |
Sichert einen HSM-Schlüssel und speichert den verschlüsselten Blob in der Datenbank. Rolle HSM_MANAGER_WRITE |
Neu GET /externalized-key/backup-key/{hsmAlias}?client= |
Lädt den verschlüsselten externalisierten Schlüssel herunter (externalizedkey.bin). Rolle HSM_MANAGER_READ |
Geändertes Fehlerverhalten POST .../upload |
Der Endpunkt ist jetzt mit consumes = multipart/form-data deklariert. Eine Anfrage mit einem anderen Content-Type wird mit HTTP 415 abgelehnt, statt später im Handler zu scheitern. Clients, die das Zertifikat bereits als Multipart-Datei senden, sind nicht betroffen. Das Multipart-Limit beträgt 100 MB |
Spring 6 und neuer gleicht einen abschließenden Schrägstrich standardmäßig nicht mehr ab (/pfad/ gegenüber /pfad). Verwenden Sie die dokumentierten Pfade ohne abschließenden Schrägstrich.
Erforderliche Anpassungen
Für bestehende Clients sind keine Anpassungen erforderlich, sofern sie die dokumentierten Pfade verwenden und Uploads als multipart/form-data senden.
Überprüfung
- Testen Sie je Protokoll (AS2, AS4, S/MIME, MBSE) das Verschlüsseln, Entschlüsseln, Signieren und Prüfen einer Beispielnachricht.
- Testen Sie eine Zertifikatsliste, eine CRL-Prüfung und gegebenenfalls eine HSM-Schlüsseloperation.
Entfernte Komponenten
Hintergrund
Mit Security Server 25 wurden Komponenten entfernt oder ersetzt, die nicht mehr zum Funktionsumfang gehören.
Auswirkungen
- ServiceRuntime-Launcher (
connector.serviceruntime): Es gibt nur noch das Spring-Boot-REST-Deployable. - Java-11-Build: Der Snapshot-Build für Java 11 entfällt. Java 25 ist der einzige Build.
- TCN-Sockets für den TR-03109-CA-/LDAP-Client (
TcnSocket,SmTcnLdapSocketFactoryund zugehörige Klassen) wurden entfernt. Die Unterstützung für HTTP- und SOCKS-Proxys bei CRL- und CA-Aufrufen bleibt bestehen. - Neu: TLS-Signatur mit HSM-gehaltenen Schlüsseln (
HsmTlsStreamSigner,HsmEnabledSignature) und die Klassensmartenergy.jcajcefür BouncyCastle-TLS im TR-03109-Modul.
Erforderliche Anpassungen
- Wenn Sie die CA über ein TCN-Gateway erreichen, prüfen Sie die Konnektivität vor der Umstellung.
- Wenn Sie den ServiceRuntime-Launcher einsetzen, wechseln Sie auf das Spring-Boot-Deployable.
Überprüfung
- Der Zugriff auf die CA und das Abrufen von CRLs funktionieren in Ihrer Umgebung.
Empfohlenes Vorgehen bei der Migration
- Sichern Sie die Datenbank und Ihre aktuelle Konfiguration (
hibernate.cfg.xml,application*.yml, Helm-Values,JAVA_OPTS). - Passen Sie die Konfiguration an:
- Image-Name oder JDK 25
- Probe-Pfade
aep.security.cors.pattern- Bouncr-/APIM-Werte, falls genutzt
- DB-Variablen (
DB_URL,DB_USERNAME)
- Spielen Sie die Datensicherung in eine Testumgebung ein und starten Sie Security Server 25 dagegen. Prüfen Sie, dass das Upgrade durchläuft.
- Führen Sie die Funktionstests der Abschnitte „Überprüfung“ aus.
- Produktionsumstellung: Stoppen Sie alle alten Instanzen, deployen Sie die neue Version, warten Sie auf die Readiness und prüfen Sie die Logs auf Upgrade-Fehler.
- Bewahren Sie die Datensicherung auf, bis ein vollständiger Zertifikatswechsel ohne Probleme durchlaufen wurde.