nginx Reverse Proxy nutzt Zertifikat nicht

kamanu

Lt. Commander
Registriert
März 2012
Beiträge
1.659
Moinsen,

ich nutze einen nginx Reverse Proxy um diverse Dienste mit einem Let's Encrypt Cert zu versehen und bequemer zu erreichen. Das klappt soweit auch ganz gut. Bis auf eine Sache:
Wenn ich auf SoftwareA.meinedomain.de zugreife, zeigt mir der Browser das Zertifikat des Webservers der Software an - nicht das von nginx. Bei SoftwareB wiederum funktioniert alles wie gewünscht. Es hat auch witzigerweise mal für SoftwareA funktioniert. Keine Ahnung, wieso es das nicht mehr tut. Hat jemand ne Idee?

Code:
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
   listen 80;
   server_name *.meinedomain.de;
   return 301 https://$host$request_uri;
}

# Config Software A
server {
   listen 443 ssl http2;
    
   server_name softwareA.meineDomain.de;
 
   include /etc/nginx/ssl/ssl.conf;
 
   location / {
        proxy_pass https://ipA:8443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}

# Config Software B
server {
   listen 443 ssl http2;

   server_name softwareB.meineDomain.de;

   include /etc/nginx/ssl/ssl.conf;

   location / {
        proxy_pass https://ipB:443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}
 
Das ist ja nur die Reverse-Proxy Config, der Fehler liegt sicher in der /etc/nginx/ssl/ssl.conf

Btw: Bin ich dumm oder müsste der nginx nicht hier nen Fehler werfen? Du hast ja Port 443 2 mal konfiguriert
 
Zuletzt bearbeitet:
DEADBEEF schrieb:
Du hast ja Port 443 2 mal konfiguriert
Nö, der server_name macht die Config eindeutig.

Der Inhalt der ssl.conf wäre noch schön. Bist du denn sicher, dass du SoftwareA auch wirklich über den nginx ansprichst und nicht irgendwie direkt? Oder fehlt in dem Satz ein "B" nach Software?
Zum Prüfen dürfte auch ein Blick ins Accesslog helfen, ob du die jeweiligen Anfragen da überhaupt siehst. Wenn nein, kommen die nicht beim nginx an und er kann das Zertifikat nicht zeigen.

Hast du denn ein Zertifikat für beide Hostnamen ausgestellt oder je eins pro Hostnamen? Bei letzterem müsstest du natürlich auch die Zertifikate getrennt pro Serverblock einbinden.
 
  • Gefällt mir
Reaktionen: kamanu und DEADBEEF
DEADBEEF schrieb:
der Fehler liegt sicher in der /etc/nginx/ssl/ssl.conf
selbst das glaube ich nicht, darin liegt in der regel nur allgemeine SSL Config, wie timeouts, sessionconfigs usw.. Certssollten da nicht hin, da das sonst sehr nervig zu maintainen ist, wenn certs fuer 20 Dienste aus einer Datei kommen.

Cerbot selbst schreibt je Vhost eigentlich sowas direkt in die config:
ssl_certificate /etc/letsencrypt/live/sub.dom.tld/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/sub.dom.tld/privkey.pem; # managed by Certbot

Schau mal ob solche Dateien an einem zum Beispiel hier analogen ort liegen und pack die zeilen angepasst in 35 / 19
 
  • Gefällt mir
Reaktionen: kamanu und DEADBEEF
KillerCow schrieb:
Hast du denn ein Zertifikat für beide Hostnamen ausgestellt oder je eins pro Hostnamen? Bei letzterem müsstest du natürlich auch die Zertifikate getrennt pro Serverblock einbinden.
Hätte ich definitiv erwähnen sollen, ist ein Wildcard-Cert 😅
KillerCow schrieb:
Bist du denn sicher, dass du SoftwareA auch wirklich über den nginx ansprichst und nicht irgendwie direkt? Oder fehlt in dem Satz ein "B" nach Software?
Ziemlich. Weil der DNS-Name auf den nginx verweist 😅
KillerCow schrieb:
Der Inhalt der ssl.conf wäre noch schön.
Code:
ssl_certificate      /etc/letsencrypt/live/meineDomain.de/fullchain.pem;
ssl_certificate_key  /etc/letsencrypt/live/meineDomain.de/privkey.pem;

# Improve HTTPS performance with session resumption
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;

# Enable server-side protection against BEAST attacks
ssl_prefer_server_ciphers on;
#ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES;


# Disable SSLv3
ssl_protocols TLSv1.2 TLSv1.3;

# Diffie-Hellman parameter for DHE ciphersuites
# $ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

# Enable HSTS (https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security)
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";

# Enable OCSP stapling (http://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/meineDomain.de/fullchain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;


Ich glaub ich hab das Problem gefunden. Die DNS-Server sind 2 DCs. Aus irgendwelchen Gründen, haben die diesen Eintrag nicht untereinander gesynct. Einer hat den nginx drin, der andere den direkten Dienst (was auch schon iwie keinen Sinn ergibt). Nachdem das behoben ist, läuft es jetzt auch wieder.

Vielen Dank an euch, dass ihr mich auf den richtigen Weg gebracht habt :D
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: madmax2010 und KillerCow
Zurück
Oben