La seguridad es una de las principales preocupaciones de los propietarios de sitios web, especialmente si tiene una tienda de comercio electrónico o un sitio que acepta información confidencial de los usuarios, como nombres de usuario y contraseñas. El protocolo HTTP simple es inseguro ya que los datos se envían en texto simple y los piratas informáticos pueden espiar la comunicación enviada hacia y desde el servidor web.
Para superar este riesgo, se recomienda proteger un servidor web mediante un certificado TLS/SSL. Este es un certificado digital criptográfico que encripta su servidor web y asegura que los datos intercambiados con el servidor web estén encriptados.
El certificado Let’s Encrypt SSL es un certificado digital proporcionado por Vamos a cifrar CA (Autoridad de certificación) para asegurar un servidor web. Es un certificado TLS/SSL gratuito que es válido solo por 90 días, luego de lo cual se requiere la renovación antes de que caduque. Es beneficioso para las empresas emergentes o las personas que no pueden pagar un certificado SSL premium para sus blogs o sitios web.
En esta guía, demostraremos cómo puede instalar el certificado Let’s Encrypt SSL/TLS para NGINX en Rocky Linux 8
Que necesitas
Primero, asegúrese de tener una instancia del servidor Rocky Linux 8 en la nube o en las instalaciones y ya configurado con un usuario sudo.
A continuación, asegúrese de tener un nombre de dominio completo (FQDN) que apunte a la IP pública de su servidor. Para lograr esto, diríjase a su registrador de dominio y, en la configuración de DNS, configure el registro A para apuntar el nombre de dominio a la IP pública del servidor. A continuación se muestra un fragmento de mi registro A.
Para esta guía, estamos usando el nombre de dominio linuxtechgeek.info que apunta a la dirección IP del servidor 34.134.239.201.
Con eso fuera del camino, ¡comencemos!
Paso 1) Instalar el servidor web Nginx
Comenzamos con la instalación del servidor web Nginx en Rocky 8. Pero primero, actualicemos el paquete del sistema y actualicemos los repositorios.
$ sudo dnf update
La actualización puede tardar un poco, así que ten paciencia hasta que se complete.
Una vez que se complete la actualización, reinicie el sistema una vez y luego instale el servidor web nginx de la siguiente manera:
$ sudo dnf install nginx
De forma predeterminada, nginx no se inicia automáticamente. Entonces, haga un esfuerzo adicional e inicie el servicio nginx.
$ sudo systemctl start nginx
A continuación, habilite el servidor web para que se inicie en el momento del arranque o al reiniciar.
$ sudo systemctl enable nginx
El servidor web ahora debería estar funcionando como se esperaba y escuchando en el puerto 80. Puede confirmar esto ejecutando el comando
$ sudo systemctl status nginx
También puede verificar esto desde un navegador web. Pero primero, permita el tráfico HTTP (tanto HTTP como HTTPS) en el firewall ejecutando los comandos que se muestran
$ sudo firewall-cmd --add-service=http --permanent $ sudo firewall-cmd --add-service=https --permanent
A continuación, vuelva a cargar el cortafuegos para efectuar los cambios.
$ sudo firewall-cmd --reload
Luego busque la dirección IP o el nombre de dominio de su servidor
http://nombre_de_dominio
Paso 2) Cree una raíz de documento para el dominio
Terminamos de instalar el servidor web. El siguiente paso es crear un directorio que acomodará los archivos del dominio. Crearemos el directorio del dominio en la ruta linuxtechgeek.info como se muestra usando el comando mkdir
$ sudo mkdir -p /var/www/linuxtechgeek.info/html
La raíz del documento del dominio es donde encontrará los archivos del sitio web, incluidos HTML, CSS, JavaScript e imágenes. Para fines de demostración, vamos a crear un archivo index.html simple.
$ sudo vi /var/www/linuxtechgeek.info/html/index.html
A continuación, pegue el siguiente código HTML de ejemplo y guarde los cambios.
<!DOCTYPE html> <html> <head> <title>Welcome to linuxtechgeek.info</title> </head> <body> <h1>Hey Guys! Our Nginx server block is working.</h1> </body> </html>
Luego, use el comando chown para establecer la propiedad del directorio del dominio de la siguiente manera para evitar problemas de permisos.
$ sudo chown -R nginx /var/www/linuxtechgeek.info/
A continuación, configure los permisos de modo que los usuarios globales y de grupo tengan derechos de lectura y ejecución de los archivos del dominio.
$ sudo chmod -R 755 /var/www/linuxtechgeek.info/
Hemos terminado de configurar la raíz del documento para el dominio y establecer la propiedad y los permisos correctos. Procedamos y configuremos el archivo de bloque del servidor.
Paso 3) Crear bloque de servidor Nginx
Un bloque de servidor Nginx es el equivalente a un host virtual apache. El bloque del servidor es donde define la configuración del sitio y le dice al servidor web nginx dónde ubicar los archivos del dominio.
El archivo de configuración del bloque del servidor se crea en el directorio /etc/nginx/conf.d. Crearemos el nuestro en el mismo directorio de la siguiente manera.
$ sudo vi /etc/nginx/conf.d/linuxtechgeek.info.conf
Copia y pega las siguientes líneas. Asegúrese de sustituir el nombre de dominio linuxtechgeek.info con su propio dominio.
server { listen 80; server_name linuxtechgeek.info www.linuxtechgeek.info; root /var/www/linuxtechgeek.info/html; index index.php index.html index.htm; access_log /var/log/nginx/linuxtechgeek.info.access.log; error_log /var/log/nginx/linuxtechgeek.info.error.log; }
Guarde los cambios y salga del archivo de bloqueo del servidor.
Luego confirme que todas las configuraciones de Nginx estén bien. Si todo está bien, debería mostrar la salida.
$ sudo nginx -t
Para que Nginx esté al tanto de todos los cambios, incluida la raíz del documento del dominio y el archivo de bloqueo del servidor, reinicie el servidor web.
$ sudo systemctl restart nginx
Luego confirme el estado de ejecución de Nginx.
$ sudo systemctl status nginx
Luego, configure SELinux en modo permisivo usando el comando:
$ sudo setenforce permissive
Para confirmar que está configurado en modo permisivo, ejecute el comando:
$ sudo getenforce
Ejecute debajo del comando sed para establecer permanentemente el modo selinux como permisivo.
$ sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
Para confirmar que el archivo de bloqueo del servidor se ha configurado correctamente, una vez más, busque su nombre de dominio.
http://nombre_de_dominio
Debería obtener una confirmación positiva como se muestra a continuación.
Paso 4) Instalar Certbot
El único paso que queda es instalar Let’s Encrypt y asegurar el servidor web Nginx. Sin embargo, para lograr esto, necesitamos instalar certbot. Escrito en Python y desarrollado por Electronic Frontier Foundation, Certbot es un cliente con todas las funciones para Let’s Encrypt CA. Se ejecuta en el servidor web y le permite configurar automáticamente un certificado SSL para su servidor web con un solo comando.
Primero, instale el repositorio EPEL que proporciona paquetes adicionales y de alta calidad para distribuciones basadas en RHEL.
$ sudo dnf install -y epel-release
Una vez instalado, instale certbot y el módulo certbot para Nginx.
$ sudo dnf install certbot python3-certbot-nginx
Esto instala certbot, módulo de certbot para el host Nginx de otros paquetes y dependencias.
Paso 4) Instale el certificado Let’s Encrypt SSL/TLS
Finalmente, ejecute el cliente certbot para instalar el certificado SSL
$ sudo certbot --nginx
Esto lo lleva a través de una serie de indicaciones. Primero, proporcione la dirección de correo electrónico que utilizará EFF para enviarle actualizaciones de seguridad y renovación. Luego acepte los Términos de servicio presionando ‘Y’. Si lo desea, puede presionar ‘Y’ para permitir que EFF le envíe actualizaciones periódicas sobre sus esfuerzos para proteger la web, las noticias y las campañas. Finalmente, seleccione los nombres de dominio para cifrar. En nuestro caso, presionamos el botón ‘ENTRAR’ para seleccionar todos los nombres de dominio.
Certbot obtendrá el certificado SSL/TLS y lo implementará para los nombres de dominio especificados. Esto habilita el protocolo HTTPS para su dominio, cifrando de hecho el tráfico intercambiado con el servidor web.
Para confirmar que HTTPS se ha habilitado, regrese a su navegador y vuelva a cargarlo. Esta vez, notará un ícono de candado en la barra de URL, una indicación de que el sitio está encriptado.
Haga clic en el icono y luego seleccione ‘Certificado’.
Esto muestra los detalles del certificado tal como se proporciona
Además, puede probar el estado de su servidor web en SSL Labs, que es un sitio que realiza un análisis profundo de un servidor web a través de Internet. Debería obtener una calificación A como se muestra.
Paso 5) Administrar la renovación del certificado SSL
El certificado de Let’s Encrypt es válido por 90 días, sin embargo, Let’s Encrypt recomienda que renueve el certificado cada 60 días. Se le enviarán notificaciones por correo electrónico los últimos 20 días antes de que caduquen con la frecuencia aumentando los últimos 10 días.
Puede renovar manualmente el certificado de la siguiente manera.
$ sudo certbot renew
Afortunadamente, puede automatizar la renovación agregando un nuevo trabajo cron. Entonces, abra el archivo crontab.
$ crontab -e
Y agregue la línea que se muestra. Guarde los cambios y salga.
0 0 * * * /usr/bin/certbot renew > /dev/null 2>&1
Eso es todo. Gracias por llegar hasta aquí. Hemos demostrado cómo puede instalar el certificado SSL de Let’s Encrypt para Nginx en Rocky Linux 8.
Leer también: Cómo configurar NGINX de alta disponibilidad con KeepAlived en Linux