Let’s Encrypt es una entidad de certificación que proporciona una manera sencilla de obtener e instalar certificados de TLS/SSL gratuitos, lo que permite usar HTTPS cifrado en servidores web. Simplifica el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (cuando no todos) de los pasos requeridos. Actualmente, todo el proceso de obtención e instalación de un certificado está totalmente automatizado en Apache y Nginx.
Usaremos Certbot para obtener un certificado de SSL gratuito para Apache tanto en Ubuntu para las versiones: 18.04, 18.10 y 19.04 y se configurará su certificado para que se renueve de forma automática. Éste es un post basado en el post de DigitalOcean, pero con algunas variantes y tips que les pueda servir de extra
¿Qué se necesita saber antes de empezar?
Aparte de tener instalado el Apache, que es importantísimo, debemos de conocer lo siguiente:
- La ruta donde se crea y guarda los dominios: /etc/apache2/sites-available/
- Dentro se encuentra 000-default.conf, el archivo base, casi vacío para crear dominios
- Comando a2ensite para habilitar un dominio, si lo que deseas es deshabilitar o dar de baja el dominio en tu servidor el comando es a2dissite
- Certbot el robot que instalará tu certificado bajo línea de comando que le pidas que lo genere
- No te olvides de dar los permisos de lectura web: chown -R www-data:www-data ./Carpeta
- Y los permisos de ejecución: chmod 755 -R ./Carpeta
Comencemos:
Paso 0, no olvides realizar todas tus actividades bajo root, con el comando
sudo su
apt update
Para el tutorial haremos la instalación de un Dominio con su Sub Dominio
Paso 1: Instalar Certbot
El primer paso para utilizar Let’s Encrypt para obtener un certificado SSL es instalar el software Certbot en su servidor.
sudo add-apt-repository ppa:certbot/certbot
Luego te pedirá que presiones ENTER para continuar
Instala el paquete Apache de Certbot con apt
:
sudo apt install python-certbot-apache
Paso 2: Configurar el certificado SSL
Debemos de dirigirnos al directorio donde están las configuraciones
cd /etc/apache2/sites-available/
Copiamos el archivo base 2 veces, uno para el dominio principal y el otro par el sub dominio
cp 000-default.conf NUEVODOMINIO.conf
cp 000-default.conf SUB-DOMINIO.conf
Editamos los archivos generados para ponerle la información que deseemos
nano NUEVODOMINIO.conf
El primer archivo debe quedar de la siguiente manera, teniendo en cuenta que las otras lineas en # son comentarios que no sirven de mucho
<VirtualHost *:80>
ServerAdmin servidor@infocatsoluciones.com
ServerName nuevodominio.com
ServerAlias www.nuevodominio.com
DocumentRoot /var/www/html/nuevodominio
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Explicando un poco, server admin sólo es el correo informativo que saldrá cuando haya un error en la Web, como el error 403, 405, ServerName si es importante porque nos indica que dominio estará alojado en nuestra web, serverAlias sólo incluye el www. al dominio normal, DocumentRoot es donde estará alojada nuestra página, es la carpeta o directorio de archivos.
Creamos el archivo .conf para el sudominio, de la misma manera, pero con algún pequeño cambio
nano SUB-DOMINIO.conf
Importante: Para subdominios el www. ya no existe, éste se reemplaza por la palabra, en este ejemplo https://premium.nuevodominio.com
<VirtualHost *:80>
ServerAdmin servidor@infocatsoluciones.com
ServerName premium.nuevodominio.com
DocumentRoot /var/www/html/subdominio
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Antes de proseguir siempre es bueno verificar las sentencias estén bien escritas, me ha pasado que por un simple espacio, el servidor no quiere proseguir:
sudo apache2ctl configtest
Habilitar el servicio que acabamos de crear
sudo a2ensite nuevodominio.conf
sudo a2ensite premium.nuevodominio.conf
Si hubiera error, vuelva a editar los archivos .conf que seguramente algo está mal ingresado.
Una vez finalizado, reinicie el servidor Apache
sudo systemctl reload apache2
En algunas ocasiones es conveniente utilizar estas líneas para un reinicio forzoso:
sudo service apache stop
sudo service apache start
Paso 3: Habilitar HTTPS a través del firewall
Verifiquemos el estado del Firewall:
sudo ufw status
Lo que debemos de obtener es algo parecido a:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Para permitir de forma adicional el tráfico de HTTPS, habilite el perfil de Apache Full y borre el permiso del perfil redundante de Apache:
sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'
Vuelva a verificar el estado del firewall
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
Paso 4: Obtener un certificado SSL
Ya cerca al final, debemos decir a Cerbot que dominio va a llevar un certificado, con la linea de código, podemos llamar para el dominio general tal cual le pusimos en ServerName en el paso 2, de este tutorial.
Para lo que corresponde a subdominios, ya indicamos que no existe www. por eso en caso de sub dominios la sentencia es más corta.
sudo certbot --apache -d nuevodominio.com -d www.nuevodominio.com
sudo certbot --apache -d premium.nuevodominio.com
Si todo va bien, debemos tener esta respuesta:
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
Presionamos 1 si no desean que la web haga redirección hacia HTTPS, y 2 para que redirija en automático.
Al tener este resultado damos por concluido la configuración y sólo es probar:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Si en caso fuera error como me pasó en que le puse www. a un subdominio, Certbot en un inglés básico nos dirá que el primer certificado se firmó correctamente pero que no encuentra el www. para firmarlo; sólo con decirnos eso el certificado no se creará para ninguno de los 2 porque hay error, ya que revierte los cambios. A veces confundimos que si firmó y debería estar listo, pero al hacer la prueba entrando a https://premium.nuevodominio.com nos dirá que el certificado es erroneo o que no existe o que fue firmado por otra entidad y pensará que es hacking.
Paso 5: Verificar la renovación automática de Certbot
No debemos de olvidar hacer la renovación de los certificados que tenemos instalados en el servidor
sudo certbot renew --dry-run
Si no hubiera problema, nos dirá con success toda la lista de certificados renovados
Conclusión
En este tutorial, instaló el certbot
del cliente Let’s Encrypt, descargó certificados SSL para su dominio, configuró Apache para utilizarlos y definió la renovación automática de certificados. Si tiene preguntas adicionales sobre la utilización de Certbot, la documentación es un buen punto de partida.