SSL-Terminierung
Ab Version 7 erfordert das Passwork-Frontend die obligatorische Verwendung von HTTPS, daher enthalten alle Standardinstallationen und -konfigurationen die entsprechenden Einstellungen. Dennoch wissen wir, dass SSL-Terminierung in vielen Infrastrukturen verwendet wird.
Achtung!
Diese Einstellungen sind in folgenden Fällen erforderlich:
- SSL-Terminierung ist in der Infrastruktur obligatorisch;
- Eine Passwork-Instanz wird in einer kontrollierten Zone verwendet.
Nach der Konfiguration der SSL-Terminierung empfehlen wir auch die Einrichtung von Trusted Proxies.
Passwork Docker Build
Beispiel
server {
listen 80;
server_name _;
root /server/www/public;
index index.html;
charset utf-8;
client_max_body_size 100M;
fastcgi_read_timeout 1800;
location ~ ^/.well-known/acme-challenge/ {
access_log /server/log/nginx/certbot.log;
root /var/www/certbot;
}
location = /favicon.ico {
access_log off; log_not_found off;
}
location = /robots.txt {
access_log off; log_not_found off;
}
location ~ /\. {
deny all;
}
location / {
include /server/nginx/extra/security-headers.conf;
include /server/nginx/extra/cors.conf;
if ($request_method = 'OPTIONS') {
return 204;
}
include /server/nginx/extra/csp.conf;
try_files $uri /index.html;
}
location ~ ^/api(/|$) {
include /server/nginx/extra/security-headers.conf;
include /server/nginx/extra/cors.conf;
if ($request_method = 'OPTIONS') {
return 204;
}
fastcgi_pass phpfpm;
fastcgi_param SCRIPT_FILENAME /server/www/public/index.php;
fastcgi_param HTTPS on;
fastcgi_param SERVER_PORT 443;
fastcgi_param HTTP_X_FORWARDED_PROTO https;
fastcgi_param HTTP_X_FORWARDED_PORT 443;
include /etc/nginx/fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff|woff2|ttf|svg)$ {
expires 6M;
log_not_found off;
access_log off;
add_header Cache-Control "public, max-age=2592000";
}
location ~ ^/index\.php(/|$) {
try_files $uri =404;
fastcgi_pass phpfpm;
fastcgi_index /index.php;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param HTTPS on;
fastcgi_param SERVER_PORT 443;
fastcgi_param HTTP_X_FORWARDED_PROTO https;
fastcgi_param HTTP_X_FORWARDED_PORT 443;
add_header Cache-Control "no-store, max-age=0" always;
}
}
}
Wenn eine Standard-Docker-Installation verwendet wird und nach der Terminierung die Ports 80 und 443 genutzt werden, muss Folgendes ausgeführt werden:
- shell
cd /<passwork>/ # Navigate to the root location of the Docker build
cp ./conf/nginx/extra/flex.example ./conf/nginx/nginx.conf
docker compose down && docker compose up -d
listen 80 — Nginx hört auf Port 80. Wenn der Datenverkehr nach der Terminierung auf einen anderen Port umgeleitet wird, ersetzen Sie Port 80 durch den erforderlichen Port.
fastcgi_param HTTPS on; — Dem Backend mitteilen, dass die Verbindung als sicher gilt. Dies ist wichtig für die korrekte Bestimmung des Anfrageschemas bei Verwendung von SSO.
fastcgi_param SERVER_PORT 443; — Den erwarteten Port für die sichere Verbindung festlegen. Wenn ein nicht standardmäßiger Port für SSL bei SSO verwendet wird, ändern Sie Port 443 auf den erforderlichen Wert.
fastcgi_param HTTP_X_FORWARDED_PROTO https; — Die Information weitergeben, dass die ursprüngliche Verbindung des Clients über HTTPS erfolgte, auch wenn SSL terminiert wurde.
fastcgi_param HTTP_X_FORWARDED_PORT 443; — Ähnlich wie HTTP_X_FORWARDED_PROTO informiert dies die Anwendung, dass der ursprüngliche Client-Port 443 war. Wenn ein nicht standardmäßiger Port für SSL bei SSO verwendet wird, ändern Sie Port 443 auf den erforderlichen Wert.
Manuelle Passwork-Installation (Apache2\HTTPD)
Wenn eine Installation unter Linux hinter einem SSL-Terminator verwendet wird, sollte das folgende Beispiel für die korrekte Passwork-Konfiguration verwendet werden.
Beispiel
<VirtualHost *:80>
ServerName example.passwork.pro
ServerAdmin webmaster@localhost
DocumentRoot /var/www/public
<Directory /var/www/public>
Options +FollowSymLinks -Indexes -MultiViews
AllowOverride FileInfo
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
ProxyFCGISetEnvIf "true" HTTPS on
ProxyFCGISetEnvIf "true" SERVER_PORT 443
ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PROTO https
ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PORT 443
</FilesMatch>
</VirtualHost>
ProxyFCGISetEnvIf "true" HTTPS on — Erzwingt die Umgebungsvariable HTTPS=on für jede Anfrage über FastCGI. Wird verwendet, um eine sichere Verbindung zu simulieren, wenn SSL auf einem externen Proxy terminiert wird.
ProxyFCGISetEnvIf "true" SERVER_PORT 443 — Den erwarteten Port für die sichere Verbindung festlegen. Wenn ein nicht standardmäßiger Port für SSL bei SSO verwendet wird, ändern Sie Port 443 auf den erforderlichen Wert.
Fügt den Header HTTP_X_FORWARDED_PROTO=https zur FastCGI-Umgebung hinzu. Dies ermöglicht dem Passwork-Backend, das ursprüngliche Verbindungsschema des Clients über den Proxy korrekt zu bestimmen.
ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PROTO https
Ähnlich wie oben informiert dies die Anwendung, dass der ursprüngliche Client-Port 443 war. Wenn ein nicht standardmäßiger Port für SSL bei SSO verwendet wird, ändern Sie Port 443 auf den erforderlichen Wert.
ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PORT 443