GNU/Linux >> Linux Esercitazione >  >> Debian

Installa Lets Encrypt e Secure Nginx con SSL/TLS in Debian 9

Questo tutorial ti mostrerà come installare e proteggere un server web Nginx su Debian 9 con un certificato TLS rilasciato gratuitamente dalla Let's Encrypt Certificate Authority. Inoltre, configureremo il rinnovo automatico dei certificati Lets' Encrypt TLS utilizzando un cron job prima della scadenza dei certificati.

TLS, noto anche come Transport Layer Security, è un protocollo di rete che utilizza certificati SSL per crittografare il traffico di rete che scorre tra un server e un client, o tra un server Web, come il server Nginx, e un browser. Tutti i dati scambiati tra queste due entità sono protetti e la connessione non può essere decifrata anche se viene intercettata utilizzando una tecnica come un attacco man in the middle o lo sniffing dei pacchetti. Il certbot pacchetto software è l'utilità client ufficiale fornita da Let's Encrypt CA che può essere utilizzata nel processo di generazione e download di certificati Let's Encrypt gratuiti in Debian.

Requisiti

  • Installa LEMP Stack in Debian 9.
  • Un nome di dominio pubblico registrato con record DNS appropriati (record A o record CNAME per i sottodomini).
  • Accesso diretto alla console del server o accesso SSH remoto al server.
  • Un account utente con privilegi di root o accesso diretto all'account di root.

Installa Certbot Client Utility

Per installare Let's Encrypt cerbot utilità client in Debian 9 dai repository ufficiali di Debian, apri un terminale ed emetti il ​​seguente comando con privilegi di root, come illustrato nella schermata seguente.

apt-get install certbot

La Debian apt utility, che è l'interfaccia a riga di comando del Package Manager principale di Debian, ti chiederà, dopo alcuni controlli preliminari, se accetti di continuare con l'installazione del pacchetto certbot e di tutte le sue dipendenze richieste. Per accettare il processo di installazione del software rispondi con (y) nel prompt della console del server.

Ottieni il certificato Let's Encrypt

Per generare e scaricare i certificati Let's Encrypt per un dominio, assicurati innanzitutto che il server web Nginx sia attivo e funzionante e che almeno la porta 80 sia accessibile da Internet. Per verificare se Nginx è in esecuzione, esegui i seguenti comandi con privilegi di root.

sudo systemctl status nginx

Se il server non è già in esecuzione, avvia il demone Nginx con il comando seguente.

sudo systemctl start nginx

Nel caso in cui tu abbia un firewall comune installato in Debian, come il firewall UFW, che blocca tutte le connessioni in entrata sulle porte 80 e 443, immetti i comandi seguenti per aprire la porta HTTP e HTTPS nel sistema.

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

Per ottenere i certificati per il tuo dominio, esegui il cerbot comando in console con i seguenti parametri e flag come spiegato di seguito. Esegui il comando con i privilegi di root e fornisci il tuo nome di dominio e tutti gli altri sottodomini per i quali desideri ottenere i certificati utilizzando –d bandiera. Inoltre, fornisci il --standalone opzione affinché certbot non interferisca con i file di configurazione di Nginx. Il server Nginx deve essere arrestato durante l'emissione di certificati utilizzando questa opzione.

La sintassi del comando cerbot:

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

Quando esegui per la prima volta il comando certbot e ottieni il certificato, ti verrà chiesto di aggiungere il tuo indirizzo e-mail e di accettare i termini di servizio di Let's Encrypt. Scrivi "a ' per accettare i termini del servizio 'no' di non condividere il tuo indirizzo email con i partner di Let's Encrypt. Infine, dopo aver ottenuto il certificato per il tuo dominio, leggi le note a piè di pagina per individuare il percorso di sistema dei certificati e la data di scadenza.

Modo alternativo per ottenere un certificato SSL Let's encrypt

Per ottenere un certificato Let's Encrypt tramite "webroot " utilizza la sintassi seguente. Aggiungi la directory principale web di Nginx, che per impostazione predefinita si trova in /var/www/html/ percorso di sistema, mentre si emette il comando certbot con --webroot e –w bandiere. Inoltre, assicurati che Nginx disponga dei permessi di scrittura completi nella directory principale web per creare il /.well-known directory.

Il --webrot l'opzione per cerbot ti chiederà anche di aggiungere il tuo indirizzo e-mail per il rinnovo del certificato e gli avvisi di sicurezza. Certbot il client ha un codice integrato in grado di rilevare un indirizzo email falso. Devi fornire un indirizzo e-mail pubblico accessibile per continuare a ottenere un certificato.

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
La directory
   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

 

Configura Nginx per TLS (SSL)

Un file di configurazione TLS completo di Nginx per un dominio dovrebbe apparire come nell'estratto del file seguente.

/etc/nginx/sites-enabled/default-ssl esempio di file:

    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;
                #}
               
    }

