Login: Zugang nicht gestattet
Mit Relution 26.4.0 wurde der interne Anwendungsserver von Undertow auf Tomcat umgestellt. Läuft der Reverse-Proxy (z.B. nginx oder Traefik) auf einem anderen Server als Relution selbst, kann es dadurch beim Login zu folgendem Fehler kommen:

Im Server-Log von Relution erscheint dazu ein entsprechender ERROR-Eintrag mit dem Hinweis TLS required.
Ursache
Damit eine Anmeldung möglich ist, muss die Verbindung zwischen Reverse-Proxy und Relution zwei Bedingungen gleichzeitig erfüllen:
- Der Reverse-Proxy muss von einer als intern eingestuften IP-Adresse mit Relution kommunizieren. Als intern gelten dabei standardmäßig nur die privaten IPv4-Bereiche
10.x.x.x,172.16.x.x–172.31.x.xund192.168.x.xsowielocalhost. - Der Header
X-Forwarded-Protomuss vom Reverse-Proxy mit dem Werthttpsgesendet werden.
Nur wenn beide Bedingungen erfüllt sind, stuft Tomcat die eingehende Verbindung als TLS-gesichert ein. Läuft der Reverse-Proxy auf einem separaten Server mit eigener (externer) IP-Adresse, ist bereits die erste Bedingung nicht erfüllt. Fehlt zusätzlich oder stattdessen der X-Forwarded-Proto-Header, wird die Verbindung ebenfalls nicht als sicher erkannt. In beiden Fällen bricht Relution den Login mit TLS required im Server-Log ab, im Browser erscheint dazu die Meldung Zugang nicht gestattet.
Fehler bestätigen (optional)
Um die Ursache zu bestätigen, kann das DEBUG-Logging der zuständigen Tomcat-Komponente aktiviert werden. Dazu folgenden Eintrag auf oberster Ebene in die application.yml einfügen:
logging:
level:
org.apache.catalina.valves.RemoteIpValve: DEBUG
Anschließend einen erneuten Login-Versuch durchführen. Erscheint im Log danach ein Eintrag wie folgt, ist die IP des Reverse-Proxys die Ursache: Die Anfrage wird nicht als vertrauenswürdig eingestuft.
DEBUG ... ina.valves.RemoteIpValve: Skip RemoteIpValve for request /api/device/v1/currentDevice/actions/next with originalRemoteAddr '<externe-IP-des-Proxys>' []
Erscheint dieser Eintrag nicht, die Fehlermeldung aber weiterhin auftritt, liegt es stattdessen am fehlenden bzw. falschen X-Forwarded-Proto-Header, siehe Lösung →.
Lösung
Je nachdem, welche der beiden Bedingungen aus dem Abschnitt Ursache nicht erfüllt ist, ist eine der beiden folgenden Anpassungen nötig — bei Bedarf auch beide.
IP des Reverse-Proxys als vertrauenswürdig hinterlegen
Damit Relution die Anfragen des Reverse-Proxys akzeptiert, muss dessen IP-Adresse explizit als vertrauenswürdiger interner Proxy bekannt gemacht werden. Dazu folgenden Eintrag auf oberster Ebene in die application.yml eintragen:
server:
tomcat:
remoteip:
internal-proxies: '<Proxy-IP>|127\.\d{1,3}\.\d{1,3}\.\d{1,3}|0:0:0:0:0:0:0:1|::1'
<Proxy-IP> muss dabei durch die tatsächliche, mit Punkten maskierte IP-Adresse des Reverse-Proxys ersetzt werden, z. B. 194\.95\.62\.71. Bei mehreren Proxy-Servern lassen sich weitere IPs, jeweils getrennt durch |, ergänzen.
X-Forwarded-Proto Header setzen
Zusätzlich muss der Reverse-Proxy den Header X-Forwarded-Proto mit dem Wert https an Relution weiterleiten. Im location /-Block der nginx-Konfiguration muss dazu folgende Zeile gesetzt sein:
proxy_set_header X-Forwarded-Proto $scheme;
Diese Zeile ist im Standard-Template relution-nginx.conf bereits enthalten. Bei einer eigenen bzw. angepassten Reverse-Proxy-Konfiguration, oder wenn sich ein weiterer Proxy davor befindet, ist zu prüfen, ob der Header korrekt gesetzt und nicht durch einen vorgelagerten Proxy überschrieben wird.
Nach dem Anpassen der application.yml bzw. der Reverse-Proxy-Konfiguration muss der Relution-Dienst bzw. Container (und ggf. der Reverse-Proxy) neu gestartet werden, damit die Änderung wirksam wird.
Temporärer Workaround
Kann die Konfiguration des Reverse-Proxys kurzfristig nicht angepasst werden, lässt sich die Prüfung auf eine gesicherte Verbindung serverseitig auch vorübergehend deaktivieren. Dazu folgenden Eintrag auf oberster Ebene in die application.yml eintragen:
relution:
server:
jwt-secure-flag-enabled: false
Secure-Flag des Anmelde-Cookies wird dadurch nicht mehr erzwungen, selbst wenn die Verbindung tatsächlich unverschlüsselt beim Relution-Server ankommt. Diese Option ist ausschließlich als vorübergehender Workaround gedacht und sollte nach Behebung der eigentlichen Ursache (siehe Lösung oben) wieder entfernt werden.Weitere Hinweise
- Dieses Problem betrifft in erster Linie Installationen, bei denen der Reverse-Proxy nicht auf demselben Host wie Relution läuft.
- Betroffen sind Relution-Installationen ab Version 26.4.0.
- Die Meldung
Zugang nicht gestattetist eine allgemeine Fehlermeldung, die im Portal für verschiedenste, vom Server abgelehnte Anfragen angezeigt wird. Die in diesem Artikel beschriebene Lösung ist nur dann zutreffend, wenn im Server-Log zusätzlich derERROR-EintragTLS requirederscheint. - Siehe auch: Docker Installation - Optional: nginx →