Revidiert nach Lösung: http/2 + SAN-Zertifikate beißen sich

Hi zusammen, evtl. speziell @foer,

ich habe versucht, eine “externe Seite” in die Cloud einzubinden, die App in NC heißt “external sites”. (Zweiter Button oben)

grafik

Ich habe das Problem, dass ich 404-Nachrichten bekomme, v.a. in den Logs des externen server tauchen Anfragen auf, die sicher an die Cloud gerichtet sein sollten, z.B.

 172.16.17.254 - - [28/Nov/2018:10:10:06 +0000] "GET /core/img/favicon.ico HTTP/2.0" 404 19

Daher funktioniert die Cloudseite nicht mehr, bis ich im Browser “Umschalt”-STRG und R drücke.

Leider funktioniert es innerhalb der Schule (!)

Meine Situation ist: beide Server stehen in der DMZ, beide werden mit FQDN (bzw. Alias) angesprochen (cloud.meineschule.de und docker.meineschule.de als externe seite)

Hat jemand eine Idee, woher die Verwirrung kommt? Offensichtlich weiß jemand (browser? cache? haproxy auf dem IPFire? cloudserver?) nicht, mit wem er jetzt grade reden soll.

Hat jemand das Problem auch schon mal gehabt?

VIelen Dank für jedwede Hilfe,

Tobias

Hi nochmal zusammen,

Firefox: cloud.schule.de auf docker.schule.de und zurück

So sieht das Log auf dem Cloud-server aus, wenn ich von cloud.meine-schule.de auf die externe Seite (docker.meine-schule.de/ivo) zugreife und dann zurück (z.B. zu “polls”-App) wechsele:

polls-App:
172.16.17.254 - - [01/Dec/2018:11:39:43 +0100] "GET /index.php/apps/polls/ HTTP/1.1" 200 8766 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0"
172.16.17.254 - - [01/Dec/2018:11:39:43 +0100] "GET /core/vendor/select2/select2.css?v=dbfc2295-22 HTTP/1.1" 200 3926 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0"
172.16.17.254 - - [01/Dec/2018:11:39:43 +0100] "GET /index.php/svg/core/actions/more/fff?v=1 HTTP/1.1" 200 1433 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0"
172.16.17.254 - - [01/Dec/2018:11:39:43 +0100] "GET /index.php/svg/core/places/contacts/fff?v=1 HTTP/1.1" 200 1929 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0"
172.16.17.254 - - [01/Dec/2018:11:39:44 +0100] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/1.1" 200 963 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0"

external-App /ivo:
172.16.17.254 - - [01/Dec/2018:11:39:47 +0100] "GET /index.php/apps/external/1 HTTP/1.1" 200 6859 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0"
172.16.17.254 - - [01/Dec/2018:11:39:47 +0100] "GET /apps/external/l10n/de.js?v=dbfc2295-22 HTTP/1.1" 200 3022 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0"
172.16.17.254 - - [01/Dec/2018:11:39:47 +0100] "GET /apps/external/js/external.js?v=dbfc2295-22 HTTP/1.1" 200 1071 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0"

polls-App:
nix 

Und so sieht das Log auf dem Server von docker.mein-schule.de/ivo aus, wenn ich auf external app klicke und dann zurück zu “polls” App

polls-App:
nix

external-App /ivo:
172.16.17.254 - - [01/Dec/2018:10:43:01 +0000] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 404 19 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0" 2809 "backend not found" "/ocs/v2.php/apps/notifications/api/v2/notifications" 0ms
172.16.17.254 - - [01/Dec/2018:10:43:02 +0000] "GET /core/img/favicon-touch.png HTTP/2.0" 404 19 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0" 2810 "backend not found" "/core/img/favicon-touch.png" 0ms
172.16.17.254 - - [01/Dec/2018:10:43:01 +0000] "GET /ivo HTTP/2.0" 200 11902 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0" 2808 "Host-meine-schule-de-1" "http://172.23.0.3:5000" 341ms

polls-App:
172.16.17.254 - - [01/Dec/2018:10:43:17 +0000] "GET /index.php/apps/polls/ HTTP/2.0" 404 19 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0" 2811 "backend not found" "/index.php/apps/polls/" 0ms
172.16.17.254 - - [01/Dec/2018:10:43:17 +0000] "GET /favicon.ico HTTP/2.0" 404 19 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0" 2812 "backend not found" "/favicon.ico" 0ms

Alle Anfragen die im untere Teil an “/ocs/…” oder “/core…” oder “/index.php” gehen, sollten überhaupt nicht dort ankommen.

Wie gesagt, wenn ich STRG-Umstalt-R drücke, dann schnallt es der Firefox wieder.

Chrome: cloud.schule.de auf docker.schule.de und zurück

In Chrome tut es ebenfalls nicht:

External-App /ivo:
172.16.17.254 - - [01/Dec/2018:10:46:30 +0000] "GET /ivo HTTP/2.0" 401 32 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" 2813 "Host-docker-meine-schule-de-1" "http://172.23.0.3:5000" 5ms
172.16.17.254 - - [01/Dec/2018:10:46:38 +0000] "GET /ivo HTTP/2.0" 200 11902 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" 2814 "Host-docker-meine-schule-de-1" "http://172.23.0.3:5000" 386ms

polls-App:
172.16.17.254 - - [01/Dec/2018:10:46:48 +0000] "GET /index.php/apps/polls/ HTTP/2.0" 404 19 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" 2815 "backend not found" "/index.php/apps/polls/" 0ms
172.16.17.254 - - [01/Dec/2018:10:46:48 +0000] "GET /favicon.ico HTTP/2.0" 404 19 "https://cloud.meine-schule.de/index.php/apps/polls/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36" 2816 "backend not found" "/favicon.ico" 0ms

Andere Cloud: cloud.privat.de auf docker.schule.de und zurück

sehr verrückt ist:
Wenn ich die externe Seite in meiner privaten NC (mit privater Domäne) einrichte, dann kann ich ohne Probleme zwischen den Apps wechseln. Im Log (von docker.schule.de) kommt genau das an, was soll.

Wo soll ich weiter suchen? Ich bin ratlos?

http/2 schuld!

Hi. Ich hab es mit Hilfe der Chrome-dev-tools doch noch herausgefunden:

  1. mein docker.meine-schule.de unterstützt HTTP/2,
  2. mein apache auf der cloud.meine-schule.de scheinbar nicht,
  3. ebenso unterstützt mein cloud.privat.de scheinbar kein HTTP/2

Sobald ich google-chrome --disable-http2 starte,funktioniert alles, wie es soll. Die neue Technik (zusammen mit der alten) ist also Auslöser!

Wenn man nämlich die HTTP-Request-Header anschaut, dann fällt auf, dass der Chrome gar kein “Host: cloud.meine-schule.de” Header mehr schickt, stattdessen so Pseudo HTTP/2-header: F12 im Chrome zeigt:

General:
 Request URL: https://cloud.meine-schule.de/index.php/apps/polls/ 
 Request Method: GET
 Status Code: 404 
 Remote Address: 141.10.xx.xx:443
 Referrer Policy: no-referrer

Response Headers:
 content-length: 19
 content-type: text/plain; charset=utf-8 
 date: Sat, 01 Dec 2018 11:19:20 GMT
 status: 404
 x-content-type-options: nosniff

Request Headers: 
 :authority: cloud.meine-schule.de
 :method: GET
 :path: /index.php/apps/polls/
 :scheme: https 
 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
 accept-encoding: gzip, deflate, br
 accept-language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
 cookie: xxx
 dnt: 1
 upgrade-insecure-requests: 1
 user-agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like  Gecko) Chrome/70.0.3538.102 Mobile Safari/537.36

gelöst ist mein Problem dadurch natürlich nicht… Ich kann ja nicht http/2 im Internet abschalten, oder weiß jemand wie das geht ? :slight_smile:

http/2 immer noch schuld

Heilige Maria,…

jetzt habe ich zum Spaß mal den Apache2 meiner Nextcloud von mpm_prefork auf mpm_event umgestellt nach dieser Anleitung hier: https://helgeklein.com/blog/2018/11/enabling-http-2-in-apache-on-ubuntu-18-04/

Sehr schön, jetzt sind beide webserver mit http2 enabled, allerdings geht es immernoch nicht.
Jetzt funktioniert die Cloud einwandfrei. Sobald ich auf die “externe Seite” gehe, bekomme ich im Frame ein 404, “The requested URL /ivo was not found on this server.” irrsinnigerweise mit der Meldung, dass “Apache/2.4.29 (Ubuntu) Server at docker.schule.de Port 443” dies gemeldet hätte. Tatsache ist, dass eine 404-Nachricht nur in der “cloud.schule.de” geloggt wird.

Langsam vermute ich, das hängt mit meinem SSL-Zertifikat zusammen, welches für beide Domänen als Alternative-Name eingetragen ist und geht deswegen so fundamental schief.
VG, Tobias

http/2, SAN und evtl. SNI dran schuld!

Last but not least:

  • habe den proxy-server traefik durch nginx ersetzt [1], der zwischen mir und em docker.schule.de stand, weil ich bei traefik http/2 nicht abschalten konnte.
  • ohne http/2 auf dem docker.schule.de funktionierte es nun, hurra!
  • Jetzt noch folgendes Experiment: neues Lets encrypt zertifikat für docker.schule.de alleinig erzeugt [2], während die cloud.schule.de das alte LE-Zertifikat behielt, welches mit SAN auf alle beide (und mehr) hostnamen ausgestellt war. Jetzt http/2 bei beiden domänen wieder eingeschalten: tut weiterhin.

Fazit: Wer http/2 verwendet (zufällig, oder absichtlich), der muss darauf achten, dass miteinander verknüpfte Domänen nicht im selben Zertifikat (SAN) stecken. Mit “Verknüpfen” ist hier ein cross-site-aufruf gemeint. Evtl. betrifft das auch Wildcard-Zertifikate?

Fazit 2: Jetzt hab ich einen nginx-proxy mit LE-Zertifikatserstellung und http/2 Beschleunigung für meine Cloud, auch nicht schlecht.

Fazit 3: Man sollte also darauf achten, ein LE-Zertifikat pro Domäne zu erstellen. Evtl. geht das nicht immer, dann sollte man doch einen zentralen reverse-proxy besitzen, der sich auch um individuelle LE-Zertifikate kümmert.

1 Like