1) Activar SSL/TLS en Apache
Apache en Ubuntu usa módulos. Para HTTPS necesitas ssl.
sudo a2enmod ssl
sudo systemctl restart apache2
Comprueba que el módulo está activo:
apache2ctl -M | grep ssl
2) Crear un certificado autofirmado (OpenSSL)
Vamos a crear:
- clave privada (key)
- certificado (crt)
2.1 Crear carpeta para certificados (ordenadito)
sudo mkdir -p /etc/apache2/ssl
sudo chmod 700 /etc/apache2/ssl
2.2 Generar clave + certificado (válido 365 días)
Cambia TU_SERVIDOR por un nombre identificable (ej: asir-01, web-lab, o el FQDN si tenéis DNS).
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/apache2/ssl/TU_SERVIDOR.key \
-out /etc/apache2/ssl/TU_SERVIDOR.crt
Cuando pregunte por campos, lo importante es:
- Common Name (CN): poned el nombre o la IP con la que vais a acceder.
- Si accederéis por IP: poned la IP (ej
192.168.1.50) - Si accederéis por nombre: poned ese nombre (ej
asir-01.local)
- Si accederéis por IP: poned la IP (ej
Verifica que existen:
sudo ls -l /etc/apache2/ssl/
3) Crear un VirtualHost HTTPS (443)
Apache en Ubuntu suele tener el sitio por defecto en /etc/apache2/sites-available/000-default.conf.
Vamos a crear uno nuevo: https-lab.conf.
3.1 Crear el archivo del sitio HTTPS
sudo nano /etc/apache2/sites-available/https-lab.conf
Pega esto (cambia TU_SERVIDOR y, si quieres, el ServerName):
<VirtualHost *:443>
ServerName TU_SERVIDOR
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/TU_SERVIDOR.crt
SSLCertificateKeyFile /etc/apache2/ssl/TU_SERVIDOR.key
ErrorLog ${APACHE_LOG_DIR}/https_error.log
CustomLog ${APACHE_LOG_DIR}/https_access.log combined
</VirtualHost>
Guarda y sal.
3.2 Habilitar el sitio y comprobar sintaxis
sudo a2ensite https-lab.conf
sudo apache2ctl configtest
Si sale Syntax OK, reinicia:
sudo systemctl reload apache2
4) Comprobar que HTTPS funciona
4.1 Ver que Apache escucha en 443
sudo ss -lntp | grep ':443'
4.2 Probar con curl (ignorando el aviso del certificado)
Sustituye por la IP o nombre real:
curl -kI https://192.168.1.50/
Deberías ver algo como:
HTTP/1.1 200 OK(o301/302si rediriges)- cabeceras de Apache
4.3 Probar desde navegador
Entrad a:
https://IP_DEL_SERVIDOR/
Saldrá aviso de seguridad (normal con autofirmados). La idea pedagógica: el cifrado funciona, pero el navegador no “confía” en la identidad.
5) (Opcional) Redirigir HTTP (80) a HTTPS (443)
Esto hace que todo lo que llegue por http:// vaya a https://.
5.1 Activar módulo rewrite
sudo a2enmod rewrite
sudo systemctl reload apache2
5.2 Editar el VirtualHost de puerto 80
Edita el sitio por defecto (o el que uséis en 80):
sudo nano /etc/apache2/sites-available/000-default.conf
Dentro del <VirtualHost *:80>, añade esto antes del cierre </VirtualHost>:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Comprueba y recarga:
sudo apache2ctl configtest
sudo systemctl reload apache2
Prueba:
curl -I http://192.168.1.50/
Debería devolver 301 Moved Permanently apuntando a https://....
6) (Opcional) Endurecer un poco HTTPS (sin volverse loco)
6.1 Activar HTTP/2 (si está disponible)
sudo a2enmod http2
sudo systemctl reload apache2
En tu https-lab.conf, dentro del VirtualHost 443, añade:
Protocols h2 http/1.1
6.2 Cabeceras básicas (seguridad “visible”)
Activa headers:
sudo a2enmod headers
sudo systemctl reload apache2
Dentro del <VirtualHost *:443> añade:
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
HSTS (solo si vais a usar HTTPS siempre; en lab puede dar guerra si cambiáis):
Header always set Strict-Transport-Security "max-age=86400"
7) Logs y troubleshooting (lo que siempre salva vidas)
7.1 Ver errores de Apache en directo
sudo tail -f /var/log/apache2/error.log
7.2 Ver logs del sitio HTTPS
sudo tail -f /var/log/apache2/https_error.log
sudo tail -f /var/log/apache2/https_access.log
7.3 Problemas típicos
- No abre el 443: firewall/UFW o router/VLAN.
- Apache no escucha en 443: revisa que
sslesté activo y que el sitiohttps-lab.confesté habilitado. sudo a2query -m ssl
sudo a2query -s https-lab
sudo apache2ctl -S - Certificado no coincide (CN mal): recrea el cert con CN correcto.
- Permisos: que Apache pueda leer el
.crty.key(en/etc/apache2/sslsuele ir bien con root y lectura adecuada; si te pasas bloqueando, falla).








![[Reto] - Infraestructura virtualizada con Ubuntu Server 9dc81aff-d57d-45b1-83e9-c70955561713](https://laaventuradeaprender.com/wp-content/uploads/2026/03/9dc81aff-d57d-45b1-83e9-c70955561713-150x150.png)