Saltar al contenido principal

Terminación SSL

A partir de la versión 7, el frontend de Passwork requiere el uso obligatorio de HTTPS, por lo que todas las instalaciones y configuraciones estándar incluyen los ajustes correspondientes. Sin embargo, entendemos que la terminación SSL se utiliza en muchas infraestructuras.

peligro

¡Atención!

Estos ajustes son necesarios en los siguientes casos:

  • La terminación SSL es obligatoria en la infraestructura;
  • Una instancia de Passwork se utiliza en una zona controlada.

Después de configurar la terminación SSL, también recomendamos configurar los proxies de confianza.

Passwork Docker Build

Ejemplo
	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;
}

}
}

Si se utiliza una instalación estándar de Docker y los puertos 80 y 443 se utilizan después de la terminación, se debe realizar lo siguiente:

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 escucha en el puerto 80. Si el tráfico se redirige a otro puerto después de la terminación, reemplace el puerto 80 por el requerido.

fastcgi_param HTTPS on; — Indicar al backend que la conexión se considera segura. Esto es importante para determinar correctamente el esquema de la solicitud al usar SSO.

fastcgi_param SERVER_PORT 443; — Establecer el puerto esperado para la conexión segura. Si se utiliza un puerto no estándar para SSL en SSO, cambie el puerto 443 al valor requerido.

fastcgi_param HTTP_X_FORWARDED_PROTO https; — Pasar información de que la conexión original del cliente fue a través de HTTPS, incluso si SSL fue terminado.

fastcgi_param HTTP_X_FORWARDED_PORT 443; — Similar a HTTP_X_FORWARDED_PROTO, informa a la aplicación que el puerto original del cliente era 443. Si se utiliza un puerto no estándar para SSL en SSO, cambie el puerto 443 al valor requerido.

Instalación manual de Passwork (Apache2\HTTPD)

Si se utiliza una instalación en Linux detrás de un terminador SSL, se debe usar el ejemplo a continuación para una configuración correcta de Passwork.

Ejemplo
<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 — Fuerza la variable de entorno HTTPS=on para cada solicitud vía FastCGI. Se utiliza para simular una conexión segura si SSL se termina en un proxy externo.

ProxyFCGISetEnvIf "true" SERVER_PORT 443 — Establecer el puerto esperado para la conexión segura. Si se utiliza un puerto no estándar para SSL en SSO, cambie el puerto 443 al valor requerido.

Añade el encabezado HTTP_X_FORWARDED_PROTO=https al entorno FastCGI. Esto permite al backend de Passwork determinar correctamente el esquema de conexión original del cliente a través del proxy.

ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PROTO https

Similar al anterior, esto informa a la aplicación que el puerto original del cliente era 443. Si se utiliza un puerto no estándar para SSL en SSO, cambie el puerto 443 al valor requerido.

ProxyFCGISetEnvIf "true" HTTP_X_FORWARDED_PORT 443