Die Anwendung raum]für[raum arbeitet mit einer BaseURL. Dies bedeutet für die Proxykonfiguration das interne- und externe-Zugriffe über denselben FQDN erfolgen müssen (im nachfolgenden Beispiel raumbuchung.domain.tld).
Die Site des Anwendungsservers (im Beispiel IIS mit SSO via Kerberos (NTLM wird nicht unterstützt!)) muss via IP und Port erreichbar sein. Der NGINX-Proxy unterstützt kein Virtual-Hosting (SNI)1.


Allgemeine Voraussetzungen:

  • Das Computerkonto des Webservers enthält im AD unter Attributen den FQDN der Anwendung als HTTP-ServicePrincipal 2
  • Der Authentifizierungsanbieter des IIS-Webservers (Verzeichnis SSO) ist auf "Negotiate:Kerberos" eingerichtet 3
  • Firewall Protokoll-Regel
    Port 443 Kommunikation zwischen Proxy-Server (DMZ) und Anwendungsserver (internes Server-Netzwerk) muss erlaubt sein
  • Proxy-Server Zertifikat
    öffentliches, vertrauenswürdiges SSL-Zertifikat und Intermediate-Zertifikat sowie Schlüssel (.cert und .key) für FQDN (raumbuchung.domain.tld) muss auf dem Proxy-Server vorhanden sein.


Die Voraussetzungen für den öffentlichen (Internet) Zugriff sind:

  • DNS A-Record
    Routing des FQDN (raumbuchung.domain.tld) zu einer freien, öffentlich erreichbaren IP des Unternehmens
  • Firewall SNAT-Regel 
    Anfragen auf der IP und Port 443 werden in der Firewall an den Proxy-Server innerhalb der DMZ weitergeleitet

Die Voraussetzungen für den internen (Intranet/VPN) Zugriff sind:

  • DNS A-Record
    Routing des FQDN (raumbuchung.domain.tld) zur internen IP des Proxy-Servers innerhalb der DMZ


Die Voraussetzungen für den raum]für[raum Anwendungsserver sind:

  • Microsoft IIS
    Die Bindung der raum]für[raum IIS Site MUSS beim nginX Reverse Proxy
    • OHNE HTTP Host Header Eintrag1 und
    • OHNE SNI1 konfiguriert werden


NGINX-Konfiguration / Stream

upstream http_request {
            # NGINX-Proxy unterstützt kein VirtualHosting
            # die IIS Site muss ohne SNI und Hostnamen konfiguriert sein und via IP und Port erreichbar sein!
            server P-DES-IIS-SERVERS:443;
}

server {
            listen 443 ssl http2;
            server_name raumbuchung.domain.tld;

           # Die Angabe der Client_Max_Body_Size ist für Uploads innerhalb von raum]für[raum erforderlich
            client_max_body_size 512M;

            ssl_certificate /etc/ssl/certs/raumbuchung.domain.tld.crt;
            ssl_certificate_key /etc/ssl/certs/raumbuchung.domain.tld.key;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

            # Server-Logfiles
            # -----------------------------------------------------------------
            # Access-Log:
            access_log /var/log/nginx/access.log;
            # Error-Log / Produktiv-Betrieb
            #error_log /var/log/nginx/error.log error;
            # Error-Log Debugging-Betrieb
            error_log /var/log/nginx/error.log debug;    

            location / {
                      proxy_pass https://http_request;
                      proxy_buffering off;
                      proxy_http_version 1.1;
                      proxy_request_buffering off;
                      proxy_set_header Connection "Keep-Alive";
                      proxy_set_header Host raumbuchung.domain.tld;
                      proxy_set_header X-Real-IP $remote_addr;
                      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                      proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host $host;
            }
}

korrektes Verhalten:

https://raumbuchung.domain.tld



Funktionalität

Bemerkung

SSO via Browser

Intranet (Firmennetz/VPN)

(Haken)


SSO via Browser

Internet

(Fehler)

Da in diesem Fall keine Verbindung des Clients zum DomainController besteht, kann kein Kerberos-Ticket erstellt/zugewiesen werden.4

Webformular via Browser

Intranet (Firmennetz/VPN)

(Haken)


Webformular via Browser

Internet

(Haken)


APP (iOS/Android)

Intranet (Firmennetz/VPN)

(Haken)


APP (iOS/Android)

Internet

(Haken)



NGINX-Konfiguration / ProxyPass

server {
            listen 443 ssl http2;
            server_name raumbuchung.domain.tld;

            # Die Angabe der Client_Max_Body_Size ist für Uploads innerhalb von raum]für[raum erforderlich
            client_max_body_size 512M;

            # Bei dem Zertifikat muss es sich um eine PEM-Datei handeln (bestehend aus Zertifikat und Intermediate-Zertifikat)
            ssl_certificate /etc/ssl/certs/raumbuchung.domain.tld.crt;
            ssl_certificate_key /etc/ssl/certs/raumbuchung.domain.tld.key;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

            # Server-Logfiles
            # -----------------------------------------------------------------
            # Access-Log:
            access_log /var/log/nginx/access.log;
            # Error-Log / Produktiv-Betrieb
            #error_log /var/log/nginx/error.log error;
            # Error-Log Debugging-Betrieb
            error_log /var/log/nginx/error.log debug;            

            
            location / {
                      # NGINX-Proxy unterstützt kein VirtualHosting
                      # die IIS Site muss ohne SNI und Hostnamen konfiguriert sein und via IP und Port erreichbar sein!
                      proxy_pass https://IP-DES-IIS-SERVERS;
                      proxy_ssl_verify off;
                      proxy_buffering off;
                      proxy_http_version 1.1;
                      proxy_request_buffering off;
                      proxy_set_header Connection "Keep-Alive";
                      proxy_set_header Host raumbuchung.domain.tld;
                      proxy_set_header X-Real-IP $remote_addr;
                      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                      proxy_set_header X-Forwarded-Proto $scheme;
                      proxy_set_header X-Forwarded-Host $host;
            }
}


korrektes Verhalten:

https://raumbuchung.domain.tld



Funktionalität

Bemerkung

SSO via Browser

Intranet (Firmennetz/VPN)

(Haken)


SSO via Browser

Internet

(Fehler)

Da in diesem Fall keine Verbindung des Clients zum DomainController besteht, kann kein Kerberos-Ticket erstellt/zugewiesen werden.4

Webformular via Browser

Intranet (Firmennetz/VPN)

(Haken)


Webformular via Browser

Internet

(Haken)


APP (iOS/Android)

Intranet (Firmennetz/VPN)

(Haken)


APP (iOS/Android)

Internet

(Haken)


Anmerkungen/Detailbeschreibungen

Anmerkung

Beschreibung

Screenshot

1

Der NGINX-Proxy unterstützt kein Virtual-Hosting (SNI)

Das Computerkonto des Webservers enthält im AD unter Attributen den FQDN der Anwendung als HTTP-ServicePrincipal

3

Der Authentifizierungsanbieter des IIS-Webservers (Verzeichnis SSO) ist auf "Negotiate:Kerberos" eingerichtet

ggf. muss hierfür der "UseKernelMode" auf "false" gestellt werden.

4

Kerberos Authentifizierungsweg

Kerberos Authentication Flow

Anmerkung
Konfigurationsänderungen an den Proxy-Einstellungen erfordern einen Neustart des IIS-Webservers. Restart von Application-Pool und/oder Site führen u.U. zu Fehlverhalten (Kerberos-Ticket-Validierung)
Tickets am Client können mittels "klist" angesehen und via "klist purge" gelöscht werden.