Hauptmenü

Beta-Test

Begonnen von Syrex-o, 16 April 2020, 20:12:22

Vorheriges Thema - Nächstes Thema

Tueftler1983


Syrex-o

Wenn dein verschlüsselter Zugriff auf einem anderen Port ist, gibt es also auch ein anderes WEB device in FHEM oder?

Hast du da auch longpoll auf websocket?

Zitat
Aber bei der Fehlermeldung wird als verbindung doch WSS also Websocket und nicht Https verwendet
Das passt soweit.
Kurzer Exkurs zum Thema websocket. Die Verbindung wird über einen HTTP oder HTTPS Handshake gemacht. Da deine Adresse nur über HTTPS erreichbar ist, kannst du auch nur wss verwenden.

Der Fehlermeldung nach sieht es auch nicht so aus, als würde das Zertifikat abgelehnt werden.

Kannst du dich ohne die secure Option auf den 8083 Port verbinden?

Tueftler1983

Ja ohne die Verschlüsselung kann ich auf den Port 8083 mit FhemNative verbinden mit basicAuth.

Der Port 8083 ist mit SSL und basicAuth
Der Port 8084 ist nur mit basicAuth

Der reverseProxy leitet anfragen die von der Fritzbox auf Port 80 oder 443 an die 192.168.2.172 kommen um auf den Port 8083

Syrex-o

Zitat von: Tueftler1983 am 06 März 2023, 20:09:43
Ja ohne die Verschlüsselung kann ich auf den Port 8083 mit FhemNative verbinden mit basicAuth.

Der Port 8083 ist mit SSL und basicAuth
Der Port 8084 ist nur mit basicAuth

Der reverseProxy leitet anfragen die von der Fritzbox auf Port 80 oder 443 an die 192.168.2.172 kommen um auf den Port 8083

Moment Mal. Die "unsichere" Verbindung ohne den SSL Haken in FhemNative sollte nicht funktionieren, wenn dein FHEM auf dem 8083 Port mit HTTPS läuft. Wenn das tatsächlich funktioniert, dann gibt es ein Problem mit deiner HTTPS Absicherung.

Tueftler1983

Ahh doch, ist richtig, aber für die verschlüsselung muss die Anfrage auf dem Pi über Port 80 oder 443 kommen damit der Reverse Proxy die Anfrage über SSL und weiter an Port 8083 gibt. Dieser ist ja nicht von fhem aus SSL verschlüsselt.

Syrex-o

Zitat von: Tueftler1983 am 06 März 2023, 20:26:54
Ahh doch, ist richtig, aber für die verschlüsselung muss die Anfrage auf dem Pi über Port 80 oder 443 kommen damit der Reverse Proxy die Anfrage über SSL und weiter an Port 8083 gibt. Dieser ist ja nicht von fhem aus SSL verschlüsselt.

Ok, verstehe. Es scheint jede Menge Probleme mit Websockets über Apache Reverse proxy geben. Hier mal eine Konfiguration für Home Assistent:

<VirtualHost *:443>
    ServerName ******.duckdns.org
ServerAlias home.*******.nrw

SSLEngine on
    SSLCertificateFile /usr/local/apache2/conf/server.crt
    SSLCertificateKeyFile /usr/local/apache2/conf/server.key

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

# Home Assistant WebSockets
ProxyPass /api/websocket wss://192.168.178.10:443/api/websocket
ProxyPassReverse /api/websocket wss://192.168.178.10:443/api/websocket

    # Home Assistant HTTP
    ProxyPass / https://192.168.178.10:443/
    ProxyPassReverse / https://192.168.178.10:443/

</VirtualHost>


Die Ursache ist aus meiner Sicht der Reverse Proxy. Da scheint etwas mit der Konfiguration nicht zu passen.

Das habe ich noch gefunden: https://www.serverlab.ca/tutorials/linux/web-servers-linux/how-to-reverse-proxy-websockets-with-apache-2-4/

Tueftler1983

Okay dann bin ich raus und werde es weiterhin nur mit von nutzen...

Syrex-o

Zitat von: Tueftler1983 am 06 März 2023, 21:11:13
Okay dann bin ich raus und werde es weiterhin nur mit von nutzen...
Jetzt verstehe ich leider nicht, was du meinst?

Tueftler1983

Ich meine damit das ich froh war das ich vor ca 3 Jahren den Apache2 Server mit reverseProxy und LetsEncrypt richtig ans laufen bekommen habe und ich jetzt nicht wüßte wie und wo ich ansetzen muss um das websocket da noch zu erlauben bzw durch zu schleifen.

Das ist mir dann zu hoch.
Bei Ner step by step Anleitung kann ich mich durch hangeln aber was darüber geht ist schwer.

Trotzdem lieben dank

Syrex-o

