Gemischtes SSL seit Upgrade

Ich hatte (hatte!) eine funktionierende Reverse-Proxy-Installation.
Alles wurde wie vorgesehen über HTTPS bereitgestellt.

Ich bin ein paar Versionen hochgesprungen und habe das Upgrade des Todes erlebt, bei dem der Bildschirm leer bleibt, wie hier berichtet: Upgrade discourse doesn't work - #6 by Andrew_Bond

Ich habe mein Discourse manuell mit ./launcher rebuild app aktualisiert und bin auf Build 2.9.0.beta14 (0da79561c3)

Ich habe festgestellt, dass beim Versuch, einen Entwurf zu speichern, oder bei den meisten anderen Aktionen wie Posten oder Anmelden, ein 403 Forbidden-Fehler auftrat (über den Chrome-Inspektor).

Mein Logo funktioniert jedoch in der oberen linken Ecke der Website.

Wenn ich das Force-HTTPS-Element über die Befehlszeile manuell deaktiviere, schlägt das Laden des Logos fehl, da ich mich im gemischten Modus befinde, in dem das HTTP-Element blockiert wird. Alle anderen Elemente der Website funktionieren weiterhin.

Ich habe keine Änderungen am Reverse-Nginx vorgenommen. Ich habe versucht, die App erneut zu erstellen, ohne Erfolg.

Ich vermute, dass sich etwas an der Funktionsweise von Discourse seit den Versionen, von denen ich aktualisiert habe, geändert hat. Dies ist die letzte Build-ID, die ich finden kann, die mit der funktionierenden Force-HTTPS-Option funktionierte: e9f53dbe0028ca7a5d8926711a1944765d34347

Jetzt abgefangene Fehler:

2 „Gefällt mir“

Hallo Andrew – danke für den Bericht. Dieses Problem betrifft speziell Reverse-Proxy-Konfigurationen, bei denen mehrere X-Forwarded-Proto-Header zur Anfrage hinzugefügt werden, bevor sie den Anwendung-Container erreicht.

Ich habe gerade einen Fix in main zusammengeführt – er sollte in etwa 20 Minuten in tests-passed sein.

Sobald er in tests-passed erscheint, müssen Sie einen vollständigen Rebuild durchführen (Nginx-Konfigurationsänderungen werden bei UI-basierten Upgrades nicht angewendet).

8 „Gefällt mir“

Vielen Dank für die schnelle Antwort und die schnelle Fehlerbehebung!

1 „Gefällt mir“

Also, Update.

Ich habe die App mit ./launcher rebuild app neu erstellt.

Keine Probleme dort.

Die Fehler sind verschwunden, wenn ich HTTPS erzwinge, mit Ausnahme von

Ich habe keine 403-Zugriffsverweigerung mehr, aber zum Beispiel beim Versuch, mich anzumelden, werde ich mit dem Anmeldefeld aufgefordert, das die Daten zu akzeptieren scheint, und dann wieder mit einem nicht angemeldeten Benutzer konfrontiert.

Der gleiche Fehler wie oben tritt beim Neuladen der Seite auf.

Ich habe das Erzwingen von HTTPS erneut deaktiviert und die Website funktioniert - zur Klarheit werden jedoch immer noch keine Logos angeboten.

1 „Gefällt mir“

Dieser Fehler ist unerheblich – er wird durch Cloudflare verursacht, das Analytik-Skripte injiziert (und Discores Standard-Content-Security-Policy blockiert die Injektion)

Können Sie mehr über die Proxys erzählen, die Sie zwischen Benutzern und Discourse haben? Ich nehme an, Cloudflare ist die erste Schicht? Was befindet sich sonst noch zwischen Cloudflare und dem Discourse-App-Container?

3 „Gefällt mir“

Stimmt genau. Cloudflare ist der erste Treffer, dann haben wir einen Nginx-Reverse-Proxy von Centminmod, der auf Docker läuft.

