GNU/Linux >> Tutoriales Linux >  >> Debian

Instale Lets Encrypt and Secure Nginx con SSL/TLS en Debian 9

Este tutorial le mostrará cómo instalar y proteger un servidor web Nginx en Debian 9 con un certificado TLS emitido de forma gratuita por la autoridad de certificación de Let's Encrypt. Además, configuraremos la renovación automática de los certificados TLS de Lets' Encrypt mediante un trabajo cron antes de que caduquen los certificados.

TLS, también conocido como Transport Layer Security, es un protocolo de red que utiliza certificados SSL para cifrar el tráfico de red que fluye entre un servidor y un cliente, o entre un servidor web, como el servidor Nginx, y un navegador. Todos los datos intercambiados entre estas dos entidades están protegidos y la conexión no se puede descifrar incluso si se intercepta mediante una técnica como un ataque de hombre en el medio o un rastreo de paquetes. El certbot El paquete de software es la utilidad de cliente oficial proporcionada por Let's Encrypt CA que se puede utilizar en el proceso de generación y descarga de certificados gratuitos de Let's Encrypt en Debian.

Requisitos

  • Instalar LEMP Stack en Debian 9.
  • Un nombre de dominio público registrado con registros DNS adecuados (registros A o registros CNAME para subdominios).
  • Acceso directo a la consola del servidor o acceso SSH remoto al servidor.
  • Una cuenta de usuario con privilegios de root o acceso directo a la cuenta de root.

Instalar la utilidad de cliente de Certbot

Para instalar Let's Encrypt cerbot Client Utility en Debian 9 desde los repositorios oficiales de Debian, abra una terminal y emita el siguiente comando con privilegios de root, como se ilustra en la siguiente captura de pantalla.

apt-get install certbot

El apt de Debian La utilidad, que es la interfaz de línea de comandos del Administrador de paquetes principal de Debian, le preguntará, después de algunas comprobaciones preliminares, si acepta continuar con la instalación del paquete certbot y todas sus dependencias requeridas. Para aceptar el proceso de instalación del software responda con (y) en el indicador de la consola del servidor.

Obtener el certificado Let's Encrypt

Para generar y descargar certificados Let's Encrypt para un dominio, primero asegúrese de que el servidor web Nginx esté en funcionamiento y que al menos se pueda acceder al puerto 80 desde Internet. Para verificar si Nginx se está ejecutando, ejecute los siguientes comandos con privilegios de root.

sudo systemctl status nginx

Si el servidor aún no se está ejecutando, inicie el demonio Nginx con el siguiente comando.

sudo systemctl start nginx

En caso de que tenga un cortafuegos común instalado en Debian, como el cortafuegos UFW, que bloquea todas las conexiones entrantes en los puertos 80 y 443, emita los siguientes comandos para abrir el puerto HTTP y HTTPS en el sistema.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Para obtener certificados para su dominio, ejecute el cerbot Comando en la consola con los siguientes parámetros y banderas como se explica a continuación. Ejecute el comando con privilegios de raíz y proporcione su nombre de dominio y todos los demás subdominios para los que desea obtener certificados utilizando –d bandera. Además, suministre el --independiente para que certbot no interfiera con los archivos de configuración de Nginx. El servidor Nginx debe detenerse mientras se emiten certificados con esta opción.

La sintaxis del comando cerbot:

sudo certbot certonly --standalone –d yourdomain.com –d www.yourdomain.com

Cuando ejecute el comando certbot por primera vez y obtenga el certificado, se le pedirá que agregue su dirección de correo electrónico y que acepte los términos de servicio de Let's Encrypt. Escribe 'a ' para aceptar los términos del servicio 'no' para no compartir su dirección de correo electrónico con los socios de Let's Encrypt. Finalmente, una vez que haya obtenido el certificado para su dominio, lea las notas al pie de página para ubicar la ruta del sistema de certificados y la fecha de vencimiento.