Le righe di codice per l'elaborazione degli script PHP tramite FastCGI Process Manager si trovano anche in questo estratto ed è rappresentato dalle righe seguenti.

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

Installa i certificati Let's Encrypt in Nginx

I certificati e le chiavi Let's Encrypt sono archiviati in /etc/letsencrypt/live/www.yourdomain.com/ directory in Debian. Le ls il comando sulla directory di cui sopra rivelerà tutti i componenti del certificato, come il file chain, il file fullchain, la chiave privata e il file del certificato.

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

Per installare il certificato Let's Encrypt nel file di configurazione TLS del server web Nginx, apri Nginx default-ssl file e aggiorna le righe seguenti per riflettere i percorsi dei file del certificato Let's Encrypt per il tuo dominio, come mostrato nell'estratto seguente.

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

Modifica le seguenti righe come di seguito:

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

 

Inoltre, se il ssl_dhparam è presente nella configurazione SSL di Nginx, è necessario generare una nuova chiave Diffie–Hellman a 2048 bit eseguendo il comando seguente. La generazione dei parametri chiave Diffie-Hellman dovrebbe richiedere del tempo a seconda della casualità o dell'entropia del sistema.

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

Infine, prima di attivare la configurazione TLS di Nginx riavviando il demone Nginx per riflettere le modifiche, controlla prima le configurazioni di Nginx per potenziali errori di sintassi. Successivamente, se il test del file di configurazione di Nginx ha esito positivo, riavvia il demone Nginx per caricare la nuova configurazione insieme ai certificati Let's Encrypt, eseguendo i comandi seguenti.

nginx -t
service nginx restart

Per verificare se il servizio nginx possiede un socket aperto in stato di ascolto sulla porta 443, esegui netstat comando come mostrato nell'estratto seguente.

netstat –tulpn | grep -e 443 -e LISTEN

Dovresti anche aprire un browser e navigare verso il tuo nome di dominio tramite il protocollo HTTPS. Se i certificati Let's Encrypt vengono applicati correttamente in Nginx, l'handshake SSL dovrebbe funzionare senza problemi senza generare errori.

https://www.tuodominio.com

Forza il traffico web su HTTPS

Per costringere i visitatori del tuo dominio a navigare nel tuo sito Web solo tramite il protocollo HTTPS, apri il file di configurazione predefinito abilitato ai siti Nginx e aggiungi la seguente riga, che forza tutte le richieste che hanno colpito la porta 80 a essere reindirizzate con un codice di stato 301 (spostato permanentemente) alla porta 443.

nano /etc/nginx/sites-enabled/default

L'istruzione di reindirizzamento dovrebbe apparire come presentata nell'estratto seguente.

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

Successivamente, riavvia il demone Nginx per applicare la modifica, eseguendo il comando seguente.

service nginx restart

Controlli finali

Per approfondire i certificati generati da Let's Encrypt CA, puoi utilizzare un browser web moderno, come Chrome. Visita il tuo dominio dal browser Chrome e premi il tasto funzione F12 per aprire Strumenti per sviluppatori. Vai alla scheda Sicurezza e premi su Visualizza certificato pulsante per aprire il certificato, come mostrato nelle schermate seguenti.

Un'altra utile utilità nell'analisi dei certificati SSL risulta essere openssl utilità della riga di comando. Per mostrare informazioni aggiuntive per un certificato Let's Encrypt CA, esegui il comando seguente in una console Linux.

openssl s_client –connect www.yourdomain.com:443

Rinnova automaticamente il certificato Let's Encrypt

Per rinnovare automaticamente un certificato emesso da Let's Encrypt CA prima della data di scadenza, pianificare un processo crontab da eseguire una volta al giorno alle 2:00, eseguendo il comando seguente. L'output del lavoro cron eseguito verrà indirizzato a un file di registro, archiviato in /var/log/letsencrypt.log

crontab –e

Cron job per rinnovare il certificato.

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

È tutto! Per altre configurazioni più avanzate relative ai certificati e alle utility Let's Encrypt, visitare la documentazione ufficiale al seguente indirizzo Internet https://certbot.eff.org/docs/.


Debian
  1. Proteggi Nginx con Lets Encrypt su Debian 9

  2. Proteggi Nginx con Lets Encrypt su Debian 10 Linux

  3. Proteggi Apache con Lets Encrypt su Debian 10

  4. Installa Automad CMS con Nginx e Lets Encrypt SSL su Debian 10

  5. Come installare OpenCart con Nginx e Lets Encrypt su Debian 10

Come installare MyBB Forum con Nginx e Lets Encrypt su Debian 10

Come installare Wekan Kanban con Nginx e Lets Encrypt SSL su Debian 10

Come installare Drupal con Nginx e Let's Encrypt SSL su Debian 11

Come installare Joomla con Nginx e Let's Encrypt SSL su Debian 11

Come installare WordPress con Nginx e Let's Encrypt SSL su Debian 11

Come installare Nginx con Let's Encrypt TLS/SSL su Debian 11 Bullseye