Befehle an fhem vom Laptop aus senden

Begonnen von tpunkt, 16 September 2021, 21:21:15

Vorheriges Thema - Nächstes Thema

Otto123

#15
Naja - irgendwas ist ja immer  ::) vielleicht findest Du hier Lösungsansätze.

Wenn das zu nichts führt und Du alternative Wege gehen musst, noch zwei Hinweise:
- mit telnet würdest Du unverschlüsselt arbeiten, es sei denn Du richtest Telent auch mit ssl ein. Wobei ich nicht weiß, ob der Telnet Client von Windows das kann.
- mit ssh würdest Du verschlüsselt arbeiten, quasi lokal am FHEM Server die Befehle absetzen und viele Stolperfallen umgehen.

Oder der Empfehlung von laberlaib folgen, falls der FHEM Rechner nicht "komplett im Internet steht"
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

tpunkt

Zitat von: laberlaib am 17 September 2021, 15:17:14
Läuft dann über Port 8088, keine Einschränkung nach IP (allowedfrom), kein csrfToken und kein https.

Das funktioniert jetzt! Was wäre dann jetzt die Schlussfolgerung was nun das Grundproblem bei mir ist?

Leider werde ich aus den Artikeln, die Otto netterweise verlinkt hat nicht schlau. Net framework ist up to date. Habe die Lösungsvorschläge hier versucht https://stackoverflow.com/questions/41618766/powershell-invoke-webrequest-fails-with-ssl-tls-secure-channel leider ohne Erfolg. Hat jemand vielleicht noch einen Tip, was ich noch versuchen könnte?

Otto123

Warscheinlich sind die Möglichkeiten woran das liegt vielfältig, ich habe da jetzt ne Weile rumprobiert, dass einzige zuverlässige Ergebnis hier die SSL-Prüfung abschalten (Langform):
https://www.msxfaq.de/code/powershell/powershell_und_zertifikate_check.htm
Ist aber - naja ...

Das muss aber in der gleichen powershell session passieren! Also einmal powershell auf und zwei Scripte ausführen. Weiß auf die Schnelle nicht, wie man das in einer Befehlszeile macht.

Es hält fit, aber zur Nachahmung und späteren Wartung kann man das alles nicht empfehlen.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

laberlaib

Zitat von: Otto123 am 17 September 2021, 15:21:45
Oder der Empfehlung von laberlaib folgen, falls der FHEM Rechner nicht "komplett im Internet steht"

Ich hab oben mal einen Edit dazu gefügt.
Empfehlung würde ich es nicht nennen. Aber wenn man schauen will, an welcher Stelle es den scheitert bei einer Verbindung von extern via Skripten, Apps oä. ist es manchmal ganz nützlich, mit so etwas zu beginnen und dann nach und nach die Sicherheitsmaßnahmen hochzuziehen und zu schauen, wann es scheitert.
Und für so curl-artige Apps (Android: "HTTP Shortcuts" ist da meine Empfehlung) ist der CSRF-Token oftmal ein Hindernis. Daher habe ich für diese solche eine, wie im Wiki und Forum oftmals beschriebene, ApiInstanz ohne Token aber mit BasicAuth laufen.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

Otto123

Guten Morgen,

weiter probiert: Es muss an Deiner SSL Konfiguration liegen!
Wenn ich ein ordentliches gültiges Zertifikat beim HTTPS Server hinterlege, dieses Zertikat als Vertrauenswürdige Stammzertifizierungsstelle im Lokalen Computer importiert wurde und der Browser (bei mir Chrome) mit dem Schloss anzeigt das die SSL Verbindung gültig ist, wird auch in der Powershell Konsole alles ordentlich abgearbeitet!
Wichtig ist dabei vor allem, dass die Alternativen Namen im Zertifikat mit der verwendeten URL übereinstimmen! Beispiel:
Zitat"subjectAltName=DNS:raspib.lan,IP:192.168.56.80"
Damit funktioniert die URL https://raspib.lan:8084 und https://192.168.56.80:8084
Von der Namensauflösung her funktioniert auch die URL https://raspib:8084 - aber hier ist das Zertifikat ungültig: sowohl im Browser und es kommen auch Fehler in der Powershellkonsole.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

laberlaib

Aber im Zweifelsfall mal realistisch betrachtet:
SSL ist für diese Verbindung auch nicht zwingend notwendig - bitte um Korrektur, wenn ich hier total falsch liege:
Annahme ist, dass "FHEMWEB" und "allowed" richtig funktionieren. Wenn nicht, dann sind auch weitere Überlegungen sinnfrei.

  • Von Deinem Laptop in deinem (W)Lan sendets du einen Befehl an deinen Drucker o.ä.
  • Das ganze über ein FHEMWEB, welches per "allowed" auf bestimmte Befehle, Geräte und IPs eingeschränkt wird.
  • Ob Mallory (also der Badboy in deinem Netzwerk) jetzt den Befehl im Klartext mitliest und dann ggfs. sogar die BasicAuthZugangsdaten... In unserem Netzwerk gibts fieser Dinge zu tun, da wäre ich ganz dankbar, wenn ich am Drucker on/off erkennen könnte, ob da irgendjemand rumschaltet.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

tpunkt

Interessant, vielleicht lasse ich es dann wirklich so.

Ich werde trotzdem mal dieser Anleitung (https://wiki.fhem.de/wiki/FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle#Dein_Anliegen) folgen und gucken, dass ssl richtig implementiert ist.

Danke für die Anregungen!

Otto123

#22
Für einen Server und ein Zertifikat ist das Verfahren vom Wiki schon wieder ziemlich umfangreich. Eigentlich reicht es ein neues Zertifikat per Kommandozeile zu erstellen und diese Zertifikat auch im PC zu importieren.
Bei mehreren Servern sollte man die eigene CA erstellen, aber mit Doku damit man in einem Jahr noch weiß was man getan hat ;)

Edit: Mit der Befehlszeile ensteht im aktuellen Pfad ein Zertifikat mit den entsprechenden Einträgen. Ich bin nicht sicher, ob das in jeder Umgebung funktioniert.
openssl req -x509 -newkey rsa:2048 -sha256 -days 3650 -nodes \
  -keyout example.key -out example.crt -extensions san -config \
   <(echo "[req]";
    echo distinguished_name=req;
    echo "[san]";
    array=($(host $(hostname)|grep 'has address'));
    echo subjectAltName=DNS:localhost,DNS:$(hostname|tr -d '\n'),DNS:${array[0]},IP:${array[3]}
    ) \
  -subj "/CN=example.com"

Mit der Zeile kann man sich den Inhalt anzeigen lassen und schauen ob die Namenseinnträge stimmig sind.
openssl x509 -in example.crt -text -noout
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz