Weiterleitung von HTTP(S)-Anfragen nach innen‌

Einleitung


Um, zum Beispiel, einem Profil Daten per HTTP zu senden, muss man eine bestimmte URL ansprechen. Der schematische Aufbau der URL ist:


http://<URL/IP und Port Integration Server>/dw/Request/<URL-Suffix des Profils>


Wenn nun ein DMZ-Server im Einsatz ist, möchte man, dass Anfragen dieser Art an den DMZ-Server gehen und von dort an den inneren Integration Server weitergeleitet werden (Forwarding).

Hinweis: Bedenken Sie bitte generell, welche Pfade Sie über den DMZ-Server zugänglich machen möchten und richten Sie nur die ein, die Sie wirklich benötigen.

Standard-Kontext auf DMZ-Server


Per Default wird auf dem DMZ-Server auf HTTP-Anfragen reagiert, deren URL-Pfad mit dem URL-Kontext /forward beginnen. Diese Vorgabe kann in der Konfigurationsdatei ./etc/startup_dmz.xml (auf dem DMZ-Server) über die Parameter‌ servletContext und servletPath geändert werden. Nachfolgend gehen wir davon aus, dass die Default-Einstellungen verwendet werden, also servletContext=/forward und servletPath=/*

Forwarding-Regeln auf DMZ-Server


Auch wenn per Default auf dem DMZ-Server auf den URL-Kontext /forward reagiert wird, müssen dort noch Forwarding-Regeln definiert werden, also wie solche Anfragen weitergeleitet werden, da der DMZ-Server selbst nicht auf die Anfragen antwortet. Die Definition dieser Forwarding-Regeln erfolgt in der Konfigurationsdatei ./etc/forward.properties (auf dem DMZ-Server).

Falls der DMZ-Server innerhalb ./etc/hub.xml mehrere HTTP-Listener (Port 80, 443, usw.) hat, werden alle Requests, die über einen der HTTP-Listener eintreffen und einer Forwarding-Regel entsprechen, entsprechend der Regel weitergeleitet.


  • Jede Zeile stellt eine unabhängige Regel dar. Die linke Seite (Quell-Kontext), links neben dem Gleichheitszeichen, muss eindeutig sein.

  • Änderungen in der Datei ./etc/forward.properties werden zur Laufzeit erkannt und neu ausgewertet. Ein Neustart des Systems ist nicht notwendig.

  • Für Diagnosezwecke kann man das HTTP-Requestlog und das Serverlog unter ./logs auswerten. Achtung: Die Zeiten im Requestlog sind in der Zeitzone UTC, die im Serverlog sind in der Systemzeitzone.

Gehen wir nun von folgender Forwarding-Regel aus und davon, dass der innere Integration Server die gezeigte IP hat.

...
/forward/*=http://192.168.213.12:80
...

In diesem Fall werden alle Anfragen an den DMZ-Server, die mit dem Pfad /forward beginnen, an den inneren Integration Server weitergeleitet. Alle anderen Pfade werden nicht weitergeleitet.

Die Anfrage http://<URL/IP und Port DMZ-Server>/forward/dw/Request/<URL-Suffix des Profils> würde also weitergeleitet werden an http://192.168.213.12:80/dw/Request/<URL-Suffix des Profils>.

Wenn man nicht alle Anfragen weiterleiten möchte, kann man es auch etwas spezifischer machen.

...
/forward/dw/Request/*=http://192.168.213.12:80/dw/Request
...


Oder noch spezifischer mit folgender Regel. Damit könnte man die URL-Suffixe von HTTP-Profilen so setzen, dass nur manche von außen über den DMZ-Server ansprechbar sind. Ein HTTP-Profil mit URL-Suffix outside/example1 wäre dann über den DMZ-Server erreichbar und ein HTTP-Profil mit URL-Suffix example2 wäre nur über den inneren Integration Server erreichbar.


...
/forward/dw/Request/outside/*=http://192.168.213.12:80/dw/Request/outside
...

Weitere Kontexte auf DMZ-Server einrichten


Damit auf dem DMZ-Server auf weitere Kontexte reagiert wird (also nicht nur auf /forward), auf der innere Integration Server normalerweise reagiert, muss für den CommunicationForwardManager der Parameter addStandardServlets in der Konfigurationsdatei ./etc/startup_dmz.xml (auf dem DMZ-Server) auf true gesetzt werden.


<Call name="addApplication">
<Arg>
<New class="com.ebd.hub.datawizard.app.CommunicationForwardManager">
...
<Call name="addStandardServlets"><Arg type="boolean">true</Arg></Call>
...
</New>
</Arg>
</Call>


Folgende Kontexte werden damit auf dem DMZ-Server aktiviert.


/dw/Request

/dw/request

Siehe Abschnitt HTTP (Eingangsagent).

/dw/Trigger

/dw/trigger

Siehe Abschnitt Trigger/Externer Aufruf.

/dw/oauth2

Siehe Abschnitt OAuth 2.0 (Client).

/dw/cloud

Siehe Abschnitt CloudStorage (Kanal-Einstellungen).

/dw/register/oauth2

Siehe Abschnitt OAuth 2.0 (Server).

/partner/AS2Retrieve

Wichtiger Hinweis: Beachten Sie bitte, dass hierfür weitere Einstellungen nötig sind, siehe Abschnitt AS2-Handling unten.


Auch hier müssen erst entsprechende Forwarding-Regeln definiert werden, damit eine Weiterleitung stattfindet. Wichtiger Hinweis: Beachten Sie bitte, dass hier Groß-/Kleinschreibung relevant ist und definieren Sie bitte jeweils beide Varianten Request/request und Trigger/trigger.


...
/dw/request/*=http://<URL/IP und Port innerer Integration Server>/dw/request
/dw/Request/*=http://<URL/IP und Port innerer Integration Server>/dw/Request
/dw/trigger/*=http://<URL/IP und Port innerer Integration Server>/dw/trigger
/dw/Trigger/*=http://<URL/IP und Port innerer Integration Server>/dw/Trigger
/dw/oauth2/*=http://<URL/IP und Port innerer Integration Server>/dw/oauth2
/dw/cloud/*=http://<URL/IP und Port innerer Integration Server>/dw/cloud
/dw/register/oauth2/*=http://<URL/IP und Port innerer Integration Server>/dw/register/oauth2
/partner/AS2Retrieve/*=http://<URL/IP und Port innerer Integration Server>/partner/AS2Retrieve
...

Hinweis: Wenn auf dem inneren System ein HTTPS-Listener aktiv ist, kann das Forwarding auch über HTTPS erfolgen. Da die Verbindung vom DMZ-Server zum inneren Integration Server in einem geschützten Netzwerkteil erfolgt, ist aber dort eine nochmalige Verschlüsselung per HTTPS normalerweise nicht notwendig.

AS2-Handling


AS2-Requests können entweder auf dem DMZ-Server behandelt oder an den inneren Integration Server weitergeleitet werden. Zudem ist eine Kombination beider Varianten möglich.

AS2 auf DMZ-Server


  • Parameter handleAS2 in der Konfigurationsdatei ./etc/startup_dmz.xml (auf DMZ-Server) steht auf true.

  • AS2-Service auf DMZ-Server ist aktiv.


AS2-Requests werden per Message nach innen weitergereicht. Ist der innere Integration Server (vorübergehend) nicht erreichbar, werden die Messages (wie auch bei FTP, usw.) gepuffert.

AS2-Weiterleitung


  • Parameter handleAS2 in der Konfigurationsdatei ./etc/startup_dmz.xml (auf DMZ-Server) steht auf false.

  • Weiterleitung für Kontext /partner/AS2Retrieve ist eingerichtet (siehe Anleitung oben).


Alle AS2-HTTP-Requests werden nach innen gereicht und der innere Integration Server sendet MDNs und Nachrichten.

AS2 auf DMZ-Server und Weiterleitung


Hier richten Sie AS2 auf dem DMZ-Server ein (siehe Anleitung oben), definieren aber zusätzlich eine Weiterleitung über den Default-Kontext /forward (siehe Anleitung oben).


/forward/AS2Retrieve/*=http://<URL/IP und Port innerer Integration Server>/partner/AS2Retrieve


AS2-Requests über den Pfad /partner/AS2Retrieve/ werden dann auf dem DMZ-Server verarbeitet und AS2-Requests über den Pfad /forward/AS2Retrieve/ werden an den inneren Integration Server weitergeleitet.

HTTPS einrichten (DMZ-Server)


Sie können HTTPS für die Kommunikation zwischen dem externen Client und dem DMZ-Server verwenden.

Siehe Abschnitt Hinzufügen eines HTTPS-Listeners.

HTTP(S) tunneln (vom DMZ-Server zum inneren System)


Es ist möglich HTTP(S)-Requests über den MessageService zu tunneln. Dazu fügen Sie bitte folgende Option in der Konfigurationsdatei ./etc/startup_dmz.xml (auf DMZ-Server) ein. Die Forwarding-Regeln müssen auch in diesem Fall angepasst werden (siehe oben).


<Set name="tunnelHttp">true</Set>