rekario
Goto Top

Nginx als Reverse Proxy - Strict Transport Security nicht aktiv oder invalid

Hallo Administrator-Gemeinde,

bei einer Überprüfung meines vServers (CentOS mit Plesk als Verwaltungsoberfläche) ist mir aufgefallen, dass laut SSLLabs HSTS nicht aktiv ist (was mich mein A+ kostet :D)...

Apache2 ist als Webserver aktiv und nginx als Reverse-Proxy geschaltet.
Wenn ich nginx deaktiviere, bekomme ich mit Apache ein A+, HSTS ist aktiv, dort scheint also alles richtig konfiguriert zu sein.

Meine nginx.conf sieht so aus:
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";  
    ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off; # Requires nginx >= 1.5.9
    ssl_stapling on; # Requires nginx >= 1.3.7
    ssl_stapling_verify on; # Requires nginx => 1.3.7
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;  
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff; 

Woran könnte es liegen, dass HSTS angeblich nicht aktiv ist?

Was mir auch aufgefallen ist:
Auf dem Server sind mehrere Domains, teste ich die eine ist HSTS angeblich überhaupt nicht aktiv, teste ich die andere ist HSTS angeblich INVALID.
("Strict Transport Security (HSTS)	Invalid   Server provided more than one HSTS header ")  

Stundenlanges Googlen hat mich leider nicht weitergebracht, hat jemand vielleicht einen Lösungsansatz?

Vielen Dank im Voraus!

Grüße,
Marvin

Content-ID: 319895

Url: https://administrator.de/contentid/319895

Ausgedruckt am: 25.11.2024 um 05:11 Uhr