Forma alternativa de obtener un certificado Let's encrypt SSL

Para obtener un certificado de Let's Encrypt a través de "webroot " use la siguiente sintaxis. Agregue el directorio raíz web de Nginx, que de forma predeterminada se encuentra en /var/www/html/ ruta del sistema, mientras emite el comando certbot con --webroot y –w banderas Además, asegúrese de que Nginx tenga permisos de escritura completos en el directorio raíz web para crear el /.well-known directorio.

El --webrot La opción para cerbot también le pedirá que agregue su dirección de correo electrónico para la renovación del certificado y los avisos de seguridad. Certbot El cliente tiene un código incorporado que puede detectar una dirección de correo electrónico falsa. Debe proporcionar una dirección de correo electrónico de acceso público para continuar obteniendo un certificado.

certbot certonly --webroot –w /var/www/html/ -d yourdomain.com –d www.yourdomain.com

 

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email protected]  #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email protected]
 
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a
 
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: n
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.domain.com
Using the webroot path /var/www/html/  for all unmatched domains.
Waiting for verification...
Cleaning up challenges
 
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
    /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your
   cert will expire on 2017-12-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"
 - Your account credentials have been saved in your Certbot
   configuration directory at /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

 

Configurar Nginx para TLS (SSL)

Un archivo de configuración TLS predeterminado completo de Nginx para un dominio debería verse como en el siguiente extracto del archivo.

/etc/nginx/sites-enabled/default-ssl muestra de archivo:

    server {
                    listen 443 ssl default_server;
                    listen [::]:443 ssl default_server;
      
                server_name  www.yourdomain.com yourdomain.com;
                #server_name _;
                               
                root /var/www/html;
                               
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
              
               #SSL Certificates
                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
                ssl_certificate_key "/etc/letsencrypt/live/www. yourdomain.com/privkey.pem";
                ssl_dhparam /etc/nginx/dhparam.pem;
               
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
               ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
    #includeSubDomains" always;
 
                location / {
        index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
               
                set $cache_uri $request_uri;
               
                location ~ /.well-known {
                allow all;
                                }
              
                #
                #             # With php-fpm (or other unix sockets):
                                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                #             # With php-cgi (or other tcp sockets):
                #             fastcgi_pass 127.0.0.1:9000;
                }

               # deny access to .htaccess files, if Apache's document root
                # concurs with nginx's one
                #
                #location ~ /\.ht {
                #             deny all;
                #}
               
    }

Las líneas de código para procesar scripts PHP a través de FastCGI Process Manager también se pueden encontrar en este extracto y están representadas por las siguientes líneas.

location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                }

Instalar certificados Let's Encrypt en Nginx

Los certificados y claves de Let's Encrypt se almacenan en /etc/letsencrypt/live/www.yourdomain.com/ directorio en Debian. Los ls El comando contra el directorio anterior revelará todos los componentes del certificado, como el archivo de cadena, el archivo de cadena completa, la clave privada y el archivo de certificado.

ls /etc/letsencrypt/live/www.yourdomain.com/

Para instalar el certificado Let's Encrypt en el archivo de configuración TLS del servidor web Nginx, abra Nginx default-ssl y actualice las líneas a continuación para reflejar las rutas del archivo de certificado de Let's Encrypt para su dominio, como se muestra en el extracto a continuación.

nano /etc/nginx/sites-enabled/default-ssl

Cambie las siguientes líneas como se muestra a continuación:

                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem ";
                ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com /privkey.pem";

 

Además, si ssl_dhparam está presente en la configuración SSL de Nginx, debe generar una nueva clave Diffie-Hellman de 2048 bits emitiendo el siguiente comando. La generación de parámetros clave de Diffie–Hellman debería tomar un tiempo dependiendo de la aleatoriedad o entropía de su sistema.

openssl dhparam –out /etc/nginx/dhparam.pem 2048