Zitat von: Tueftler1983 am 07 März 2023, 07:58:18
Ich meine damit das ich froh war das ich vor ca 3 Jahren den Apache2 Server mit reverseProxy und LetsEncrypt richtig ans laufen bekommen habe und ich jetzt nicht wüßte wie und wo ich ansetzen muss um das websocket da noch zu erlauben bzw durch zu schleifen.

Ich glaube, dass nur deine reverseProxy config angepasst werden muss. Das sollte ziemlich einfach sein.
Könntest du mal deine aktuelle Config einstellen? Dann könnten wir ein config update testen.

VG

Tueftler1983

hey

das ist die erzeitige config
<IfModule mod_proxy.c>
  <Location /fhem>
    ProxyPass http://localhost:8083/fhem
    ProxyPassReverse http://localhost:8083/fhem
  </Location>
</IfModule>

Tueftler1983

meinst du das mit änderungen??

<Location /fhem>

  RewriteEngine On
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule /fhem/(.*)           ws://localhost:8082/fhem/$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket [NC]
  RewriteRule /fhem/(.*)           http://localhost:8082/fhem/$1 [P,L]

  # Websockets
  ProxyPass ws://localhost:8083/fhem
  ProxyPassReverse ws://localhost:8083/fhem

  # ProxyPass/ProxyPassReverse leitet HTTP requests auf eine andere URL um
  ProxyPass http://localhost:8083/fhem
  ProxyPassReverse http://localhost:8083/fhem

  # ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
  ProxyHTMLURLMap /        /fhem/
  ProxyHTMLURLMap /fhem/     /fhem/
  AuthType Basic
  AuthName "Password Required"
  AuthUserFile /etc/fhem-htpasswd
  Require user klaus
  Order deny,allow
  Allow from all
</Location>


habe ich grade im forum im zusammenhang mit Apache2 und WS gefunden

Syrex-o

#57
Zitat von: Tueftler1983 am 08 März 2023, 13:30:01
meinst du das mit änderungen??

<Location /fhem>

  RewriteEngine On
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule /fhem/(.*)           ws://localhost:8082/fhem/$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket [NC]
  RewriteRule /fhem/(.*)           http://localhost:8082/fhem/$1 [P,L]

  # Websockets
  ProxyPass ws://localhost:8083/fhem
  ProxyPassReverse ws://localhost:8083/fhem

  # ProxyPass/ProxyPassReverse leitet HTTP requests auf eine andere URL um
  ProxyPass http://localhost:8083/fhem
  ProxyPassReverse http://localhost:8083/fhem

  # ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
  ProxyHTMLURLMap /        /fhem/
  ProxyHTMLURLMap /fhem/     /fhem/
  AuthType Basic
  AuthName "Password Required"
  AuthUserFile /etc/fhem-htpasswd
  Require user klaus
  Order deny,allow
  Allow from all
</Location>


habe ich grade im forum im zusammenhang mit Apache2 und WS gefunden

Das könnte schon funktionieren.
Denk daran nach dem speichern den Apache service neu zu starten.

P.s. den Thread habe ich auch noch gefunden. Scheint zu funktionieren: https://forum.fhem.de/index.php?topic=67271.0

Tueftler1983

Das ist der Beitrag aus dem ich es habe, nur der untere teil verursacht bei mir einen Fehler sodas der Apache2 Server nicht startet.

die derzeitige Config ist so:
<Location /fhem>

  RewriteEngine On
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule /fhem(.*)           ws://localhost:8083/fhem$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket [NC]
  RewriteRule /fhem(.*)           http://localhost:8083/fhem$1 [P,L]

  # ProxyPass/ProxyPassReverse leitet HTTP requests auf eine andere URL um
  ProxyPass http://localhost:8083/fhem
  ProxyPassReverse http://localhost:8083/fhem

  </Location>


der teil macht probleme:

# ProxyHTMLURLMap passt Links im HTML/JavaScript Source an
  ProxyHTMLURLMap /        /fhem/
  ProxyHTMLURLMap /fhem/     /fhem/
  AuthType Basic
  AuthName "Password Required"
  AuthUserFile /etc/fhem-htpasswd
  Require user klaus
  Order deny,allow
  Allow from all


Ich teste mal mit Fhemnative

Tueftler1983

#59
scheint immer noch das selbe zu sein,


main.675b46775ba190f9.js:1 WebSocket connection to 'wss://XXXXX:xxxxx@XXXXX.zapto.org/?XHR=1&inform=type=status;filter=.*;fmt=JSON&timestamp=1678280898822' failed:
main.675b46775ba190f9.js:1 WebSocket connection to 'wss://XXXXX:xxxxx@192.168.2.172/?XHR=1&inform=type=status;filter=.*;fmt=JSON&timestamp=1678280911522' failed:


extern erreiche ich fhem so im Browser
xxx-xxx.zapto.org/fhem
intern 192.168.2.172/fhem

wenn ich unter Port nicht 80 oder 443 eingebe für http bzw https sondern den 8083, dann bekomme ich diese meldung

