HttpUtils.pm: SSL_version

Begonnen von dev0, 05 Juli 2017, 06:04:13

Vorheriges Thema - Nächstes Thema

dev0

Die SSL-Option ssl_Version SSL_version läßt sich zur Zeit nicht über die Hashreferenz der Funktionsparameter einstellen, da der Wert vom Attribut sslVersion bzw. dessen Defaultwert übersteuert wird. Ich würde mir wünschen, dass das nicht passiert, wenn die Option gesetzt ist. Bei den Optionen SSL_hostname und SSL_verify_mode ist das jetzt schon der Fall.
Hintergrund ist, dass ich in einem FHEM Command die Option setzen möchte, ohne Attribute (temporär) ändern zu müssen.


Index: FHEM/HttpUtils.pm
===================================================================
--- FHEM/HttpUtils.pm (revision 14640)
+++ FHEM/HttpUtils.pm (working copy)
@@ -347,7 +347,8 @@
         if($hash->{NAME});
       my %par = %{$hash->{sslargs}};
       $par{Timeout}      = $hash->{timeout};
-      $par{SSL_version}  = $sslVersion;
+      $par{SSL_version}  = $sslVersion
+        if !$hash->{sslargs} || !defined($hash->{sslargs}{SSL_version});
       $par{SSL_hostname} = $hash->{host}
         if(IO::Socket::SSL->can('can_client_sni') &&
            IO::Socket::SSL->can_client_sni() &&

rudolfkoenig

Habe es eingebaut, aber eine kuerzere Variante gewaehlt, bitte testen.

ZitatHintergrund ist, dass ich in einem FHEM Command die Option setzen möchte, ohne Attribute (temporär) ändern zu müssen.
Kannst du dazu bitte mehr erzaehlen? Bin neugierig.

CoolTux

Hänge mich mal der Neugier halber mit ran
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

dev0

#3
Zitat von: rudolfkoenig am 05 Juli 2017, 08:43:24
bitte testen.
Funktioniert. Danke für's Einbauen.

Es geht um einen HttpUtils_NonblockingGet Wrapper, den ich als FHEM command umgesetzt habe. Der Sinn soll sein, dass man per FHEM Befehl eine (zZ. http/https) URL non-blocking aufrufen kann und (optional) die Serverantwort in ein Reading schreiben kann. Primär habe ich das für mich im Arduino/ESP Umfeld geschrieben, um mitzubekommen, ob ein Befehl korrekt angekommen ist. Dieses Ergebnis kann man, ebenfalls optional, filtern: json, html, (un)named capture, ...
Noch optionaler ;) sind die HTTP/SSL Optionen wie header, data, SSL_.*, ... die man einfach mit Parametern übergeben kann, aber nicht muß.

Ein weiterer Grund zur Umzusetzung war, dass man im Anfängerbreich immer wieder sieht, dass Anwender blockingGet, system(wget), etc. statt nonblockingGet verwenden, da sie es nicht besser wissen oder umsetzen können. Die ebenfalls nicht-blockierende Variante mit "..." auf der FHEM Ebene zB. mit wget/cul aufzurufen funktioniert natürlich auch, liefert aber kein Ergebnis zurück.

Ich habe gerade eine Vorabversion hier abgelegt, falls es Dich/Euch interessiert.

Btw: Beim Testen ist mir gerade aufgefallen, dass eine nicht bekannte SSL_version FHEM beendet, unabhängig davon, ob der Parameter als Attribut sslVersion oder über den sslargs-hash übergeben wird. Meine erste Idee das abzufangen ist daran gescheitert, dass ich nicht weiß, wie man heraus bekommt, welche Methoden (von Net::SSLeay?) unterstützt werden.
Die Fehlermeldung in diesem Fall lautet bei mir:
Zitat
invalid SSL_version specified at /usr/local/share/perl/5.18.2/IO/Socket/SSL.pm line 502.

Edit: Link zu Github korrigiert.

rudolfkoenig

ZitatBtw: Beim Testen ist mir gerade aufgefallen, dass eine nicht bekannte SSL_version FHEM beendet
Danke fuer den Hinweis, das habe ich jetzt abgefangen.

Dein Befehl mit den vielen Optionen ist eine Alternative zu HTTPMOD mit Attributen, und ich bin gespannt, ob es sich durchsetzt. Bisher bin ich auf dem Gegenzug, ich wuensche z.Bsp. dass update und backup definierte Instanzen waeren, und keine Befehle, da ich die vielen Optionen fuer nicht praktikabel halte, und deswegen die zugehoerigen Attribute im global habe, was mir aber auch nicht passt. Ich beobachte also dein Experiment mit Neugier :)

dev0

Zitat von: rudolfkoenig am 06 Juli 2017, 10:24:39
Danke fuer den Hinweis, das habe ich jetzt abgefangen.
Ich hatte mir zwischenzeitlich die 10-12 Zeilen Code aus SSL.pm "ausgeliehen", die die Version prüft... Deine eval Variante ist aber in jedem Fall übersichtlicher und damit auch wartungsfreundlicher ;)

ZitatDein Befehl mit den vielen Optionen ist eine Alternative zu HTTPMOD mit Attributen
Eine Alternative zu HTTPMOD soll/sollte es nicht werden, manchmal aber geht die Detailverliebtheit mit mir durch... HTTPMOD scheint sehr ausgereift zu sein (kenne es aber noch gar nicht), diesen Stand zu erreichen dürfte sehr zeitaufwändig sein. Daher überlege ich noch alle Optionen, die nichts Verbindungsaufbau und SSL Methoden zu tun haben, zu entfernen bevor ich den Befehl einchecke oder im Forum zum Testen anrege. Die Grundlegende Idee ist/war es einen Befehl nonblocking abzusetzen.

(Zu)viele Optionen: die Auflistung der Connection Parameter (timeout, etc.) hatte ich in der command ref auch nur explizit aufgeführt, da sie im HttpUtils Wiki nur auf Deutsch dokumentiert sind, sonst hätte ich mir das auch gespart und nur auf die Möglichkeit verwiesen, wie ich es bei den SSL Methoden gemacht habe.

Eine Idee, die mir gerade durch den Kopf geht, ist: Funktionen aus HTTPMOD zu nutzen, um die erhaltenen Werte in Readings zu schreiben/aufzuteilen. Diese Möglichkeit werde ich mir zumindest enimal anschauen.

@StefanStrobel: Du liest hier nicht zufällig mit?