Können Sie die Konfiguration, die Sie dafür haben, teilen? Insbesondere fügt es einen zusätzlichen X-Forwarded-Proto-Header hinzu?

Gerne!

# Centmin Mod Getting Started Guide
# muss gelesen werden https://centminmod.com/getstarted.html
# für HTTP/2 SSL-Einrichtung
# lesen Sie https://centminmod.com/nginx_configure_https_ssl_spdy.html

# Weiterleitung von www zu non-www erzwungene SSL
# auskommentieren, Datei speichern und Nginx neu starten, um zu aktivieren
# wenn Sie unsicher sind, verwenden Sie return 302, bevor Sie return 301 verwenden
 server {
       listen   80;
       server_name exiges.com www.exiges.com;
       return 302 https://$server_name$request_uri;
 }

server {
  listen 443 ssl http2;
  server_name exiges.com www.exiges.com;

  ssl_dhparam /usr/local/nginx/conf/ssl/exiges.com/dhparam.pem;
  ssl_certificate      /usr/local/nginx/conf/ssl/exiges.com/exiges.com.crt;
  ssl_certificate_key  /usr/local/nginx/conf/ssl/exiges.com/exiges.com.key;
  include /usr/local/nginx/conf/ssl_include.conf;

  # Cloudflare authentifizierter Origin-Pull-Zertifikat community.centminmod.com/threads/13847/
  #ssl_client_certificate /usr/local/nginx/conf/ssl/cloudflare/exiges.com/origin.crt;
  #ssl_verify_client on;



  # Mozilla empfohlen
  ssl_ciphers TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
  ssl_prefer_server_ciphers   on;
  #add_header Alternate-Protocol  443:npn-spdy/3;

  # vor der Aktivierung der HSTS-Zeile unten lesen Sie centminmod.com/nginx_domain_dns_setup.html#hsts
  #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
  #add_header X-Frame-Options SAMEORIGIN;
  add_header X-Xss-Protection "1; mode=block" always;
  add_header X-Content-Type-Options "nosniff" always;
  #add_header Referrer-Policy "strict-origin-when-cross-origin";
  #add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
  #spdy_headers_comp 5;
  ssl_buffer_size 1369;
  ssl_session_tickets on;

  # OCSP-Stapling aktivieren
  #resolver 8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 valid=10m;
  #resolver_timeout 10s;
  #ssl_stapling on;
  #ssl_stapling_verify on;
  #ssl_trusted_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com-trusted.crt;

# ngx_pagespeed & ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

  # limit_conn limit_per_ip 16;
  # ssi  on;

  access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
  error_log /home/nginx/domains/exiges.com/log/error.log;

  include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
  root /home/nginx/domains/exiges.com/public;
  # cloudflare.conf include auskommentieren, wenn Cloudflare verwendet wird für
  # Server und/oder VHost-Site
  #include /usr/local/nginx/conf/cloudflare.conf;
  include /usr/local/nginx/conf/503include-main.conf;


location / {
       proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
       proxy_set_header        X-Forwarded-Proto https;
       proxy_http_version 1.1;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Real-IP $remote_addr;
   }

  include /usr/local/nginx/conf/php.conf;

  #include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
  #include /usr/local/nginx/conf/pre-staticfiles-global.conf;
  #include /usr/local/nginx/conf/staticfiles.conf;
  #include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  #include /usr/local/nginx/conf/vts_server.conf;
}

Ich sehe den Verweis auf den x-proto-Header…

   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1 „Gefällt mir“

Wie stellt Cloudflare eine Verbindung zu Ihrem Ursprung her? Verwendet es SSL/TLS? Idealerweise sollten Sie hier „Full“ oder „Full (Strict)“ verwenden.

Flexibel. Ich war faul und habe keine Serverzertifikate verwendet.