main.675b46775ba190f9.js:1 WebSocket connection to 'wss://XXXXX:xxxxx@XXXXXXXX.zapto.org:8083/?XHR=1&inform=type=status;filter=.*;fmt=JSON&timestamp=1678282828943' failed: WebSocket is closed before the connection is established.
(anonymous) @ main.675b46775ba190f9.js:1
g @ main.675b46775ba190f9.js:1
unsubscribe @ main.675b46775ba190f9.js:1
unsubscribe @ main.675b46775ba190f9.js:1
unsubscribe @ main.675b46775ba190f9.js:1
g @ main.675b46775ba190f9.js:1
unsubscribe @ main.675b46775ba190f9.js:1
unsubscribe @ main.675b46775ba190f9.js:1
unsubscribe @ main.675b46775ba190f9.js:1
(anonymous) @ main.675b46775ba190f9.js:1
(anonymous) @ main.675b46775ba190f9.js:1
_execute @ main.675b46775ba190f9.js:1
execute @ main.675b46775ba190f9.js:1
flush @ main.675b46775ba190f9.js:1
L.<computed> @ polyfills.fea3d3e6709f6d3d.js:1
invokeTask @ polyfills.fea3d3e6709f6d3d.js:1
onInvokeTask @ main.675b46775ba190f9.js:1
invokeTask @ polyfills.fea3d3e6709f6d3d.js:1
runTask @ polyfills.fea3d3e6709f6d3d.js:1
invokeTask @ polyfills.fea3d3e6709f6d3d.js:1
invoke @ polyfills.fea3d3e6709f6d3d.js:1
m.args.<computed> @ polyfills.fea3d3e6709f6d3d.js:1
setInterval (async)
d @ polyfills.fea3d3e6709f6d3d.js:1
scheduleTask @ polyfills.fea3d3e6709f6d3d.js:1
onScheduleTask @ polyfills.fea3d3e6709f6d3d.js:1
scheduleTask @ polyfills.fea3d3e6709f6d3d.js:1
scheduleTask @ polyfills.fea3d3e6709f6d3d.js:1
scheduleMacroTask @ polyfills.fea3d3e6709f6d3d.js:1
Me @ polyfills.fea3d3e6709f6d3d.js:1
(anonymous) @ polyfills.fea3d3e6709f6d3d.js:1
o.<computed> @ polyfills.fea3d3e6709f6d3d.js:1
setInterval @ main.675b46775ba190f9.js:1
requestAsyncId @ main.675b46775ba190f9.js:1
schedule @ main.675b46775ba190f9.js:1
schedule @ main.675b46775ba190f9.js:1
n @ main.675b46775ba190f9.js:1
Ei @ main.675b46775ba190f9.js:1
(anonymous) @ main.675b46775ba190f9.js:1
(anonymous) @ main.675b46775ba190f9.js:1
(anonymous) @ main.675b46775ba190f9.js:1
_ @ main.675b46775ba190f9.js:1
subscribe @ main.675b46775ba190f9.js:1
(anonymous) @ main.675b46775ba190f9.js:1
t @ polyfills.fea3d3e6709f6d3d.js:1
(anonymous) @ main.675b46775ba190f9.js:1
n @ main.675b46775ba190f9.js:1
Z @ main.675b46775ba190f9.js:1
(anonymous) @ main.675b46775ba190f9.js:1
t @ polyfills.fea3d3e6709f6d3d.js:1
(anonymous) @ main.675b46775ba190f9.js:1
testConnectionProfile @ main.675b46775ba190f9.js:1
(anonymous) @ 1799.bd71f5f3ed40a6f3.js:1
n @ main.675b46775ba190f9.js:1
Z @ main.675b46775ba190f9.js:1
(anonymous) @ main.675b46775ba190f9.js:1
t @ polyfills.fea3d3e6709f6d3d.js:1
(anonymous) @ main.675b46775ba190f9.js:1
testIPSettings @ 1799.bd71f5f3ed40a6f3.js:1
(anonymous) @ 1799.bd71f5f3ed40a6f3.js:1
yl @ main.675b46775ba190f9.js:1
c @ main.675b46775ba190f9.js:1
(anonymous) @ main.675b46775ba190f9.js:1
invokeTask @ polyfills.fea3d3e6709f6d3d.js:1
onInvokeTask @ main.675b46775ba190f9.js:1
invokeTask @ polyfills.fea3d3e6709f6d3d.js:1
runTask @ polyfills.fea3d3e6709f6d3d.js:1
invokeTask @ polyfills.fea3d3e6709f6d3d.js:1
Z @ polyfills.fea3d3e6709f6d3d.js:1
N @ polyfills.fea3d3e6709f6d3d.js:1
B @ polyfills.fea3d3e6709f6d3d.js:1
main.675b46775ba190f9.js:1 FHEM: Try connecting with profile: 0 - trial: 0