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
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
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
<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>
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
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
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.