Implementar HTTPS y HSTS
Con respecto a la implementación HTTPS y HSTS, ha sido aplicada automáticamente a través del docker-compose que nosotros ejecutamos en unos de los puntos anteriores a este. Concretamente, en el punto 9. Accesibilidad a servicios externos, donde explicamos y ejecutamos todo lo necesario para implementar todos los servicios que nos solicitan.
Comentado esto, explicaremos brevemente la configuración que añade nuestro docker-compose a nuestros diferentes virtualhost para que se logre dicha implementación HTTPS y HSTS.
HSTS
En primer lugar, para la implementación de la política de seguridad HSTS en nuestro servidor web Nginx, deberemos aplicar las siguientes líneas de configuración que mostramos a continuación en cada uno de nuestros virtualhosts existentes:
- location / ---> Este recurso se utiliza para indicarle al servidor web Nginx a donde tiene que dirigirse las solicitudes que se soliciten. En este caso, le indicamos /, lo que coincidirá con todas las solicitudes demandadas y nos dirigirá a nuestra página web (este recurso se emplea como última opción). También, podremos poner nuestra URI exacta.
- return 301 https:// ---> Se encarga de redireccionar el tráfico a la versión HTTPS de la página web visitada.
- $host ---> Esta variable es igual a la línea host que se escribe en el encabezado de la solicitud del navegador web o el nombre del servidor que procesa la solicitud si el encabezado host no está disponible.
- $request_uri ---> La variable $request_uri es él URI de solicitud original completo, incluyendo los argumentos. En este caso, /.
- add_header Strict-Transport-Security "max-age=31536000" always; ---> Esta línea de configuración, se encargará de informar a cada unos de los navegadores web que solamente se puede acceder a nuestro sitio web mediante el protocolo HTTPS.
# www.higieneposturalcloudgrupo2.tk
upstream www.higieneposturalcloudgrupo2.tk {
## Can be connected with "web" network
server 172.18.0.5:80;
}
server {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
server_name www.higieneposturalcloudgrupo2.tk;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
# Do not HTTPS redirect Let'sEncrypt ACME challenge
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
server_name www.higieneposturalcloudgrupo2.tk;
listen 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.crt;
ssl_certificate_key /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.key;
ssl_dhparam /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.dhparam.pem;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.chain.pem;
add_header Strict-Transport-Security "max-age=31536000" always;
include /etc/nginx/vhost.d/default;
location / {
proxy_pass http://www.higieneposturalcloudgrupo2.tk;
}
Como siempre, recordad que por cada cambio sé que se realice, deberemos guardarlo con la combinación de teclas Control + O y salir con la combinación de teclas Control + X.
HTTPS
Por último, una vez hayamos visto como se implementa la política de seguridad HSTS en los diferentes virtualhost de nuestro servidor web Nginx, veremos como podemos activar HTTPS en nuestro sitio web para que sea más seguro y la información viaje encriptada. En nuestro caso, ya hemos podido ver un poquito por encima como se realiza dicha implementación por lo mostrado en el punto anterior, pero esto no es lo suficientemente claro, y por dicha razón, explicaremos la configuración necesaria para que esto funcione perfectamente. Dicho esto, veamos como se hace:
Para la implementación del protocolo HTTPS, deberemos dirigirnos nuevamente a nuestro archivo de configuración virtualhost y, añadir las líneas siguientes para que este funcione (las líneas marcadas, son las fundamentales para que dicha implementación funcione, las otras no serán necesarias a no ser que se indique lo contrario):
Estas líneas las deberemos introducir arriba del archivo de configuración:
- proxy_set_header Host $http_host ---> Línea encargada de identificar el host original solicitado por el cliente en el encabezado de solicitud HTTP.
- proxy_set_header X-Forwarded-Proto https; ---> Línea encargada de indicarle a nuestro proxy o balanceador que utilice el protocolo HTTPS.
- proxy_set_header X-Forwarded-Port 443; ---> Línea encargada de indicarle a nuestro proxy o balanceador que use el puerto 443.
Estas líneas las deberemos introducir en cada apartado server HTTPS que realicemos:
- server_name ---> En esta línea de configuración, se encargará de indicarle al servidor DNS dónde debe ir el dominio indicado por el cliente.
- listen 443 ssl http2 ---> En esta línea de configuración, indicaremos que dicho dominio debe ir por el puerto 443 y por el protocolo HTTP2.
- ssl_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.crt; ---> En esta línea de configuración, deberemos indicar la ruta de nuestro certificado de dominio.
- ssl_certificate_key /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.key; ---> En esta línea de configuración, deberemos especificar la ruta de la llave privada del certificado que indicamos anteriormente.
- ssl_trusted_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.chain.pem; - (Está línea no es estrictamente necesaria) ---> En esta línea de configuración, especificaremos la ruta de la cadena de nuestro certificado y llave privada, es decir, la combinación de los dos juntos.
- location / { proxy_pass http://www.higieneposturalcloudgrupo2.tk; } ---> Por último, en esta línea de configuración, aunque no tenga nada que ver directamente con la implementación HTTPS, haremos funcionar nuestro proxy inverso, que se encargará de que cada vez que se busque nuestro respectivo dominio http://www.higieneposturalcloudgrupo2.tk o www.higieneposturalcloudgrupo2.tk, nuestra política de seguridad HSTS actué, y nos redirija a nuestro WordPress con el protocolo HTTPS que hemos estado configurando en las líneas anteriores.
proxy_set_header Host $http_host
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
server {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
server_name www.higieneposturalcloudgrupo2.tk;
listen 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.crt;
ssl_certificate_key /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.key;
ssl_dhparam /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.dhparam.pem;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.chain.pem;
add_header Strict-Transport-Security "max-age=31536000" always;
include /etc/nginx/vhost.d/default;
location / {
proxy_pass http://www.higieneposturalcloudgrupo2.tk;
}
Como siempre, recordad que por cada cambio sé que se realice, deberemos guardarlo con la combinación de teclas Control + O y salir con la combinación de teclas Control + X.
Y con todo esto aplicado, nuestro servidor web Nginx deberá funcionar perfectamente bajo la política de seguridad HSTS y con la implementación HTTPS con su correcta certificación y candado verde. En caso de que tengamos más dominios o subdominios en nuestro servidor web Nginx, deberemos aplicar las mismas configuraciones con sus respectivos datos.
Demostración del funcionamiento correcto HSTS y HTTPS
Webgrafía