Proxy Apache
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 FQDN (im nachfolgenden Beispiel raumbuchung.domain.int) und Port erreichbar sein.
Allgemeine Voraussetzungen:
- Das Computerkonto des Webservers enthält im AD unter Attributen den FQDN der Anwendung als HTTP-ServicePrincipal 1
- Der Authentifizierungsanbieter des IIS-Webservers (Verzeichnis SSO) ist auf "Negotiate:Kerberos" eingerichtet 2
- 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 kann beim Apache Reverse Proxy (im Gegensatz zum nginX Reverse Proxy)- mit HTTP Host Header Eintrag und
- mit SNI konfiguriert werden
Apache-Konfiguration
<VirtualHost *:443>
ServerName raumbuchung.domain.tld
ServerAdmin it@domain.tld
# Server-Logfiles
# -----------------------------------------------------------------
# Access-Log:
CustomLog /var/log/httpd/access_raumbuchung.domain.tld.log combined
# Error-Log
ErrorLog /var/log/httpd/error_raumbuchung.domain.tld.log
# Produktiv-Betrieb
#LogLevel error
# Debugging-Betrieb
LogLevel warn
SSLEngine on
SSLProtocol -all +TLSv1.2
SSLHonorCipherOrder on
SSLCipherSuite PROFILE=SYSTEM
SSLCertificateFile /etc/pki/tls/certs/raumbuchung.domain.tld.crt
SSLCertificateChainFile /etc/pki/tls/certs/raumbuchung.domain.tld.intermediate.crt
SSLCertificateKeyFile /etc/pki/tls/private/raumbuchung.domain.tld.key
<IfModule mod_proxy.c>
ProxyPass / https://raumbuchung.domain.int/
ProxyPassReverse / https://raumbuchung.domain.int/
RequestHeader set Front-End-Https "On"
ProxyRequests off
# IIS spezifisch bezgl. VirtualHosting (SNI)
ProxyPreserveHost off
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLProxyCipherSuite PROFILE=SYSTEM
</IfModule>
</VirtualHost>
korrektes Verhalten:
https://raumbuchung.domain.tld | |||
Funktionalität | Bemerkung | ||
SSO via Browser | Intranet (Firmennetz/VPN) | ||
SSO via Browser | Internet | Da in diesem Fall keine Verbindung des Clients zum DomainController besteht, kann kein Kerberos-Ticket erstellt/zugewiesen werden.3 | |
Webformular via Browser | Intranet (Firmennetz/VPN) | ||
Webformular via Browser | Internet | ||
APP (iOS/Android) | Intranet (Firmennetz/VPN) | ||
APP (iOS/Android) | Internet |
Anmerkungen/Detailbeschreibungen
Anmerkung | Beschreibung | Screenshot |
---|---|---|
1 | 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 | |
ggf. muss hierfür der "UseKernelMode" auf "false" gestellt werden. | ||
3 | Kerberos Authentifizierungsweg |
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.