[gelöst] MQTT2_SERVER: Fehlermeldung "bogus CONNECT (22), disconnecting"

Begonnen von gestein, 30 November 2021, 09:28:24

Vorheriges Thema - Nächstes Thema

gestein

Hallo,

ich versuche gerade meine Twinkly per MQTT in fhem einzubinden.
Allerdings bricht der MQTT2_SERVER beim Verbindungsaufbau mit der Fehlermeldung "bogus CONNECT (22), disconnecting" ab.
2021-11-30 09:07:50.436 Global global ATTR MQTT2_FHEM_Server verbose 5
2021.11.30 09:07:50.449 4 : Connection accepted from MQTT2_FHEM_Server_192.168.0.140_56425
2021-11-30 09:07:50.496 MQTT2_SERVER MQTT2_FHEM_Server nrclients: 49
2021.11.30 09:07:50.520 5 : in:  CONNECT: (22)(3)(3)(0)(147)
2021.11.30 09:07:50.520 3 : MQTT2_FHEM_Server_192.168.0.140_56425 with bogus CONNECT (22), disconnecting
2021-11-30 09:07:50.567 MQTT2_SERVER MQTT2_FHEM_Server nrclients: 48


Im Code zum Server habe ich dazu noch gefunden:
    # V3:MQIsdb V4:MQTT
    if(ord($fb) & 0xf) { # lower nibble must be zero
      Log3 $sname, 3, "$cname with bogus CONNECT (".ord($fb)."), disconnecting";
      return CommandDelete(undef, $cname);
    }


Wie kann ich die Geräte nun doch einbinden?
In den Einstellungen habe ich nix dazu gefunden.

Danke für jeden Hinweis.
lg, Gerhard

rudolfkoenig

Ich rate mal: bei der Twinky ist TLS aktiviert, beim MQTT2_SERVER nicht.

gestein

Die Dolumentation sagt zu MQTT:
Device sends messages with its states to a broker with MQTT. By default broker is set to mqtt.twinkly.com.
Firmware family "D" use HTTP and "G" use TLS.


Ich weiß noch nicht, welche FW das Gerät hat, aber ich vermute leider ,,G".

Und was kann ich nun tun?

Danke, Lg, Gerhard


gestein

Danke für den Hinweis.
Wenn ich nun "attr MQTT2_FHEM_Server SSL 1" setze, kommt eine neue Fehlermeldung.
MQTT2_SERVER SSL/HTTPS error:  SSL accept attempt failed error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate (peer: 192.168.0.140)

Ich muss gestehen, dass ich bei diesen Dingen (Zertifikaten etc.) absolut keine Ahnung habe.
Aber vielleicht weiß im Forum noch jemand, wie ich nun weiter kommen könnte?

Danke im Voraus
lg, Gerhard

rudolfkoenig

Ich bin leider auch kein Experte auf dem Gebiet, und diese Fehlermeldung ist fuer mich neu.
MQTT2_SERVER verifiziert nicht bewusst bzw. explizit die Zertifikate der Clients.
Nach Lesen diverser Beitraege im Internet habe ich eine falsche Uhrzeit auf dem Client in Verdacht.

gestein

Danke für Deine Mühe.
Wie ich die Zeit einstellen soll, habe ich noch nicht gefunden.

Ich habe auch einiges gesucht und viele haben aufgegeben, weil MQTT bei Twinkly veschlüsselt ist.
Eventuell geht's ja wirklich nicht.

Mal sehen.
Zumindest ist das eigentliche Thema gelöst  ;)

lg, Gerhard

gestein

Ich habe mir gerade den Code angeschaut und denke, dass der Fehler aus der Zeile 134 in der Datei TcpServerUtils.pm kommt.
if( !$ret
      && $err != EWOULDBLOCK
      && $err ne "Socket is not connected") {
      $err = "" if(!$err);
      $err .= " ".($SSL_ERROR ? $SSL_ERROR : IO::Socket::SSL::errstr());
      my $errLevel = ($err =~ m/error:14094416:SSL/ ? 5 : 1); # 61511
--->      Log3 $name, $errLevel, "$type SSL/HTTPS error: $err (peer: $caddr)"
        if($err !~ m/error:00000000:lib.0.:func.0.:reason.0./); #Forum 56364
      close($clientinfo[0]);
      return undef;
    }


Und in Summe kommt es wahrscheinlich von dieser Stelle:
eval {
      $ret = IO::Socket::SSL->start_SSL($clientinfo[0], {
        SSL_server    => 1,
        SSL_key_file  => "$mp/${certPrefix}key.pem",
        SSL_cert_file => "$mp/${certPrefix}cert.pem",
        SSL_version => $sslVersion,
        SSL_cipher_list => 'HIGH:!RC4:!eNULL:!aNULL',
        Timeout       => 4,
        });
      $! = EINVAL if(!$clientinfo[0]->blocking() && $!==EWOULDBLOCK);
    };


Wie gesagt, habe ich hier einfach zu wenig Wissen.
Aber muss ich etwas installieren?
Anscheinend werden ja irgendwelche Dateien abgefragt?

Danke, lg, Gerhard

rudolfkoenig