131381
131381 03.11.2016 aktualisiert um 14:12:57 Uhr
Goto Top
("Strict Transport Security (HSTS) Invalid Server provided more than one HSTS header ")
Poste mal einen Antwort-Header (aus dem Browser kopieren (F12 -> Netzwerkanalyse) beim Zugriff auf den Server, da scheinen zwei HSTS Header drin zu sein einer vom nginx und einer vom Apache.
Meine nginx.conf sieht so aus:
So bestimmt nicht, da fehlt ja einiges ...

Gruß d.
Rekario
Rekario 03.11.2016 um 14:43:20 Uhr
Goto Top
Danke für die schnelle Antwort!

Ich habe mehrere Domains überprüft und nur bei einer trifft das INVALID-Problem scheinbar zu:
admins.tech

Bei den anderen scheint der Header schlicht nicht aktiv zu sein:
admins.host
thisismindfuck.com


Zitat von @131381:
Meine nginx.conf sieht so aus:
So bestimmt nicht, da fehlt ja einiges ...

Gruß d.
Ja natürlich nicht, mein Fehler... Das war nur der Ausschnitt der SSL-Konfiguration, hier die ganze:
#user  nginx;
worker_processes  1;

#error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

#pid        /var/run/nginx.pid;

include /etc/nginx/modules.conf.d/*.conf;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' 
    #                  '$status $body_bytes_sent "$http_referer" ' 
    #                  '"$http_user_agent" "$http_x_forwarded_for"'; 

    #access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    #tcp_nodelay        on;

    #gzip  on;
    #gzip_disable "MSIE [1-6]\.(?!.*SV1)"; 

    server_tokens off;

    # SSL settings
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";  
    ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off; # Requires nginx >= 1.5.9
    ssl_stapling on; # Requires nginx >= 1.3.7
    ssl_stapling_verify on; # Requires nginx => 1.3.7
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # HSTS settings
    add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload' always;  
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;                
    
    include /etc/nginx/conf.d/*.conf;
}

# override global parameters e.g. worker_rlimit_nofile
include /etc/nginx/*global_params;
Dani
Dani 03.11.2016 um 18:19:24 Uhr
Goto Top
Moin Marvin,
Stundenlanges Googlen hat mich leider nicht weitergebracht, hat jemand vielleicht einen Lösungsansatz?
ist es möglich, dass die Testseite vom Apache2 ebenfalls Parameter erhält und somit zu dem Fehler kommt. Wie sieht die Konfigurationsabschnitt im Nginx aus, welcher auf den Apache verweist?

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
Sieht gut aus.


Gruß,
Dani
Rekario
Rekario 04.11.2016 aktualisiert um 10:41:26 Uhr
Goto Top
Hey Dani,

danke für die Antwort.

Ich habe mittlerweile herausgefunden, das es scheinbar an den Plesk-Standardseiten liegt.
Wenn ich diese auf einen HSTS-Header prüfe, ist keiner vorhanden, lade ich jetzt bspw. eine leere, eigene Seite hoch, wird der Header mit ausgegeben.

Die große Preisfrage ist also jetzt, warum die Standard-Plesk-Seiten kein HSTS durchlassen...?

Hier mal als kleines Beispiel, HSTS auf der Standard-Seite nicht aktiv:
https://ssxc.de/index.html
2016-11-04 10_38_09-domain default page – opera


Und mit der leeren Seite ohne Inhalt:
https://ssxc.de/page2.html
2016-11-04 10_37_22-https___ssxc.de_page2.html – opera

Grüße,
Marvin
131381
131381 04.11.2016 um 10:45:07 Uhr
Goto Top
Rekario
Rekario 04.11.2016 aktualisiert um 11:29:17 Uhr
Goto Top
Hey auch dir danke für deinen Beitrag.

Ich möchte dir jetzt nicht zu nahe treten aber ich frage mich ob du dir hier alles überhaupt komplett durchgelesen hast?

Auf die Seite bin ich bei meiner Google-Suche auch schon gestoßen, jedoch ist damit mein Problem nicht zu lösen.
Der Apache2 scheint richtig konfiguriert, deaktiviere ich nginx, welcher als Reverse-Proxy geschaltet ist, so ist HSTS selbst auf den Plesk-Standardseiten aktiv.

Ist nginx vorgeschaltet wird HSTS nicht mehr erkannt - zumindest nicht überall.
Auf den Plesk-Standardseiten wie in meinem vorigen Beitrag erwähnt ist HSTS nicht aktiv, auf einer leeren Seite jedoch funktioniert es komischerweise ohne Probleme.

Auch HSTS mal auf den nginx oder auf den apache zu konfigurieren hat keinen Erfolg gebracht.

Grüße
131381
131381 04.11.2016 um 11:20:08 Uhr
Goto Top
Ich teste das gleich mal hier.
131381
131381 04.11.2016 aktualisiert um 11:50:36 Uhr
Goto Top
Also hier geht das problemlos mit plesk. Unterschied zu deiner Config ist das ich hier die Header und SSL Configs in die Server-Section der nginx Config gesteckt habe.
Muss also an deiner Konfiguration liegen. Die wir hier ja immer noch nicht komplett sehen können.
Rekario
Rekario 04.11.2016 um 13:16:42 Uhr
Goto Top
Hallo mikrotik,

bei mir sieht es aktuell so aus:

Vollständige httpd.conf:
http://pastebin.com/0t3iMa5J

Vollständige nginx.conf:
http://pastebin.com/zmhwJqhA

woanders bastel ich eigentlich gar nicht rum, brauchst du noch etwas?
131381
131381 04.11.2016 um 17:05:14 Uhr
Goto Top
Ich seh nirgendwo einen Proxypass, geschweige denn eine "Server" Direktive ?
Dkuehlborn
Dkuehlborn 05.11.2016 um 00:16:40 Uhr
Goto Top
Hallo Rikaroa,

ich habe ein ähnliches Thema am laufen. Ich schicke hier mal den Link:

NGINX Reverse Proxy mit Exchange 2016 und Outlook 2016

Kannst Du mal da rein schauen. Vielleicht hast Du hierzu eine Idee.

VG Dieter
131381
131381 05.11.2016 um 14:35:09 Uhr
Goto Top
Zusätzliche Frage:
Nutzt du den integrierten nginx auf dem Plesk-Server oder einen separaten allein stehenden nginx?
Dkuehlborn
Dkuehlborn 05.11.2016 um 23:05:20 Uhr
Goto Top
Hallo Mikrotik,

Der nginx läuft auf einem separatem Ubuntu-Server in meinem Netzwerk. Der Server steht in der DMZ.

VG Dieter
131381
131381 06.11.2016 aktualisiert um 07:48:49 Uhr
Goto Top
Zitat von @Dkuehlborn:
Der nginx läuft auf einem separatem Ubuntu-Server in meinem Netzwerk. Der Server steht in der DMZ.

Du warst nicht gemeint, das ist der Thread von @Rekario nicht deiner, also sollten wir hier nicht beides vermischen. Danke!

Gruß
Dkuehlborn
Dkuehlborn 06.11.2016 um 10:48:34 Uhr
Goto Top
OK,

ich bin wieder draußen.