Problem mit HttpUtils in Verbindung mit SSL_verify_mode

Begonnen von fhainz, 17 September 2017, 12:55:12

Vorheriges Thema - Nächstes Thema

fhainz

Hallo!

Ich bin gerade dabei ein Modul für meine Qbo Kaffeemaschine zu bauen. Leider gibt es keine Dokumentation zur API somit hab ich mich durch den Android-App Code quälen müssen. Ein paar sachen hab ich herausgefunden.
Das Ding ist via API im Netzwerk für die App erreichbar, das will ich nun für FHEM Nutzen. Mit zB https://10.0.0.12/machineInfo kann ich im Browser einige Maschinen Infos auslesen. Beim Aufruf bekomme ich eine Warnung das die Verbindung nicht sicher ist (Zertifikate passen nicht).

Zum testen wollte ich mit einer Blocking Verbindung arbeiten. Aber ich bekomme, trotz verify_hostname => 0 und SSL_verify_mode => 0, keine Verbindung. Auch ohne SSL_hostname => 0 funktioniert es nicht.
Ich kenne mich auch mit SSL viel zu wenig aus, muss ich zugeben  ::)
my($err,$data) = HttpUtils_BlockingGet({
     url => "https://10.0.0.12/machineInfo",
     timeout => 25,
     noshutdown => 1,
     method => "GET",
     sslargs => { SSL_hostname => 0, verify_hostname => 0, SSL_verify_mode => 0 },
   });


Ein weiterer Versuch mit
my $URL = "https://10.0.0.12/machineInfo";
  my $agent = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0, SSL_verify_mode => SSL_VERIFY_NONE },keep_alive => 1, timeout => 25)||"";
  my $header = HTTP::Request->new(GET => $URL)||"";
  my $request = HTTP::Request->new('GET', $URL, $header)||"";
  my $response = $agent->request($request)||"";

funktioniert wiederum problemlos.

Kann mir jemand auf die Sprünge helfen was ich bei BlockingGet falsch mache?

Grüße

rudolfkoenig


fhainz

Hallo Rudi,

hab mir den verbose 5 log während dem test schon angesehen, aber ich hab daraus nichts erkennen können.

2017.09.18 20:20:25 4: WEB_10.0.0.3_61842 POST /fhem&fw_id=137&fwcsrf=csrf_103369178109593&cmd=%7Btest%28%29%7D; BUFLEN:0
2017.09.18 20:20:25 5: Cmd: >{test()}<
2017.09.18 20:20:25 4: HttpUtils url=https://10.0.0.12/machineInfo
2017.09.18 20:20:27 5: HttpUtils request header:
GET /machineInfo HTTP/1.0
Host: 10.0.0.12
User-Agent: fhem

2017.09.18 20:20:27 4: WEB: /fhem&fw_id=137&fwcsrf=csrf_103369178109593&cmd=%7Btest%28%29%7D / RL:1227 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2017.09.18 20:20:27 4: WEB_10.0.0.3_61842 GET /fhem/pgm2/style.css?v=1505758474; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61847 GET /fhem/pgm2/jquery-ui.min.css; BUFLEN:0
2017.09.18 20:20:27 4: Connection accepted from WEB_10.0.0.3_61851
2017.09.18 20:20:27 4: WEB_10.0.0.3_61842 GET /fhem/pgm2/jquery-ui.min.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61847 GET /fhem/pgm2/fhemweb.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61851 GET /fhem/pgm2/jquery.min.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61847 GET /fhem/pgm2/fhemweb_colorpicker.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61842 GET /fhem/pgm2/fhemweb_fbcalllist.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61851 GET /fhem/pgm2/ios7Common.css; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61847 GET /fhem/pgm2/fhemweb_knob.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61842 GET /fhem/pgm2/fhemweb_readingsGroup.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61851 GET /fhem/pgm2/fhemweb_readingsHistory.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61847 GET /fhem/pgm2/fhemweb_sortable.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61842 GET /fhem/pgm2/dashboard_ios7.css; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61851 GET /fhem/pgm2/fhemweb_uzsu.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61847 GET /fhem/pgm2/fhemweb_weekprofile.js; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61842 GET /fhem/images/default/icoEverything.png; BUFLEN:0
2017.09.18 20:20:27 4: WEB_10.0.0.3_61842 GET /fhem?XHR=1&inform=type=status;filter=;since=1505758826;fmt=JSON&fw_id=137×tamp=1505758827258; BUFLEN:0
2017.09.18 20:20:29 4: WEB_10.0.0.3_61847 POST /fhem?cmd.attrglobal%3Dattr%20global%20verbose%203&XHR=1&fwcsrf=csrf_103369178109593&fw_id=129; BUFLEN:0
2017.09.18 20:20:29 5: Cmd: >attr global verbose 3<