Dass diese Meldung in FHEM da herkommt ist mir klar, ich habs ja auch da eingebaut.
Es wird die Fehlermeldung der Crypto-Bibliothek (openssl) weitergegeben, und diese Meldungen geben mir auch staendig Raetsel auf.

Der MQTT2_SERVER benoetigt selbst Zertifikate, und falls sie noch nicht vorhanden sind, versucht sie mit dem openssl Programm zu erstellen, siehe das /opts/fhem/certs Verzeichnis. Dafuer muss openssl installiert sein, was bei den meisten Distributionen der Fall ist. Wenn die Erstellung des Server-Zertifikats schiefgeht, dann gibt es viele Meldungen im Log, und die Fehlermeldung ist beim connect anders (Permission denied oder No such file or directory).

Deswegen bin ich der Ansicht, dass die Probleme auf der anderen Seite zu suchen sind.

Otto123

#9
Demm SSL Server ein selbst signiertes Zertifikat zu verpassen ist die eine Seite der Medaille. Dem Client zu sagen akzeptiere dieses Zertifkat als gültig ist die andere.
Im Falle von selbst signierten Serverzertifikaten ist es gängig dem Client das Zertifikat in seinen lokalen Store zu geben.

Jetzt musst Du entweder SSL beim Client abschalten oder herausfinden wo Du das Zertikat vom FHEM hinspeichern musst.
Nach dem was hier steht, geht abschalten nicht. Ein offizielles (gekauftes) Zertifikat für FHEM ist auch eine Lösung.
Es gibt da auch die kostenfreie Lösung von letsencrypt, die übersteht ohne Umstände eventuell gerade so den Advent.

Hier gab es mal eine Diskussion wo noch eine neue Anforderung (DNS Namen im Zertifikat) diskutiert wurde:
https://forum.fhem.de/index.php?topic=122988.15

Ob es schon ein "gutes Zertikat" gibt kannst Du Dir anzeigen lassen:
{qx(openssl x509 -in ./certs/server-cert.pem -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

rudolfkoenig

"sslv3 alert bad certificate" kann natuerlich auch bedeuten, dass die Gegenseite Probleme mit unserem Zertifikat hat, und nicht andersherum.
Ich traeume dann weiter von einem Universum mit sinnvollen Fehlermeldungen.

gestein

Hallo,

vielen Dank für die ganzen Anregungen und Hinweise.
Aber bei dem Thema habe ich leider viel zu wenig Hintergrundwissen.

Ich wüßte ja nicht mal, wie ich unterscheiden könnte, ob fhem und/oder Twinkly Probleme haben.

Der Aufruf von Otto liefert tatsächlich etwas.

Ich habe nun mal Twinkly geschrieben, vielleicht kommt da was raus.
Denke aber nicht.

lg, Gerhard

Otto123

Zitat von: rudolfkoenig am 30 November 2021, 22:17:51
"sslv3 alert bad certificate" kann natuerlich auch bedeuten, dass die Gegenseite Probleme mit unserem Zertifikat hat, und nicht andersherum.
Ich traeume dann weiter von einem Universum mit sinnvollen Fehlermeldungen.
Von den ersten Stunden an wurde in Windows der Fehler: "Ich kann im Ziel nicht schreiben" mit der Meldung gezeigt "Ich kann die Quelle nicht lesen"
Zumindest hat sich dieses "ich sollte bei Fehlermeldungen andersherum denken" in meinem Kopf festgesetzt ;)
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

gestein

Hallo,

Der Support von Twinkly hat sehr schnell reagiert.
Die Antwort ist leider sehr unbefriedigend.

Es gibt kein offizielles API und sie haben auch nur auf die Seiten im Netz verwiesen.
MQTT ist verschlüsselt und da gibt es auch keine weitere Info dazu.
Abschalten lässt sich das bei der Firmware-Version G auch nicht.

Aber es wird in Zukunft was geben - das sagen sie aber anscheinend seit Jahren.
Schade.
Zumindest für das Thema des Threads geklärt ;)

Danke!
Lg, Gerhard

Otto123

Hallo Gerhard,

ich hatte gedacht, man könne sich "einfach so" ein Zertifikat besorgen und installieren, aber ohne das die anfordernde Instanz auf eingehende Verbindungen reagiert geht es nicht.
Es gibt Beschreibungen wie man mosquitto mit eiem letsencrypt Zertifikat versorgt: Suchbegriff: letsencrypt tls zertifikat mqtt
Folgende Idee:
Einen MQTT Broker mit offiziellem Zertifikat haben und den mit MQTT2_CLIENT ins FHEM einbinden. Dazu Ideen:

  • Entweder einen frei MQTT Broker im Internet nehmen:  myqtthub.com hat einen kostenfreien "open Plan". Die Datenmenge ist limitiert, ich habe keine Ahnung wieviele Daten bei Dir anfallen. Könnte man testen.
  • Einen eigenen mqtt Broker so im Netzwerk positionieren, dass man ihn mit letsencrypt versorgen kann und den mit MQTT2_CLIENT einbinden.
  • Herausfinden wie man den MQTT2_SERVER mit letsencrypt versorgt.

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