Cómo poner Certificados SSL, a dominios y subdominios en Ubuntu con Let’s Encrypt Gratis

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.

Compartir

Sobre el autor:

Picture of Infocat

Infocat

Mi nombre es Carlos A. Pariona Valencia, soy programador, mi equipo y yo contamos con 12 años de experiencia en el campo de Desarrollo de Software y recientemente en Apps.

¿Tú que opinas?

Más contenido que tenemos: