Saltar a contenido

P2.13 Certificados SSL autofirmados en Apache

En esta práctica, aprenderemos a crear e instalar un certificado SSL autofirmado en un servidor Apache en una máquina virtual Ubuntu. Al finalizar la práctica, nuestro servidor web debería ser capaz de manejar conexiones seguras a través de HTTPS.

Los certificados SSL (Secure Sockets Layer) son esenciales para asegurar la comunicación entre el servidor web y los clientes, ya que cifran los datos transmitidos y garantizan la autenticidad del servidor. Aunque los certificados autofirmados no son reconocidos por los navegadores como confiables, son útiles para entornos de desarrollo y pruebas.

Instalar OpenSSL

Para crear un certificado SSL autofirmado, primero debemos asegurarnos de que OpenSSL esté instalado en nuestra máquina virtual Ubuntu. Podemos instalarlo utilizando el siguiente comando en la terminal:

sudo apt update
sudo apt install openssl

Habilitar el módulo SSL en Apache

Para habilitar el módulo SSL en Apache, utilizamos el siguiente comando:

sudo a2enmod ssl
Luego, reiniciamos Apache para que los cambios surtan efecto:

sudo systemctl restart apache2

Crear un certificado SSL autofirmado

Para crear un certificado SSL autofirmado, utilizamos el siguiente comando:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
Este comando generará un certificado válido por 365 días y una clave privada. Durante la ejecución del comando, se nos pedirá que ingresemos información como el país, la provincia, la ciudad, la organización y el nombre común (Common Name) del servidor.

Configurar Apache para usar el certificado SSL

A continuación, debemos configurar Apache para utilizar el certificado SSL que acabamos de crear. Podemos hacerlo creando un archivo de configuración para el sitio SSL:

sudo nano /etc/apache2/sites-available/default-ssl.conf
Dentro del archivo, debemos asegurarnos de que las siguientes líneas apunten a los archivos del certificado y la clave privada que creamos anteriormente:

<VirtualHost *:443>
   ServerName your_domain_or_ip
   DocumentRoot /var/www/your_domain_or_ip

   SSLEngine on
   SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
   SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
</VirtualHost>
Evidentemente, reemplazamos your_domain_or_ip y /var/www/your_domain_or_ip con el nombre de dominio o la dirección IP de nuestro servidor y la ruta al directorio raíz del sitio web, respectivamente.

Después de guardar el archivo, habilitamos el sitio SSL con el siguiente comando:

sudo a2ensite default-ssl.conf
Finalmente, reiniciamos Apache para aplicar los cambios:
sudo systemctl restart apache2

Verificar la configuración SSL

Para verificar que el certificado SSL autofirmado está funcionando correctamente, podemos acceder a nuestro sitio web utilizando HTTPS en un navegador web. Por ejemplo. https://your_domain_or_ip. Es probable que el navegador muestre una advertencia de seguridad debido a que el certificado es autofirmado. Podemos proceder a agregar una excepción de seguridad para continuar y verificar que la conexión es segura.

Si todo está configurado correctamente, deberíamos ver nuestro sitio web cargado a través de una conexión segura HTTPS.

Redireccionar HTTP a HTTPS

Para asegurarnos de que todas las conexiones a nuestro sitio web utilicen HTTPS, podemos configurar una redirección de HTTP a HTTPS. Podemos hacerlo editando el archivo de configuración del sitio predeterminado de Apache:

sudo nano /etc/apache2/sites-available/default-ssl.conf

Dentro del archivo, agregamos las siguientes líneas dentro del bloque <VirtualHost *:80>:

<VirtualHost *:80>
    ServerName your_domain_or_ip
    Redirect permanent / https://your_domain_or_ip/
</VirtualHost>

Después de guardar el archivo, reiniciamos Apache para aplicar los cambios:

sudo systemctl restart apache2
Ahora, cualquier intento de acceder a nuestro sitio web a través de HTTP será redirigido automáticamente a HTTPS.

Conclusión

En esta práctica, hemos aprendido a crear e instalar un certificado SSL autofirmado en un servidor Apache en una máquina virtual Ubuntu. Hemos configurado Apache para utilizar el certificado SSL y hemos verificado que las conexiones seguras a través de HTTPS funcionan correctamente. Además, hemos implementado una redirección de HTTP a HTTPS para garantizar que todas las conexiones utilicen el protocolo seguro. Aunque los certificados autofirmados no son adecuados para entornos de producción, son una herramienta valiosa para pruebas y desarrollo.

Recuerda

Si estas trabajando con una máquina virtual y el reenvio de puertos, asegúrate de reenviar el puerto 443 (HTTPS) además del puerto 80 (HTTP) para poder acceder a tu servidor web desde la maquina anfitriona.