Configuración de SSL/TLS en Apache HTTPD#
Habilita el módulo y VirtualHost de SSL#
root@example:~# a2enmod ssl
root@example:~# a2ensite default-ssl
Verifica que la configuración sea correcta y reinicia el servicio de Apache HTTPD
root@example:~# apachectl -t
Syntax OK
root@example:~# systemctl restart apache2
Revisa los archivos de VirtualHosts habilitados en Apache HTTPD
root@example:~# ls -la /etc/apache2/sites-enabled
total 8
drwxr-xr-x 2 root root 4096 May 29 02:02 .
drwxr-xr-x 8 root root 4096 May 29 02:02 ..
lrwxrwxrwx 1 root root 35 May 29 02:02 000-default.conf -> ../sites-available/000-default.conf
lrwxrwxrwx 1 root root 35 May 29 02:02 default-ssl.conf -> ../sites-available/default-ssl.conf
Revisa que Apache escuche en los puertos 80
y 443
root@example:~# netstat -ntulp | grep apache2
tcp6 0 0 :::80 :::* LISTEN 16384/apache2
tcp6 0 0 :::443 :::* LISTEN 16384/apache2
root@example:~# apachectl -S
VirtualHost configuration:
*:80 example.com (/etc/apache2/sites-enabled/000-default.conf:1)
*:443 example.com (/etc/apache2/sites-enabled/default-ssl.conf:2)
...
Configura los VirtualHosts predeterminados#
Edita los archivos de VirtualHost y reemplaza la definición para que queden de la siguiente manera
VirtualHost de HTTP: /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
⇨<VirtualHost _default_:80>
VirtualHost de HTTPS: /etc/apache2/sites-enabled/default-ssl.conf
<VirtualHost *:443>
⇨<VirtualHost _default_:443>
Recarga el servicio de Apache HTTPD
root@example:~# systemctl reload apache2
Revisa cual es la ruta de la raíz del sitio web en los VirtualHost predeterminados
root@example:~# grep 'DocumentRoot' /etc/apache2/sites-enabled/*.conf
/etc/apache2/sites-enabled/000-default.conf: DocumentRoot /var/www/html
/etc/apache2/sites-enabled/default-ssl.conf: DocumentRoot /var/www/html
Tramita el certificado SSL con Let's Encrypt#
Note
Si tienes problemas, puedes intentar hacer el trámite del certificado SSL utilizando certbot
en otra máquina
Instala certbot
en el equipo
root@example:~# apt -qy install certbot python3-certbot-apache
...
Genera un certificado wildcard SSL con certbot
que cumpla con las siguientes características
- Subject CN =
example.com
- Subject Alt name:
example.com
- Subject Alt name:
*.example.com
Ejecuta certbot
en el equipo para generar el certificado SSL con Let's Encrypt
- Adjunta la salida del comando
certbot
en tu reporte de la práctica
root@example:~# certbot --authenticator manual --installer apache --domain 'example.com' --domain '*.example.com'
Valida el servidor y dominio DNS con ACME#
Let's Encrypt pide que valides el dominio de dos maneras:
-
Con un registro DNS de tipo
TXT
llamado_acme-challenge.example.com.
- Puedes validar el valor asociado al registro DNS con
dig
desde tu computadora
- Puedes validar el valor asociado al registro DNS con
usuario@laptop ~ % dig TXT _acme-challenge.example.com.
...
- Con un archivo dentro de la ruta
/.well-known/acme-challenge
bajo elDocumentRoot
- Esta ruta es
/var/www/html/.well-known/acme-challenge
en los VirtualHost predeterminados - Puedes validar la existencia del archivo de validación con
curl
desde tu computadora
- Esta ruta es
usuario@laptop ~ % curl -v http://example.com/.well-known/acme-challenge/NOMBRE_DEL_ARCHIVO_PARA_VALIDACIÓN
...
Warning
Necesitas validar correctamente los dos pasos anteriores antes de continuar con el trámite del certificado SSL
Redirige el tráfico HTTP a HTTPS#
El programa certbot
pregunta si quieres redirigir el tráfico de HTTP hacia HTTPS
- Acepta esta opción para que se haga la configuración para todos los VirtualHosts de HTTP presentes en Apache HTTPD
Verifica que tengas el certificado y la llave privada en /etc/letsencrypt
root@example:~# apt -qqy install tree
...
root@example:~# tree /etc/letsencrypt/archive
/etc/letsencrypt/archive
└── example.com
├── cert1.pem
├── chain1.pem
├── fullchain1.pem
└── privkey1.pem
1 directory, 4 files
root@example:~# tree /etc/letsencrypt/live
/etc/letsencrypt/live
├── README
└── example.com
├── cert.pem -> ../../archive/example.com/cert1.pem
├── chain.pem -> ../../archive/example.com/chain1.pem
├── fullchain.pem -> ../../archive/example.com/fullchain1.pem
├── privkey.pem -> ../../archive/example.com/privkey1.pem
└── README
1 directory, 6 files
Verifica que se estén utilizando los certificados de Let's Encrypt en tu VirtualHost de HTTPS
root@example:~# egrep -i '^\s*SSLCertificate(Key)?File' /etc/apache2/sites-enabled/*.conf
/etc/apache2/sites-enabled/default-ssl.conf:SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
/etc/apache2/sites-enabled/default-ssl.conf:SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Note
Te invitamos a leer el fabuloso man:
certbot --help
certbot --help all
- https://certbot.eff.org/docs/using.html#manual
Verificar configuración#
Reinicia el equipo para verificar que los cambios sean persistentes
root@example:~# reboot
Danger
- Verifica que TODAS las configuraciones que hiciste estén presentes respués de reiniciar la máquina antes de continuar con la siguiente sección
Note
- Continúa en la siguiente página si ya configuraste el módulo SSL en Apache HTTPD y ya tienes el certificado SSL de Let's Encrypt configurado en tu VirtualHost de HTTPS