AS4 Inbound Endpoint Dokumentation

Dieser Service empfängt die AS4 Nachrichten der Marktpartner. Nach dem Eingang wird die Nachricht über den Message-Broker an den Crypto Operations weitergeleitet. Der Crypto Operations antwortet mit der Empfangsbestätigung für den Sender. Und anschließend wird die Bestätigung zu Speicherung an den AS4 Message Service versandt.

Die API des AS4-Inbound-Endpoint muss durch die Marktpartner aufrufbar sein.

Hardware Anforderungen

Eine Service-Instanz erfordert mindestens 512 MB RAM.

Wir empfehlen 0,1 CPU-Kerne je Instanz.

Logs werden auf die Festplatte geschrieben, entsprechend muss genügend Speicherplatz vorhanden sein.

Abhängigkeiten

Der Service greift auf einen Message-Broker zu, um Nachrichten zu empfangen und zu versenden.

Der Service nutzt die REST API des Security Server FSS. Der FSS muss im Hintergrund auf ein HSM zugreifen können.

Einfache Konfiguration der as4-inbound-endpoint.properties

Die Kommunikation zwischen den verschiedene AS4 Services erfolgt über einen Message-Broker.

rabbitmq.host=localhost
rabbitmq.port=5672
rabbitmq.username=guest
rabbitmq.password=guest

AMQP Routing Konfiguration

Falls Sie das Standard Routing nutzen, muss das Routing nicht weiter konfiguriert werden. Wenn Sie Ihr Routing anpassen möchten, lesen Sie die folgende Dokumentation.

Weiterleiten der AS4 Nachricht an den Crypto Operations

Die vom Marktpartner eingegangen AS4 Nachricht wird über die Queue as4.decrypt.verify.default an den Crypto Operations weiter gegeben.

inboundCryptoMessageExchangeName=as4.decrypt.verify

Erhalt der Empfangsbestätigung

Der Crypto Operations antwortet mit einer signierten Bestätigung über die Queue as4.send.receipt.default.

receiptConsumerExchangeName=as4.send.receipt

Persistierung der Empfangsbestätigung

Nach Versendung der Empfangsbestätigung an den Marktpartner wird diese über die Queue as4.receipt.default an den AS4 Message Service zum Speichern abgelegt.

receiptExchangeName=as4.receipt

Nachrichten, die nicht verifiziert werden können, für die keine Bestätigung vom AS4 Receipt Service empfangen wurde, oder andere Probleme auftreten, werden direkt zum AS4-Message-Service über die Queue as4.messages.default geleitet. Es wird ein dazugehöriges, “leeres” Receipt mit entsprechendem Report in die Queue as4.receipt.default gelegt. Die Objekte werden im As4-Message-Service konsumiert und persistiert, sodass sie im MessageMonitor einsehbar sind. Es gibt keine Benachrichtigung/Receipt dazu, daher sollte der Sachbearbeiter oder Administrator regelmäßig dort nachschauen.

businessMessageExchangeName=as4.messages

Der Parameter Connection Timout wird in Sekunden angegeben und gibt die Wartezeit des Threads an, der auf die Antwort des Crypto Operations wartet. Mit dem zweiten Parameter lässt sich die Kommunikation mit dem Crypto Operations für Entwicklungszwecke temporär ausschalten.

connectionTimeout=300
skipCrypt=false

Routing Konfiguration der as4-inbound-endpoint.properties

Für die Aktivierung des Routings müssen der headerName und die headerValues gesetzt werden. Den headerName kann man sich als Filterkategorie vorstellen, während die headerValues den zu filternden Werten entsprechen. Nachrichten mit Werten, die nicht explizit als headerValues aufgelistet sind, laufen weiterhin über die default Route.

Als headerName werden folgende Parameter angeboten:

  • tenant: ILN Nummer des Senders
  • partner: ILN Nummer des Empfängers.
  • sector: GAS, ELECTRICITY

Es können mehrere Werte kommasepariert angegeben werden.

inboundCryptoMessageExchangeName=as4.decrypt.verify
inboundCryptoMessageHeaderName=partner
inboundCryptoMessageHeaderValues=
receiptExchangeName=as4.receipt
receiptHeaderName=partner
receiptHeaderValues=
businessMessageExchangeName=as4.messages
businessMessageHeaderName=partner
businessMessageHeaderValues=

Wird der Producer für das Routing konfiguriert muss natürlich auch die Gegenstelle dafür eingerichtet werden. Dem Consumer wird über die Gruppe der Wert (Value) aus der HeaderValues Liste zugewiesen nach welchem gefiltert werden soll. Bitte den Default Wert nur ändern, wenn Routing verwendet werden soll. Aktuell muss der BindingRoutingKey jedoch immer angegeben werden. Dieser ist, wenn kein Routing verwendet wird ‘default’.