Ich würde Ihnen empfehlen, sich mit einer der sicheren Cloudflare SSL-Optionen einzurichten. „Flexibel“ bedeutet, dass der Datenverkehr zwischen Cloudflare und Ihrem Server nicht verschlüsselt ist.

Wenn ich mir die Konfiguration noch einmal ansehe:

Es sieht so aus, als würden Sie den Header auf https setzen und ihn dann zwei Zeilen darunter erneut auf $scheme setzen (was aufgrund Ihrer Cloudflare-Konfiguration http sein wird). Wenn Sie den zweiten entfernen, wird Discourse mitgeteilt, dass die Verbindung sicher ist (obwohl sie es nicht ist).

4 „Gefällt mir“

Interessant.

Was ich jedoch seltsam finde, ist, dass es funktioniert hat.

Ich vermute (aber habe es noch nicht zu 100 % bestätigt), dass der Discourse-Container NGINX zuvor auf den ‘ersten’ X-Forwarded-Proto-Header geschaut hat. Jetzt schaut er auf den ‘letzten’ X-Forwarded-Proto-Header, was wohl sicherer ist, da er vom ‘aktuellsten’ Proxy stammt, der die meisten Informationen über die eingehende Anfrage hat.

Vor dem Update hat er also auf den von Cloudflare eingeführten X-Forwarded-Proto-Header (https) geschaut. Jetzt schaut er auf den X-Forwarded-Proto-Header, der von Ihrer ‘centminmod’-Reverse-Proxy-Konfiguration eingeführt wurde (http).

3 „Gefällt mir“

Ich habe proxy_set_header X-Forwarded-Proto $scheme; aus der Konfiguration entfernt, und die Konfiguration funktioniert jetzt.

Für alle, die das hier lesen und eine Centminmod-Konfiguration vornehmen: Es gibt ZWEI Konfigurationen für Nginx.

Eine für HTTP und eine für HTTPS.

Ich habe das zweite proxy_set_header X-Forwarded-Proto $scheme; aus der HTTP-Seite entfernt, und jetzt funktioniert alles wie erwartet.

Das ist meine exiges.com.conf

# Centmin Mod Getting Started Guide
# muss gelesen werden https://centminmod.com/getstarted.html

# Weiterleitung von non-www zu www
# auskommentieren, Datei speichern und Nginx neu starten, um zu aktivieren
# wenn unsicher, return 302 vor return 301 verwenden
#server {
#            listen   80;
#            server_name exiges.com;
#            return 301 $scheme://www.exiges.com$request_uri;
#       }

server {
  server_name exiges.com www.exiges.com;
#return 301 https://exiges.com.com$request_uri;
#return 301 $scheme://www.exiges.com$request_uri;

# ngx_pagespeed & ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

  #add_header X-Frame-Options SAMEORIGIN;
  add_header X-Xss-Protection "1; mode=block" always;
  add_header X-Content-Type-Options "nosniff" always;
  #add_header Referrer-Policy "strict-origin-when-cross-origin";
  #add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";

  # limit_conn limit_per_ip 16;
  # ssi  on;

  access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
  error_log /home/nginx/domains/exiges.com/log/error.log;

  include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
  root /home/nginx/domains/exiges.com/public;
  # cloudflare.conf include auskommentieren, wenn cloudflare für
  # Server und/oder vhost-Seite verwendet wird
  #include /usr/local/nginx/conf/cloudflare.conf;
  include /usr/local/nginx/conf/503include-main.conf;

  # Zugriff auf ./Verzeichnisse und Dateien verhindern
  #location ~ (?:^|/)\. {
  # deny all;
  #}

  location / {
 proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
            proxy_set_header        X-Forwarded-Proto https;
                #proxy_set_header Host $http_host;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
  #include /usr/local/nginx/conf/503include-only.conf;

# gängige Exploits, SQL-Injections etc. blockieren
#include /usr/local/nginx/conf/block.conf;

  # Verzeichnislisten aktivieren, wenn keine Indexdatei gefunden wird
  #autoindex  on;

  # Zeigt Dateilistenzeiten als lokale Zeit an
  #autoindex_localtime on;

  # Wordpress Permalinks Beispiel
  #try_files $uri $uri/ /index.php?q=$uri&$args;

  }

  include /usr/local/nginx/conf/php.conf;

  #include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
  #include /usr/local/nginx/conf/pre-staticfiles-global.conf;
  #include /usr/local/nginx/conf/staticfiles.conf;
  #include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  #include /usr/local/nginx/conf/vts_server.conf;
}