Die test() Funktion sieht so aus:
sub test() {

my($err,$data) = HttpUtils_BlockingGet({
     url => "https://10.0.0.12/machineInfo",
     timeout => 25,
     noshutdown => 1,
     method => "GET",
     sslargs => { SSL_hostname => 0, verify_hostname => 0, SSL_verify_mode => 0 },
   });
}


Hab mir auch $err und $data ausgeben lassen.

2017.09.18 20:32:42 3: https://10.0.0.12/machineInfo: empty answer received
2017.09.18 20:32:42 3:

rudolfkoenig

Das Problem hat vermutlich mit dem Betreff nichts zu tun: wenn man in dem Log die Zeile mit "request header" sieht, dann ist der HTTPS (aka TLS) Handshake eigentlich erfolgreich abgeschlossen, und die Verbindung steht. "Eigentlich", weil das bei jedem normalen Implementierung der Fall ist, aber hier reden wir von einer Kaffemaschine.

Wahrscheinlicher ist mAn, dass HttpUtils irgendeine Headerzeile zuviel/zuwenig sendet, was deine Kaffemaschine derart beleidigt, dass sie nicht mal eine ordentliche Fehlermeldung zurueckschickt, sondern die Verbindung einfach zumacht.

Ich wuerde die von LWP gesendeten Daten ausgeben (z.Bsp. indem man contrib/tcptee.pl dazwischenschaltet), und den HttpUtils Aufruf angleichen.

Markus Bloch

Zitat von: rudolfkoenig am 19 September 2017, 08:35:38
Wahrscheinlicher ist mAn, dass HttpUtils irgendeine Headerzeile zuviel/zuwenig sendet, was deine Kaffemaschine derart beleidigt, dass sie nicht mal eine ordentliche Fehlermeldung zurueckschickt, sondern die Verbindung einfach zumacht.

Auch die HTTP-Protokollversion könnte eine derartige Beleidigung darstellen.

@fhainz: Hast du schonmal HTTP Version 1.1 probiert?

sub test() {

my($err,$data) = HttpUtils_BlockingGet({
     url => "https://10.0.0.12/machineInfo",
     timeout => 25,
     method => "GET",
     sslargs => { SSL_hostname => 0, verify_hostname => 0, SSL_verify_mode => 0 },
     httpversion => "1.1",
     header => { "User-Agent" => "Mozilla/1.22" }
   });
}
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

fhainz

Zitat von: Markus Bloch am 19 September 2017, 12:05:21
Auch die HTTP-Protokollversion könnte eine derartige Beleidigung darstellen.

@fhainz: Hast du schonmal HTTP Version 1.1 probiert?
Nein, hatte ich noch nicht. Aber genau das war es!! Nun funktioniert's.  :)

2017.09.19 12:12:23 3:
2017.09.19 12:12:23 3: {"serialNumber": "9393302000****", "macAddress": "BC:30:7E:1E:00:C8", "version": "V01.30.E015"}


Danke euch beiden!!

Grüße