Implementar HTTPS y HSTS

De Wiket
Salta a la navegació Salta a la cerca

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


Implementación de la política de seguridad HSTS


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 X-Forwarded-Proto https; ---> Línea encargada de indicarle a nuestro proxy o balanceador que utilice el protocolo HTTPS.
  • proxy_set_header X-Forwarded-Ssl 443; ---> Línea encargada de indicarle a nuestro proxy o balanceador que utilice 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.


proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl 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;
}


Implementación HTTPS


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


Demostración HSTS Y HTTPS 1.png


Demostración HSTS Y HTTPS 2.png



Webgrafía



Volver a IETI Cloud Grupo 2