Laboratorio de Configuración de TLS/SSL

Objetivos:

  • Configurar un servidor web Apache o Nginx con TLS/SSL.

  • Verificar la configuración utilizando herramientas como SSL Labs.

Herramientas

  • Máquina Virtual con Ubuntu 24.04 LTS.

  • Servidor Web Nginx.

  • Certificado SSL autofirmado.

Procedimiento

1. Instalación de Nginx

Para instalar Nginx en Ubuntu 24.04, primero actualizamos el índice de paquetes y luego instalamos el paquete de Nginx.

sudo apt update
sudo apt install nginx
Tip

Podemos conectarnos por SSH a la máquina virtual para ejecutar los comandos.

ssh usuario@direccion_ip

Para verificar que Nginx se ha instalado correctamente, podemos ejecutar el siguiente comando:

sudo systemctl status nginx

2. Configuración de Nginx

Verificamos los sitios disponibles con nginx:

ls /etc/nginx/sites-available/

Analizamos el archivo de configuración por defecto:

cat /etc/nginx/sites-available/default

Creamos un directorio llamado example para un nuevo sitio en nuestro servidor nginx:

sudo mkdir /var/www/example

Le brindamos permisos de nuestro usuario al diretorio:

sudo chown -R $USER:$USER /var/www/example

Tambien le asignamos los siguientes permisos:

sudo chmod -R 755 /var/www/example

Con ello podemos crear un archivo index.html en el directorio example:

nano /var/www/example/index.html
<!DOCTYPE html>
<html>
<head>
    <title>Welcome to Example.com!</title>
</head>
<body>
    <h1>Success!  The example.com server block is working!</h1>
</body>
</html>

Nos movemos a los sitios disponibles de nginx:

cd /etc/nginx/sites-available/

Copiamos el archivo de configuración por defecto y le asignamos el nombre example:

sudo cp default example

Verificamos con un ls que se haya creado el archivo:

ls

Vamos a modificar el archivo example que acabamos de crear:

sudo nano example
server {
    listen 80;
    listen [::]:80;

    root /var/www/example;
    index index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com;

    location / {
        try_files $uri $uri/ =404;
    }
}

Guardamos y cerramos el archivo.

Creamos un enlace simbólico en la carpeta sites-enabled para habilitar el sitio:

sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/

Verificamos la configuración de Nginx:

sudo nginx -t
Tip

Si todo salio bien deberíamos ver un mensaje como el siguiente:

nginx: configuration file /etc/nginx/nginx.conf test is successful

Reiniciamos el servicio de Nginx:

sudo systemctl restart nginx

Antes de proceder con la instalación del certificado SSL, verificamos que el sitio web esté funcionando correctamente. Para ello, abrimos un navegador web y accedemos a la dirección IP de la máquina virtual.

Tip

Podemos configurar el dominio en nuestro archivo hosts para acceder al sitio web con un nombre de dominio en lugar de la dirección IP. Para ello, agregamos una entrada en el archivo /etc/hosts de la máquina cliente.

sudo nano /etc/hosts

Agregamos la siguiente línea:

127.0.1.1 ubuntu example.com

Guardamos y cerramos el archivo.

Volvemos a reiniciar el servidor Nginx:

sudo systemctl restart nginx

Mediante el navegador web, accedemos al sitio web utilizando el nombre de dominio que configuramos en el archivo hosts.

Si todo salio bien deberíamos ver el mensaje que configuramos en el archivo index.html.

3. Configuración de TLS/SSL

Para empezar esta sección vamos a crear una carpeta para almacenar los certificados SSL:

sudo mkdir /etc/nginx/ssl

Le damos permisos al directorio que acabamos de crear:

sudo chmod 700 /etc/nginx/ssl

Ahora vamos a generar con openssl el fichero de certificado y la clave privada:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

El comando anterior generará un certificado autofirmado válido por 365 días. Se le pedirá que proporcione información sobre su organización y ubicación. Puede completar esta información o dejarla en blanco.

Comprobamos que los archivos se hayan generado correctamente:

ls /etc/nginx/ssl

Ahora volvemos a nuestros sitios disponibles de nginx:

cd /etc/nginx/sites-available/

Vamos a modificar el archivo de configuración del sitio para habilitar TLS/SSL:

sudo nano example
server {
    listen 80;
    listen [::]:80;

    root /var/www/example;
    index index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com;

    location / {
        try_files $uri $uri/ =404;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/nginx/ssl/nginx.crt; # managed by Certbot
    ssl_certificate_key /etc/nginx/ssl/nginx.key; # managed by Certbot
}

Guardamos y cerramos el archivo.

Recargarmos el servidor Nginx:

sudo systemctl reload nginx

Se recomienda en este punto reiniciar la m´quina virtual para asegurarnos de que los cambios se apliquen correctamente.

Si todo salio bien deberíamos poder acceder al sitio web mediante HTTPS.

4. Verificación de la Configuración de TLS/SSL

Para verificar la configuración de TLS/SSL, podemos utilizar la herramienta SSL Labs. Para ello, abrimos un navegador web y accedemos a la siguiente URL https://www.ssllabs.com/ssltest/

En el campo de texto, ingresamos la URL de nuestro sitio web y hacemos clic en el botón “Submit”.

La herramienta SSL Labs analizará la configuración de TLS/SSL de nuestro sitio web y nos proporcionará un informe detallado con una calificación.

Tip

Es posible que la calificación no sea la máxima si estamos utilizando un certificado autofirmado. Sin embargo, el informe proporcionará información útil sobre la configuración de TLS/SSL de nuestro sitio web.

Conclusión

En este laboratorio, hemos configurado un servidor web Nginx con TLS/SSL en una máquina virtual Ubuntu 24.04. Hemos creado un certificado SSL autofirmado y hemos verificado la configuración utilizando la herramienta SSL Labs.

Referencias