receiptConsumerExchangeName=as4.send.receipt
receiptConsumerGroup=default
spring.cloud.stream.rabbit.bindings.consumeReceipt-in-0.consumer.bindingRoutingKey=default

Max Concurrency - Parallelität

Es ist möglich für den Consumer die Eigenschaft max-concurrency zu setzen. Diese definiert die maximale Anzahl von gleichzeitigen Verarbeitungsthreads, die für einen Consumer gestartet werden können. Der Default liegt bei 50.

receiptConsumerMaxConcurrency=50

API

Die API bietet den AS4 Endpunkt an.

Darüber hinaus bietet die API Server-Health Informationen an.

Ein KontextPath Präfix kann über folgende Property konfiguriert werden: server.servlet.contextPath.

Für produktive Systeme wird ein Loadbalancer benötigt, um die Anfragen auf mehrere Instanzen zu verteilen.

AS4-Adresse

Der AS4-Inbound-Endpoint empfängt die AS4-Nachricht auf der AS4-Adresse. Aus dem Service ergibt sich folgende Anforderung an die Adresse:

Die AS4-Adresse muss auf /as4 enden.

Multi-Mandantenfähigkeit

Falls das AS4-System für mehrere Mandanten betrieben wird, kann der AS4 Inbound Endpoint für jeden Mandanten mindestens eine eigene Instanz haben. So kann für jeden Mandanten eine eigene AS4-Adresse konfiguriert werden.

Bei einer solchen Konfiguration muss für jeden Mandanten eine eigene Queue eingerichtet werden. Über die Exchange as4.send.receipt muss entsprechend dem Mandanten in die jeweilige Queue geroutet werden. Die jeweilige Instanz des AS4-Inbound-Endpoint muss die Queue passend zum Mandanten konsumieren.

Multi-Tenancy

Der AS4-Inbound-Endpoint arbeitet außerdem als AMQP Producer. Hier müssen keine weiteren Anpassungen vorgenommen werden.

Ausfallsicherheit & Lastverteilung

Wie üblich für Microservices können mehrere Instanzen des AS4 Inbound Endpoint parallel betrieben werden, um die Last zu verteilen und Ausfallsicherheit zu gewährleisten.

In einem solchen Szenario muss ein Loadbalancer vorgeschaltet werden, um die Last zu verteilen.

Redundancy

Damit die Quittung an die richtige Service-Instanz übergeben wird, muss das Spring Profil scaling aktiviert werden. Dies hat zur Folge, dass für jede Instanz eine eigene Queue as4.send.receipt.<UUID> erstellt und an den Exchange as4.send.receipt mit dem Routingkey <UUID> gebunden wird. Dieser UUID wird beim Start der Instanz des Inbound Endpoints erzeugt und über die Services AS4 Crypto Operations und AS4 Receipt Service weitergereicht, damit der AS4 Crypto Operations anhand dieser <UUID> die Nachricht an die richtige Instanz des AS4 Inbound Endpoints routen kann. Hierbei ist es zwingend erforderlich, auch im AS4 Crypto Operations das Spring Profile auf scaling zu setzen, wie der Dokumentation der AS4 Crypto Operations zu entnehmen.

image

Dazu muss die folgende Konfiguration im AS4 Inbound Endpoint gesetzt werden:

spring.profiles.active=scaling

Wird eine Instanz gestoppt, so wird auch die dazugehörige Queue gelöscht.

mTLS

Der AS4-Inbound-Endpoint stellt AS4-Endpunkte bereit. Diese können per mTLS abgesichert werden.

Um mTLS zu aktivieren, konfigurieren Sie die folgenden Eigenschaften:

#=== SSL Properties ===#
sslEnabled=true
sslPort=8443

addressServiceUrl=http://localhost:8089/aep-as4-address-service
#ssl.tenant.id=9907647000008,9903111000003

fss.server.api.url=http://localhost:2222/fss/api/v1
ssl.partner.client=shared-client

Die TLS-Funktionalität kann über die Eigenschaft sslEnabled ein-/ausgeschaltet werden (entweder durch Setzen auf true oder false). Der Standardwert für sslEnabled ist false. Die Property server.ssl.enabled wird nicht unterstützt und darf nicht gesetzt werden.

Falls ssl aktiviert wird, läuft AS4 SSL über den Port 8443. Dieser Port kann mit folgender Property umkonfiguriert werden: sslPort.

Falls ssl deaktiviert ist, läuft AS4 über den Port 8080.

