HTTPMOD: SSL_verify_mode must be a number and not a string

Begonnen von Flachzange, 17 September 2022, 13:35:40

Vorheriges Thema - Nächstes Thema

Flachzange

Ich musste bei einem HTTPMOD-Device SSL_verify_mode setzen:

attr <dev> SSL_verify_mode,SSL_VERIFY_NONE


Beim Auruf erscheint folgendes im Log und FHEM "steht" danach. Ich habe jetzt den Prozess nicht im Detail überprüft, aber FHEM ist danach nicht mehr erreichbar:

ZitatSSL_verify_mode must be a number and not a string at /usr/share/perl5/IO/Socket/SSL.pm line 2386.

Ich habe mich jetzt mit

attr <dev> SSL_verify_mode,0

beholfen, aber ist halt unsauber.

Ist das ein Sonderfall bei mir gerade oder ein grundsätzliches Problem? Gut wäre ja, wenn der Fehler auch irgendwie gecatched würde.

Gruß
Chris

rudolfkoenig

ZitatGut wäre ja, wenn der Fehler auch irgendwie gecatched würde.
Etwas gemein von start_SSL, statt Fehlermeldung gleich die() aufzurufen.
Ich habe jetzt IO::Socket:SSL->start_SSL in eval gepackt, auch in der nichtblockierenden Variante.
Ich vermute noch ein Problem in HTTPMOD, da der von HttpUtils.pm jetzt zurueckgelieferte Fehler nicht ausgegeben wird.
Immerhin stuerzt FHEM nicht mehr ab.

Wegen den Werten fuer dieses Attribut habe ich in /usr/include/opsnssl/ssl.h Folgendes gefunden:
/*
* use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are
* 'ored' with SSL_VERIFY_PEER if they are desired
*/
# define SSL_VERIFY_NONE                 0x00
# define SSL_VERIFY_PEER                 0x01
# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02
# define SSL_VERIFY_CLIENT_ONCE          0x04
# define SSL_VERIFY_POST_HANDSHAKE       0x08

Die Voreinstellung ist SSL_VERIFY_NONE bzw. 0, d.h.  attr <dev> sslArgs SSL_verify_mode,0 ist ueberfluessig.

betateilchen

Zitat von: rudolfkoenig am 17 September 2022, 15:20:37
Ich vermute noch ein Problem in HTTPMOD, da der von HttpUtils.pm jetzt zurueckgelieferte Fehler nicht ausgegeben wird.

Hallo Rudi,
ich habe Deine neue Version mal getestet und in HTTPMOD eine zusätzliche Logausgabe für die Fehlermeldung eingebaut.


###################################
# read / parse new data from device
# - callback for non blocking HTTP
sub ReadCallback {
    my $huHash  = shift;                        # hash reference passed to HttpUtils_NonblockingGet
    my $err     = shift;                        # error message from HttpUtils_NonblockingGet
    my $body    = shift // '';                  # HTTP body received
    my $hash    = $huHash->{DEVHASH};           # our device hash
    my $name    = $hash->{NAME};                # our device name
    my $request = $hash->{REQUEST};             # hash ref to the request that was sent       
    my $context = $request->{'context'};        # attribute context (reading, get, set, sid)
    my $num     = $request->{'num'};
    my $type    = $request->{'type'};           # type of request that was sent (like get01, update or auth01)
    my $header  = $huHash->{httpheader} // '';  # HTTP headers received
    delete $huHash->{DEVHASH};
    $hash->{HttpUtils} = $huHash;               # make the httpUtils hash available in case anyone wants to use variables
    $hash->{BUSY}      = 0;

    Log3 $name, 5, "$name: ReadCallback called from " . FhemCaller();
++    Log3 $name, 5, "$name: error >>>>> $err";




In HTTPMOD scheint bei gesetztem Attribut sslArgs keine Fehlermeldung anzukommen:


2022.09.17 15:42:39 5: covid_germany: ReadCallback called from HttpUtils_Connect2NonblockingSSL
2022.09.17 15:42:39 5: covid_germany: error >>>>>


Im Erfolgsfall (wenn das Attribut sslArgs nicht gesetzt ist) sieht das an der Stelle so aus:


2022.09.17 15:44:11 5: covid_germany: ReadCallback called from __ANON__
2022.09.17 15:44:11 5: covid_germany: error >>>>>

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

ZitatIn HTTPMOD scheint bei gesetztem Attribut sslArgs keine Fehlermeldung anzukommen:
Wo Du Recht hast... $@ wird von HttpUtils_Close entfernt.
Habs gefixt.
Und revidiere meine Aussage bzgl Problem in HTTPMOD. :)

betateilchen

sieht gut aus...


2022.09.17 16:14:57 5: covid_germany: ReadCallback called from HttpUtils_Connect2NonblockingSSL
2022.09.17 16:14:57 5: covid_germany: Read callback Error LogLvl set to 3, regex
2022.09.17 16:14:57 3: covid_germany: Read callback: Error: SSL_verify_mode must be a number and not a string at /usr/share/perl5/IO/Socket/SSL.pm line 2386.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!