Finalmente, antes de activar la configuración TLS de Nginx reiniciando el demonio de Nginx para reflejar los cambios, primero verifique las configuraciones de Nginx en busca de posibles errores de sintaxis. Luego, si la prueba del archivo de configuración de Nginx es exitosa, reinicie el demonio de Nginx para cargar la nueva configuración junto con los certificados de Let's Encrypt, emitiendo los siguientes comandos.

nginx -t
service nginx restart

Para verificar si el servicio nginx posee un socket abierto en estado de escucha en el puerto 443, ejecute netstat comando como se muestra en el siguiente extracto.

netstat –tulpn | grep -e 443 -e LISTEN

También debe abrir un navegador y navegar hasta su nombre de dominio a través del protocolo HTTPS. Si los certificados de Let's Encrypt se aplican con éxito en Nginx, el protocolo de enlace SSL debería funcionar sin problemas y sin arrojar ningún error.

https://www.tudominio.com

Forzar tráfico web a HTTPS

Para obligar a los visitantes de su dominio a navegar por su sitio web solo a través del protocolo HTTPS, abra el archivo de configuración predeterminado habilitado para sitios Nginx y agregue la siguiente línea, lo que obliga a que todas las solicitudes que lleguen al puerto 80 se redirijan con un código de estado 301 (movido permanentemente) al puerto 443.

nano /etc/nginx/sites-enabled/default

La declaración de redirección debe verse como se presenta en el siguiente extracto.

server_name www.yourdomain.com yourdomain.com;
return         301 https://$server_name$request_uri;

Posteriormente, reinicie el demonio Nginx para aplicar el cambio, emitiendo el siguiente comando.

service nginx restart

Comprobaciones finales

Para investigar más a fondo los certificados generados por Let's Encrypt CA, puede utilizar un navegador web moderno, como Chrome. Visite su dominio desde el navegador Chrome y presione la tecla de función F12 para abrir las Herramientas para desarrolladores. Vaya a la pestaña Seguridad y haga clic en Ver certificado para abrir el certificado, como se muestra en las siguientes capturas de pantalla.

Otra utilidad útil para investigar certificados SSL resulta ser openssl utilidad de línea de comandos. Para mostrar información adicional para un certificado Let's Encrypt CA, ejecute el siguiente comando en una consola Linux.

openssl s_client –connect www.yourdomain.com:443

Renovación automática del certificado Let's Encrypt

Para renovar automáticamente un certificado emitido por Let's Encrypt CA antes de la fecha de vencimiento, programe un trabajo crontab para que se ejecute una vez al día a las 2:00 a. m. emitiendo el siguiente comando. La salida del trabajo cron ejecutado se dirigirá a un archivo de registro, almacenado en /var/log/letsencrypt.log

crontab –e

Trabajo cron para renovar el certificado.

0 2 * * * certbot renew >> /var/log/letsencrypt.log

¡Eso es todo! Para otras configuraciones más avanzadas relacionadas con los certificados y la utilidad Let's Encrypt, visite la documentación oficial en la siguiente dirección de Internet https://certbot.eff.org/docs/.


Debian
  1. Asegure Nginx con Lets Encrypt en Debian 9

  2. Asegure Nginx con Lets Encrypt en Debian 10 Linux

  3. Asegure Apache con Lets Encrypt en Debian 10

  4. Instale Automad CMS con Nginx y Lets Encrypt SSL en Debian 10

  5. Cómo instalar OpenCart con Nginx y Lets Encrypt en Debian 10

Cómo instalar MyBB Forum con Nginx y Lets Encrypt en Debian 10

Cómo instalar Wekan Kanban con Nginx y Lets Encrypt SSL en Debian 10

Cómo instalar Drupal con Nginx y Let's Encrypt SSL en Debian 11

Cómo instalar Joomla con Nginx y Let's Encrypt SSL en Debian 11

Cómo instalar WordPress con Nginx y Let's Encrypt SSL en Debian 11

Cómo instalar Nginx con Let's Encrypt TLS/SSL en Debian 11 Bullseye