Der Service unterstützt parallel mehrere Mandanten. Wenn wir die Liste der Mandanten aus dem AS4-Address-Service automatisch abrufen möchten, müssen die Mandanten im AS4-Address-Service konfiguriert werden. Für diese Verbindung müssen wir die Eigenschaft addressServiceUrl in der Konfigurationsdatei definieren. (Alternativ kann die Liste der Mandanten, für die wir TLS konfigurieren möchten, wie gezeigt explizit in der Eigenschaft ssl.tenant.id mithilfe durch Kommas getrennter Werte angegeben werden.)

Hinweis: Konfigurieren Sie entweder die Eigenschaft addressServiceUrl oder ssl.tenant.id – konfigurieren Sie nicht beide Eigenschaften gleichzeitig.

Hinweis: Falls die addressServiceUrl genutzt wird, gilt: Der AS4-Address-Service muss ausgeführt und vom AS4-Inbound-Endpoint aus aufrufbar sein. Alle benötigten Mandanten müssen zur Bootzeit des AS4-Inbound-Endpoints verfügbar sein. Falls sich Mandanten zur Laufzeit ändern, müssen Sie den AS4-Inbound-Endpoint neu starten.

Für jeden Mandanten muss ein Marktpartner-TLS-Zertifikat/-Schlüssel im FSS/HSM vorhanden sein. Für jeden Marktpartner müssen alle Zertifikate der Aussteller-Zertifikatskette im FSS shared-client verfügbar sein. Die FSS-URL wird über die Property fss.server.api.url konfiguriert. Der shared-client wird über die Property ssl.partner.client angegeben. Wenn die Eigenschaft von ssl.partner.client nicht festgelegt ist, lautet der Standardwert shared-client.

Hinweis: Der FSS muss ausgeführt und vom AS4-Inbound-Endpoint aus aufrufbar sein. Alle benötigten Zertifikate müssen zur Bootzeit des AS4-Inbound-Endpoints verfügbar sein. Falls sich Zertifikate zur Laufzeit ändern, müssen Sie den AS4-Inbound-Endpoint neu starten.

Der Health-Check des Service kann erst erfolgreich sein, nachdem der Zertifikats-Ladeprozess abgeschlossen ist. Falls die Property startupSslCheck=true gesetzt ist, schlägt der Health-Check fehl, wenn nicht alle Zertifikate geladen werden konnten.

Validierung der Partner und System Adressen-Relation

Der Inbound-Endpoint bietet die Möglichkeit zur Überprüfung der Adress-Relation zwischen Partner und System. Dafür wird die aktuell konfigurierte Partnerbeziehung aus dem Address-Service über REST geladen. Dieses Feature muss explizit per Konfiguration aktiviert werden. Falls das Feature aktiviert ist, gilt:

  • Die Beziehung muss für eingehende AS4-Marktübertragungsnachrichten confirmed sein, sonst wird keine Quittung zurückgeliefert.
  • Für andere AS4-Nachrichten (z.B. BDEW-Test- und Pathswitch-Nachrichten) reicht es, wenn die Beziehung existiert. Sie muss noch nicht confirmed sein. Falls keine Beziehung existiert, wird keine Quittung zurück geliefert.

Folgende Konfiguration ist hierbei möglich:

# Address Service Config
partnerTenantRelationValidation=true (default false)
addressServiceUrl=http://as4-address-service:8080/aep-as4-address-service

Das Feature kann mit der Eigenschaft partnerTenantRelationValidation ein- oder ausgeschaltet werden. Um den Address-Service per REST ansprechen zu können, muss die Eigenschaft addressServiceUrl konfiguriert sein.

Actuator

Der Actuator wird verwendet, um den Servicestatus über die Rest-API zu überprüfen. Unten finden Sie den Haupt-API-Link

http://localhost:8080/actuator

Der management port ist 8080, unterstützt wird http.

Die Properties management.server.ssl.enabled & management.server.port werden nicht unterstützt und dürfen nicht gesetzt werden.

Anhang: Gesamtkonfiguration

Folgende Konfiguration reicht in einem Standard-System aus: application.properties:

#=== RabbitMQ Configuration ===#
rabbitmq.host=rabbitmq3
rabbitmq.port=5672
rabbitmq.username=guest
rabbitmq.password=${RABBITMQ_PASSWORD}

## Configured Timeout for response in sec
connectionTimeout=300

#=== FSS ===#
fss.server.api.url=http://fss:2222/fss/api/v1
## Page size for fss requests
fss.page.size.value=100

#=== SSL Properties ===#
sslEnabled=false
sslPort=8443
#ssl.tenant.id=9907647000008, 9903111000003
ssl.partner.client=shared-client

#Address Service Config
partnerTenantRelationValidation=false
addressServiceUrl=http://as4-address-service:8080/aep-as4-address-service

Allgemeine Hinweise zur Konfiguration finden Sie hier.

View Me   Edit Me