Cómo proteger Apache con Let's Encrypt en FreeBSD 12.0

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación de la herramienta Certbot para Let's Encrypt
  • Paso 2: Habilitación de conexiones SSL/TLS en Apache HTTP
  • Paso 3: Habilitación y configuración de hosts virtuales
  • Paso 4: Habilitar el módulo de reescritura
  • Paso 5: Obtención de un certificado Let's Encrypt
  • Paso 6: Configuración de la renovación automática del certificado
  • Conclusión
  • El autor seleccionó el Fondo de Código Libre y Abierto para recibir una donación como parte del programa Write for DOnations.

    Introducción

    Let's Encrypt es una autoridad de certificación (CA) que ofrece una forma sencilla de obtener e instalar certificados TLS/SSL gratuitos, lo que permite el cifrado HTTPS en servidores web. Simplifica el proceso al ofrecer un cliente de software, Certbot, que intenta automatizar la mayoría (si no todos) de los pasos necesarios.

    En este tutorial, utilizará Certbot para configurar un certificado TLS/SSL de Let's Encrypt en un servidor FreeBSD 12.0 que ejecuta Apache como servidor web. Además, automatizará el proceso de renovación del certificado mediante una tarea programada.

    Nota: a partir del 1 de julio de 2022, DigitalOcean ya no admite la creación de nuevos Droplets de FreeBSD a través del Panel de control o la API. Sin embargo, aún puede crear Droplets de FreeBSD utilizando una imagen personalizada. Aprenda a importar una imagen personalizada a DigitalOcean siguiendo nuestra documentación del producto.

    Prerrequisitos

    Antes de comenzar esta guía necesitarás lo siguiente:

    • Un servidor FreeBSD 12.0 que puedes configurar como desees usando esta guía sobre Cómo comenzar a usar FreeBSD.

    • Apache instalado completando el Paso 1 de este tutorial de pila FAMP.

    • Un firewall habilitado mediante el paso de configuración del firewall en las instrucciones de este tutorial.

    • Dos registros DNS A que apuntan su dominio a la dirección IP pública de su servidor. Nuestra configuración utilizará your-domainy como nombres de dominio, y ambos requerirán un registro DNS válido. Puede consultar esta introducción a DigitalOcean DNS para obtener detalles sobre cómo agregar los registros DNS con la plataforma DigitalOcean. Los registros DNS A son necesarios debido a la forma en que Let's Encrypt valida que usted es el propietario del dominio para el que se emite un certificado. Por ejemplo, si desea obtener un certificado para , ese dominio debe resolverse en su servidor para que funcione el proceso de validación.www.your-domainyour-domain

    Una vez cumplidos estos requisitos previos ya podrás empezar a instalar Certbot, la herramienta que te permitirá instalar certificados Let's Encrypt.

    Paso 1: Instalación de la herramienta Certbot para Let's Encrypt

    Un certificado Let's Encrypt garantiza que los navegadores de los usuarios puedan verificar que el servidor web está protegido por una autoridad de certificación de confianza. Las comunicaciones con el servidor web están protegidas mediante cifrado mediante HTTPS.

    En este paso instalará la herramienta Certbot para su servidor web para realizar una solicitud a los servidores Let's Encrypt para emitir un certificado y claves válidos para su dominio.

    Ejecute el siguiente comando para instalar el paquete Certbot y su complemento HTTP Apache:

    1. sudo pkg install -y py37-certbot py37-certbot-apache

    Ahora que ha instalado el paquete, puede continuar para habilitar las conexiones TLS en el servidor web.

    Paso 2: Habilitación de conexiones SSL/TLS en Apache HTTP

    De forma predeterminada, cualquier instalación de Apache HTTP servirá contenido en el puerto 80(HTTP). La Listen 80entrada en el httpd.confarchivo de configuración principal lo confirma. Para permitir conexiones HTTPS, necesitará que el puerto predeterminado sea 443. Para agregar un puerto 443y establecer conexiones SSL/TLS, deberá habilitar el mod_sslmódulo en Apache HTTP.

    Para encontrar este módulo en el httpd.confarchivo, deberá utilizar grepla -nbandera para numerar las líneas del archivo en la ruta especificada. Para encontrarlo, mod_ssl.soejecute el siguiente comando:

    1. grep -n 'mod_ssl.so' /usr/local/etc/apache24/httpd.conf

    Como resultado recibirás el número de la línea que necesitas:

    /usr/local/etc/apache24/httpd.conf

    148 #LoadModule ssl_module libexec/apache24/mod_ssl.so

    Para habilitar el módulo, eliminará el símbolo de hashtag al comienzo de la línea.

    Usando el número de línea del comando anterior abra el archivo con lo siguiente:

    1. sudo vi +148 /usr/local/etc/apache24/httpd.conf

    Esto te llevará directamente a la línea correcta para editar.

    Edite la línea para que se vea como la siguiente presionando x:

    /usr/local/etc/apache24/httpd.conf

    #LoadModule session_dbd_module libexec/apache24/mod_session_dbd.so#LoadModule slotmem_shm_module libexec/apache24/mod_slotmem_shm.so#LoadModule slotmem_plain_module libexec/apache24/mod_slotmem_plain.soLoadModule ssl_module libexec/apache24/mod_ssl.so#LoadModule dialup_module libexec/apache24/mod_dialup.so#LoadModule http2_module libexec/apache24/mod_http2.so#LoadModule proxy_http2_module libexec/apache24/mod_proxy_http2.so

    Una vez que hayas eliminado el #, presiona :wqy luego ENTERpara cerrar el archivo.

    Habilitó las funciones SSL/TLS en Apache HTTP. En el siguiente paso, configurará los hosts virtuales en Apache HTTP.

    Paso 3: Habilitación y configuración de hosts virtuales

    Un host virtual es un método mediante el cual varios sitios web pueden vivir de forma simultánea e independiente en el mismo servidor utilizando la misma instalación HTTP de Apache. Certbot requiere esta configuración para colocar reglas específicas dentro del archivo de configuración (host virtual) para que funcionen los certificados Let's Encrypt.

    Para comenzar, deberá habilitar los hosts virtuales en Apache HTTP. Ejecute el siguiente comando para localizar la directiva en el archivo:

    1. grep -n 'vhosts' /usr/local/etc/apache24/httpd.conf

    Verás el número de línea en tu salida:

    Output508  #Include etc/apache24/extra/httpd-vhosts.conf

    Ahora use el siguiente comando para editar el archivo y eliminarlo #desde el principio de esa línea:

    1. sudo vi +508 /usr/local/etc/apache24/httpd.conf

    Como antes, presione xpara eliminar #desde el principio de la línea para que se vea como sigue:

    /usr/local/etc/apache24/httpd.conf

    ...# User home directories#Include etc/apache24/extra/httpd-userdir.conf# Real-time info on requests and configuration#Include etc/apache24/extra/httpd-info.conf# Virtual hostsInclude etc/apache24/extra/httpd-vhosts.conf# Local access to the Apache HTTP Server Manual#Include etc/apache24/extra/httpd-manual.conf# Distributed authoring and versioning (WebDAV)#Include etc/apache24/extra/httpd-dav.conf...

    Luego presione :wqy ENTERpara guardar y salir del archivo.

    Ahora que ha habilitado los hosts virtuales en Apache HTTP, modificará el archivo de configuración del host virtual predeterminado para reemplazar los dominios de ejemplo con su nombre de dominio.

    Ahora agregará un bloque de host virtual al httpd-vhosts.confarchivo. Editará el archivo y eliminará los dos VirtualHostbloques existentes, después del bloque de comentarios en la línea 23, con el siguiente comando:

    1. sudo vi +23 /usr/local/etc/apache24/extra/httpd-vhosts.conf

    Después de abrir el archivo, elimine los dos bloques de configuración existentes VirtualHosty luego agregue el siguiente bloque con esta configuración específica:

    /usr/local/etc/apache24/extra/httpd-vhosts.conf

    VirtualHost *:80    ServerAdmin your_email@your_domain.com    DocumentRoot "/usr/local/www/apache24/data/your_domain.com"    ServerName your_domain.com    ServerAlias www.your_domain.com    ErrorLog "/var/log/your_domain.com-error_log"    CustomLog "/var/log/your_domain.com-access_log" common/VirtualHost

    En este bloque estás configurando lo siguiente:

    • ServerAdmin:Aquí se coloca el correo electrónico de la persona a cargo de ese sitio en particular.
    • DocumentRoot:Esta directiva define dónde se colocarán y desde dónde se leerán los archivos del sitio específico.
    • ServerName:Esto es para el nombre de dominio del sitio.
    • ServerAlias:Similar a ServerNamepero colocándolo www.antes del nombre de dominio.
    • ErrorLog:Aquí se declara la ruta del registro de errores. Todos los mensajes de error se escribirán en el archivo especificado en esta directiva.
    • CustomLog:Similar a ErrorLog, pero esta vez el archivo es el que recoge todos los registros de acceso.

    Por último, crearás el directorio donde se ubicará el sitio. Esta ruta debe coincidir con la que declaraste en la DocumentRootdirectiva del httpd-vhosts.confarchivo.

    1. sudo mkdir /usr/local/www/apache24/data/your_domain.com

    Ahora cambie los permisos del directorio para que el proceso HTTP Apache (que se ejecuta como wwwusuario) pueda trabajar con él:

    1. sudo chown -R www:www /usr/local/www/apache24/data/your_domain.com

    Solías chowncambiar la propiedad con la -Rbandera para hacer que la acción fuera recursiva. El usuario y el grupo se configuran mediante el www:www.

    Habilitó los hosts virtuales en Apache HTTP. Ahora habilitará el módulo de reescritura.

    Paso 4: Habilitar el módulo de reescritura

    Es necesario habilitar el módulo de reescritura dentro de Apache HTTP para realizar cambios en las URL, por ejemplo al redireccionar de HTTP a HTTPS.

    Utilice el siguiente comando para encontrar el módulo de reescritura:

    1. grep -n 'rewrite' /usr/local/etc/apache24/httpd.conf

    Verá un resultado similar a este:

    Output180  #LoadModule rewrite_module libexec/apache24/mod_rewrite.so

    Para habilitar el módulo, ahora eliminará #del principio de la línea:

    1. sudo vi +180 /usr/local/etc/apache24/httpd.conf

    Edite su archivo para que se vea como el siguiente presionando xeliminar #desde el comienzo de la línea:

    /usr/local/etc/apache24/httpd.conf

    #LoadModule actions_module libexec/apache24/mod_actions.so#LoadModule speling_module libexec/apache24/mod_speling.so#LoadModule userdir_module libexec/apache24/mod_userdir.soLoadModule alias_module libexec/apache24/mod_alias.soLoadModule rewrite_module libexec/apache24/mod_rewrite.soLoadModule php7_module        libexec/apache24/libphp7.so# Third party modulesIncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.confIfModule unixd_module

    Guarde y salga de este archivo.

    Ahora ha terminado de configurar las configuraciones necesarias en Apache.

    Paso 5: Obtención de un certificado Let's Encrypt

    Certbot ofrece una variedad de formas de obtener certificados SSL a través de varios complementos. El apachecomplemento se encargará de reconfigurar Apache HTTP. Para ejecutar la instalación interactiva y obtener un certificado que cubra solo un dominio, ejecute el siguiente comando de certbot:

    1. sudo certbot --apache -d your-domain -d www.your-domain

    Si desea instalar un único certificado válido para varios dominios o subdominios, puede pasarlos como parámetros adicionales al comando, etiquetando cada nuevo dominio o subdominio con la -dbandera. El primer nombre de dominio en la lista de parámetros será el dominio base utilizado por Let's Encrypt para crear el certificado. Por este motivo, pase primero el nombre de dominio base, seguido de cualquier subdominio o alias adicional.

    Si es la primera vez que utiliza certboteste servidor, el cliente le solicitará que ingrese una dirección de correo electrónico y que acepte los términos de servicio de Let's Encrypt. Después de hacerlo, certbotse comunicará con el servidor de Let's Encrypt y luego ejecutará un desafío para verificar que usted controla el dominio para el que está solicitando un certificado.

    Si el desafío tiene éxito, Certbot le preguntará cómo desea configurar sus ajustes HTTPS:

    Output. . .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 fornew sites, or if you're confident your site works on HTTPS. You can undo thischange by editing your web server's configuration.-------------------------------------------------------------------------------Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

    También podrá elegir entre habilitar ambos HTTPy HTTPSacceder o forzar que todas las solicitudes se redirijan a HTTPS. Para mayor seguridad, se recomienda elegir la opción 2: Redirectsi no tiene ninguna necesidad especial de permitir conexiones no cifradas. Seleccione su opción y luego presione ENTER.

    Esto actualizará la configuración y volverá a cargar Apache HTTP para recoger las nuevas configuraciones. certbotFinalizará con un mensaje que le informará que el proceso fue exitoso y dónde se almacenan sus certificados:

    OutputIMPORTANT NOTES:- Congratulations! Your certificate and chain have been saved at: /usr/local/etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /usr/local/etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on yyyy-mm-dd. 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"- Your account credentials have been saved in your Certbot configuration directory at /usr/local/etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal.- 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

    Sus certificados ya están descargados, instalados y configurados. Intente volver a cargar su sitio web https://y observe el indicador de seguridad de su navegador. Representará que el sitio está protegido correctamente, generalmente con un ícono de candado verde. Si prueba su servidor con la Prueba de servidor de SSL Labs, obtendrá una calificación A.

    Certbot ha realizado algunos cambios de configuración importantes. Cuando instala los certificados en su servidor web, debe colocarlos en rutas específicas. Si ahora lee el contenido del httpd-vhosts.confarchivo, observará algunos cambios realizados por el programa Certbot.

    Por ejemplo, en la VirtualHost *:80sección las reglas de redirección (si se eligen) se colocan en la parte inferior de la misma.

    /usr/local/etc/apache24/extra/httpd-vhosts.conf

    RewriteEngine onRewriteCond %{SERVER_NAME} =www.your_domain.com [OR]RewriteCond %{SERVER_NAME} =your_domain.comRewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

    Certbot también ha creado un archivo llamado httpd-vhosts-le-ssl.confdonde se ha colocado la configuración de los certificados en Apache:

    /usr/local/etc/apache24/extra/httpd-vhosts-le-ssl.conf

    IfModule mod_ssl.cVirtualHost *:443    ServerAdmin your_email@your_domain.com    DocumentRoot "/usr/local/www/apache24/data/your_domain.com"    ServerName your_domain.com    ServerAlias www.your_domain.com    ErrorLog "/var/log/your_domain.com-error_log"    CustomLog "/var/log/your_domain.com-access_log" commonInclude /usr/local/etc/letsencrypt/options-ssl-apache.confSSLCertificateFile /usr/local/etc/letsencrypt/live/your_domain.com/fullchain.pemSSLCertificateKeyFile /usr/local/etc/letsencrypt/live/your_domain.com/privkey.pem/VirtualHost/IfModule

    Nota: Si desea realizar cambios en el uso de conjuntos de cifrado en sitios con certificados Let's Encrypt, puede hacerlo en el /usr/local/etc/letsencrypt/options-ssl-apache.confarchivo.

    Una vez haya obtenido su certificado Let's Encrypt, ahora puede pasar a configurar las renovaciones automáticas.

    Paso 6: Configuración de la renovación automática del certificado

    Los certificados Let's Encrypt tienen una validez de 90 días, pero se recomienda renovarlos cada 60 días para permitir un margen de error. Por este motivo, se recomienda automatizar este proceso para comprobar y renovar periódicamente el certificado.

    En primer lugar, examinemos el comando que utilizará para renovar el certificado. El certbotcliente Let's Encrypt tiene un renewcomando que verifica automáticamente los certificados instalados actualmente e intenta renovarlos si faltan menos de 30 días para la fecha de vencimiento. Al utilizar esta --dry-runopción, puede ejecutar una simulación de esta tarea para probar cómo funciona la renovación:

    1. sudo certbot renew --dry-run

    Una forma práctica de garantizar que sus certificados no queden obsoletos es crear un trabajo cron que ejecute periódicamente el comando de renovación automática. Dado que la renovación primero verifica la fecha de vencimiento y solo ejecuta la renovación si faltan menos de 30 días para que caduque el certificado, es seguro crear un trabajo cron que se ejecute todas las semanas o incluso todos los días.

    La documentación oficial de Certbot recomienda ejecutarlo crondos veces al día. Esto garantizará que, en caso de que Let's Encrypt inicie una revocación de certificado, no pasará más de medio día antes de que Certbot renueve su certificado.

    Edite el crontabpara crear un nuevo trabajo que ejecutará la renovación dos veces al día. Para editar el crontabpara el usuario raíz , ejecute:

    1. sudo crontab -e

    Coloque la siguiente configuración en el archivo para que, dos veces al día, el sistema busque certificados renovables y los renueve si es necesario:

    SHELL=/bin/shPATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin# Order of crontab fields# minute    hour    mday    month   wday    command  0         0,12    *       *       *       /usr/local/bin/certbot renew

    En las dos primeras líneas se declaran las variables de entorno, es decir, dónde se encuentran las rutas de los ejecutables y en qué shell se ejecutan. A continuación, se indican los intervalos de tiempo que nos interesan y el comando que se va a ejecutar.

    Con este breve conjunto de instrucciones habrá configurado la renovación automática de certificados.

    Conclusión

    En este tutorial, instaló el cliente Let's Encrypt certbot, descargó certificados SSL para un dominio, configuró Apache para usar estos certificados y configuró la renovación automática de certificados. Para obtener más información, consulte la documentación de Certbot.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion