Introducción

Let’s Encrypt es una autoridad de certificación (CA) gratuita, confiable y automatizada desarrollada por la organización sin fines de lucro Internet Security Research Group (ISRG). La CA utiliza procesos totalmente automatizados para entregar certificados SSL / TLS gratuitos, eliminando la necesidad de creación, instalación, verificación y renovación manual de certificados SSL.

Los programas líderes confían en Let’s Encrypt simplemente porque es seguro, transparente, colaborativo y automático. La CA proporciona los certificados digitales necesarios para habilitar HTTPS para sitios web y para crear una web segura y compatible con la privacidad.

Este tutorial lo ayudará a proteger el servicio Apache con Let’s Encrypt a través de la confiable herramienta certbot en su hosting VPS Ubuntu 18.04 o servidor dedicado.

¿Listo? ¡Vamos a empezar!

Antes de que empieces

Para que este proceso se desarrolle sin problemas, necesitará lo siguiente:

  • Un dominio
  • Apache instalado en su servidor
  • Hosts virtuales Apache completamente configurados para el nombre de dominio. Puedes usar nuestra guía “Cómo configurar hosts virtuales Apache en Ubuntu 18.04” para configurar los hosts virtuales.

Si todo está bien, podemos comenzar la instalación ahora.

Paso 1 – Instale Certbot

Lo primero que debe hacer al hacer una copia de seguridad de Apache con Let’s Encrypt es instalar la herramienta certbot. Esta herramienta automatiza y agiliza el proceso de obtención y renovación de los certificados SSL de Let’s Encrypt. También le ayuda a configurar su servidor web para utilizar estos certificados.

Primero, actualice el índice del paquete local:

$ sudo apt update

$ sudo apt install certbot

¡Eso es! Ha instalado correctamente la herramienta certbot.

Paso 2: generar un grupo DH fuerte

El grupo DH o Diffie-Hellman es un grupo de intercambio de claves confiable que crea un entorno seguro para facilitar el intercambio de claves criptográficas a través de un canal de comunicación no seguro.

Ejecute el siguiente comando para crear una serie de caracteres DH de 2048 bits:

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Nota: Puede reemplazar el 2048 con el 4096 si lo desea. Debe tener paciencia al hacer esto, ya que la generación de los parámetros DH puede tardar 30 minutos o más, dependiendo de la entropía del sistema.

Paso 3: obtención de un certificado SSL

Una vez que se haya generado el grupo Dh, ahora puede obtener el certificado SSL requerido para su dominio único. En este tutorial usaremos example.com como nuestro nombre de dominio; Recuerde reemplazar este valor con su verdadero nombre de dominio.

En este paso usaremos un complemento webroot para crear un archivo para archivo example.com en el registro $ {webroot-path} /. well-known / acme-challenge. El servidor de validación Let’s Encrypt envía llamadas HTTP para autenticar que el DNS del dominio se está resolviendo en un servidor que ejecuta la herramienta certbot.

Simplemente asignamos entradas HTTP para ellos .conocido / desafío acme a / var / lib / letsencrypt. Ahora ejecute los siguientes comandos para crear el directorio requerido y hacerlo escribible para su servidor Apache.

$ sudo mkdir -p /var/lib/letsencrypt/.well-known
$ sudo chgrp www-data /var/lib/letsencrypt
$ sudo chmod g+s /var/lib/letsencrypt

A continuación, cree dos fragmentos de configuración únicos para evitar la duplicación de código. Primero, ejecute el siguiente comando para abrir el primer archivo de configuración:

$ sudo nano /etc/apache2/conf-available/letsencrypt.conf

Pegue el siguiente contenido en este archivo:

Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

Guarde y salga de este archivo.

A continuación, ejecute el siguiente comando para abrir el segundo archivo de configuración:

$ sudo /etc/apache2/conf-available/ssl-params.conf

Copie y pegue el siguiente contenido en este archivo:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always setStrict-Transport-Security"max-age=63072000; includeSubDomains; preload"
Header alwaysset X-Frame-Options DENY
Header alwaysset X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

Guardar y salir del archivo.

Nota: La segunda sección de configuración utiliza astilladoras autorizadas por HSTS (HTTP Strict Transport Security) y Cipherli.st. El fragmento aplica encabezados HTTP centrados en la seguridad y habilita el apilamiento OCSP.

Ahora ejecute los siguientes comandos para activar Módulo SSL de Apache y el mod_header:

$ sudo a2enmod ssl
$ sudo a2enmod headers

A continuación, ejecute los siguientes comandos para obtener el Hos virtual SSLty el ssl-params.conf Archivo:

$ sudo a2enconf letsencrypt
$ sudo a2enconf ssl-params

Reinicie su configuración de Apache para implementar los cambios:

$ sudo systemctl reload apache2

La etapa está lista y ahora puede implementar el certbot con un complemento webroot para obtener su certificado SSL:

$ sudo certbot certonly --agree-tos --email admin@example.com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Después de recibir el certificado, recibirá el siguiente mensaje:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-10-28. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Paso 4: modificar la configuración del archivo del host virtual

Ejecute el siguiente comando para abrir el archivo de configuración para su dominio exclusivo:

$ sudo nano /etc/apache2/sites-available/example.com.conf

Agregue el siguiente contenido a este archivo:

<VirtualHost *:80> 
  ServerName example.com
  ServerAlias www.example.com

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com

  <If "%{HTTP_HOST} == 'www.example.com'">
    Redirect permanent / https://example.com/
  </If>

  DocumentRoot /var/www/example.com/public_html
  ErrorLog${APACHE_LOG_DIR}/example.com-error.log
  CustomLog${APACHE_LOG_DIR}/example.com-access.log combined

  SSLEngineOn
  SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

  # Other Apache Configuration

</VirtualHost>

A continuación, vuelva a cargar su servicio Apache:

$ sudo systemctl reload apache2

Abra sus sitios web y vea si ve el ícono de candado verde

Paso 5: configurar la renovación automática

El certificado SSL recién instalado solo es válido por 90 días. Puede configurar el paquete Certbot para renovar automáticamente su certificado SSL antes de su fecha de vencimiento. El paquete genera un trabajo cron que se ejecuta dos veces al día y renueva el certificado un mes antes de que expire.

Cada vez que el certificado SSL se renueva automáticamente, se debe volver a cargar el servicio Apache. Para habilitar esto, cambie el /etc/cron.d/certbot Presentar con el –renew-hook “systemctl reload apache2”, Gancho.

Este archivo se verá así:

0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload apache2"

$ sudo certbot renovar –dry-run

Si no recibe ningún error, el proceso de renovación automática del certificado SSL se ha configurado correctamente.

Conclusión

¡Eso es! Ha utilizado con éxito la herramienta certbot y Let’s Encrypt para obtener un certificado SSL para su nombre de dominio específico.