Das ist meine exiges.com.conf.ssl

# Centmin Mod Getting Started Guide
# muss gelesen werden https://centminmod.com/getstarted.html
# Für HTTP/2 SSL-Setup
# lesen https://centminmod.com/nginx_configure_https_ssl_spdy.html

# Weiterleitung von www zu non-www erzwungenes SSL
# auskommentieren, Datei speichern und Nginx neu starten, um zu aktivieren
# wenn unsicher, return 302 vor return 301 verwenden
 server {
       listen   80;
       server_name exiges.com www.exiges.com;
       return 302 https://$server_name$request_uri;
 }

server {
  listen 443 ssl http2;
  server_name exiges.com www.exiges.com;

  ssl_dhparam /usr/local/nginx/conf/ssl/exiges.com/dhparam.pem;
  ssl_certificate      /usr/local/nginx/conf/ssl/exiges.com/exiges.com.crt;
  ssl_certificate_key  /usr/local/nginx/conf/ssl/exiges.com/exiges.com.key;
  include /usr/local/nginx/conf/ssl_include.conf;

  # cloudflare authentifizierter Origin-Pull-Zertifikat community.centminmod.com/threads/13847/
  #ssl_client_certificate /usr/local/nginx/conf/ssl/cloudflare/exiges.com/origin.crt;
  #ssl_verify_client on;



  # mozilla empfohlen
  ssl_ciphers TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
  ssl_prefer_server_ciphers   on;
  #add_header Alternate-Protocol  443:npn-spdy/3;

  # vor der Aktivierung von HSTS lesen Sie die Zeile unten centminmod.com/nginx_domain_dns_setup.html#hsts
  #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
  #add_header X-Frame-Options SAMEORIGIN;
  add_header X-Xss-Protection "1; mode=block" always;
  add_header X-Content-Type-Options "nosniff" always;
  #add_header Referrer-Policy "strict-origin-when-cross-origin";
  #add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
  #spdy_headers_comp 5;
  ssl_buffer_size 1369;
  ssl_session_tickets on;

  # OCSP-Stapling aktivieren
  #resolver 8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 valid=10m;
  #resolver_timeout 10s;
  #ssl_stapling on;
  #ssl_stapling_verify on;
  #ssl_trusted_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com-trusted.crt;

# ngx_pagespeed & ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

  # limit_conn limit_per_ip 16;
  # ssi  on;

  access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
  error_log /home/nginx/domains/exiges.com/log/error.log;

  include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
  root /home/nginx/domains/exiges.com/public;
  # cloudflare.conf include auskommentieren, wenn cloudflare für
  # Server und/oder vhost-Seite verwendet wird
  include /usr/local/nginx/conf/cloudflare.conf;
  include /usr/local/nginx/conf/503include-main.conf;


location / {
       proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
       proxy_set_header        X-Forwarded-Proto https;
       proxy_http_version 1.1;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Real-IP $remote_addr;
   }

  include /usr/local/nginx/conf/php.conf;

  #include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
  #include /usr/local/nginx/conf/pre-staticfiles-global.conf;
  #include /usr/local/nginx/conf/staticfiles.conf;
  #include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  #include /usr/local/nginx/conf/vts_server.conf;
}

@david deine Zeit wird sehr geschätzt, um dieses Problem zu lösen.

Was es wert ist, ich bin jetzt voll, nicht flexibel mit den Zertifikaten.

1 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.