GNU/Linux >> Linux Esercitazione >  >> FreeBSD

Come proteggere Nginx con SSL e Let's Encrypt in FreeBSD

In questa guida parleremo di come proteggere Nginx server web in FreeBSD con TLS/SSL certificati offerti da Let's Encrypt Certificate Authority . Ti mostreremo anche come rinnovare automaticamente i certificati Lets' Encrypt prima della data di scadenza.

TLS , acronimo di Transport Layer Security , è un protocollo che funziona sotto HTTP protocollo e utilizza certificati e chiavi per incapsulare i pacchetti e crittografare i dati scambiati tra un server e un client, o in questo caso tra Nginx server web e browser del client, al fine di proteggere la connessione, in modo che una terza parte, che potrebbe intercettare il traffico, non possa decifrare la trasmissione.

Leggi anche :Installa Let's Encrypt per Apache su FreeBSD

Il processo per ottenere un Let's Encrypt gratuito certificato in FreeBSD può essere notevolmente semplificato installando certboot client utility, che è il client ufficiale Let's Encrypt utilizzato per generare e scaricare certificati.

Requisiti

  1. Installa lo stack FBEMP (Nginx, MariaDB e PHP) in FreeBSD

Passaggio 1:Configura Nginx TLS/SSL

1. Per impostazione predefinita, il TLS/SSL la configurazione del server non è abilitata in FreeBSD perché il TLS le istruzioni di blocco del server sono commentate in Nginx file di configurazione predefinito.

Per attivare il TLS server in Nginx , apri nginx.conf file di configurazione, cerca la riga che definisce l'inizio di SSL server e aggiorna l'intero blocco in modo che assomigli all'esempio seguente.

# nano /usr/local/etc/nginx/nginx.conf

Estratto del blocco HTTPS di Nginx:

Nginx HTTPS Configurazione
server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

Il blocco sopra, oltre a SSL block, contiene anche alcune istruzioni per abilitare la compressione gzip e FastCGI Process Manager , utilizzato per passare il codice PHP a PHP-FPM gateway per eseguire applicazioni web dinamiche.

Dopo aver aggiunto il codice sopra a Nginx file di configurazione principale, non riavviare il demone né applicare le impostazioni prima di aver installato e ottenuto un Let's Encrypt certificato per il tuo dominio.

Fase 2:installa il client Certbot in FreeBSD

2. Il processo di installazione di Let's Encrypt certbot l'utilità client in FreeBSD implica il download del codice sorgente per py-certbot e compilarlo localmente, eseguendo i comandi seguenti.

# cd /usr/ports/security/py-certbot
# make install clean

3. Compilazione di py-certbot l'utilità richiede molto tempo rispetto all'installazione di un normale pacchetto binario. Durante questo periodo, è necessario scaricare una serie di dipendenze compilate localmente in FreeBSD.

Inoltre, sullo schermo apparirà una serie di prompt che ti chiederanno di selezionare quali pacchetti verranno utilizzati in fase di compilazione per ciascuna dipendenza. Nella prima schermata, seleziona i seguenti strumenti premendo [spazio] chiave, per la compilazione di python27 dipendenza, come illustrato nell'immagine sottostante.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • FILI
  • Supporto UCS4 per Unicode

4. Quindi, seleziona Documenti e FILI per strumenti gettext dipendenza e premi OK per continuare come mostrato nell'immagine sottostante.

5. Nella schermata successiva esci dai TEST opzione disabilitata per libffi-3.2.1 e premi OK per andare oltre.

6. Quindi, premi spazio per selezionare Documenti per py27-enum34 dipendenza, che installerà la documentazione per questo strumento, e premi OK per continuare, come illustrato nello screenshot qui sotto.

7. Infine, scegli di installare esempi di esempio per py27-openssl dipendenza premendo [spazio] tasto e premi OK per completare il processo di compilazione e installazione di py-certbot cliente.

8. Dopo il processo di compilazione e installazione di py-certbot terminata l'utilità, esegui il comando seguente per aggiornare lo strumento all'ultima versione del pacchetto, come illustrato negli screenshot seguenti.

# pkg install py27-certbot

9. Al fine di evitare alcuni problemi, potrebbe verificarsi durante l'ottenimento di un Let's Encrypt gratuito certificato, l'errore più comune è "pkg_resources.DistributionNotFound ”, assicurati che nel tuo sistema siano presenti anche le seguenti due dipendenze:py27-salt e py27-acme .

# pkg install py27-salt
# pkg install py27-acme

Fase 3:Installa Let's Encrypt Certificate per Nginx su FreeBSD

10. Per ottenere un certificato autonomo Let's Encrypt per il tuo dominio, esegui il comando seguente e fornisci il nome del dominio e tutti i sottodomini per i quali desideri ottenere i certificati implicando il -d bandiera.

# certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

11. Durante la generazione del certificato ti verrà chiesto di inserire il tuo indirizzo email e di accettare i termini di servizio di Let's Encrypt. Digita a dalla tastiera per accettare e continuare e ti verrà anche chiesto se desideri condividere il tuo indirizzo email con i partner di Let's Encrypt.

Nel caso in cui non desideri condividere il tuo indirizzo email, digita semplicemente no parola nel prompt e premi [invio] chiave per continuare. Dopo che i certificati per il tuo dominio sono stati ottenuti con successo, riceverai alcune note importanti che ti informeranno su dove sono archiviati i certificati nel tuo sistema e quando scadono.

12. Nel caso in cui desideri ottenere un certificato Let's Encrypt utilizzando "webroot ” aggiungendo il webroot directory del server Nginx per il tuo dominio, immetti il ​​seguente comando con il --webroot e -w bandiere. Per impostazione predefinita, se non hai modificato il percorso webroot di Nginx, dovrebbe trovarsi in /usr/local/www/nginx/ percorso di sistema.

# certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com

Come in --strandalone procedura per ottenere un certificato, il --webroot procedura ti chiederà inoltre di fornire un indirizzo email per il rinnovo del certificato e gli avvisi di sicurezza, da premere a per accettare i termini e le condizioni di Let's Encrypt e no o yes condividere o meno l'indirizzo e-mail dei partner Let's Encrypt come illustrato nell'esempio seguente.

Tieni presente che il client certbot può rilevare un indirizzo e-mail falso e non ti consentirà di continuare a generare un certificato finché non fornisci un indirizzo e-mail reale.

Campione Cerbot:
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 /usr/local/www/nginx/ for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/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 /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

Fase 4:aggiorna i certificati Nginx TLS

13. La posizione dei certificati e delle chiavi Let's Encrypt ottenuti in FreeBSD è /usr/local/etc/letsencrypt/live/www.yourdomain.com/ percorso di sistema. Emetti il ​​comando ls per visualizzare i componenti del tuo certificato Let's Encrypt:il file chain, il file fullchain, la chiave privata e il file del certificato, come illustrato nell'esempio seguente.

# ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/

14. Per installare i certificati Let's Encrypt per il tuo dominio nel server web Nginx, apri il file di configurazione principale di Nginx o il file di configurazione per il server Nginx TLS, nel caso si tratti di un file separato, e modifica le righe seguenti per riflettere il percorso dei certificati emessi da Let's Encrypt come illustrato di seguito.

# nano /usr/local/etc/nginx/nginx.conf

Aggiorna le seguenti righe in modo che appaiano come in questo esempio:

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

15. Inoltre, se la riga ssl_dhparam è presente in Nginx SSL configurazione, dovresti generare un nuovo 2048 un po' Diffie-Hellman tasto con il seguente comando:

# openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048 

16. Infine, per attivare la configurazione TLS di Nginx, controlla prima la configurazione globale di Nginx per eventuali errori di sintassi e, quindi, riavvia il servizio Nginx per applicare la configurazione SSL eseguendo i seguenti comandi.

# nginx -t
# service nginx restart

17. Conferma se il demone Nginx è vincolante su 443 port emettendo i seguenti comandi che possono elencare tutti i socket di rete aperti nel sistema in stato di ascolto.

# netstat -an -p tcp| grep LISTEN
# sockstat -4 

18. Puoi anche visitare il tuo indirizzo di dominio tramite HTTPS protocollo aprendo un browser e digitando il seguente indirizzo per confermare che i certificati Let's Encrypt funzionino come previsto. Poiché stai utilizzando certificati generati da un'autorità di certificazione valida, nel browser non dovrebbe essere visualizzato alcun errore.

https://www.yourdomain.com

19. L'utilità Openssl può anche aiutarti a trovare informazioni su un certificato ottenuto da Let's Encrypt CA, eseguendo il comando con le seguenti opzioni.

# openssl s_client -connect www.yourdomain.com:443

Nel caso in cui desideri forzare Nginx a indirizzare tutte le richieste da http a https ricevute per il tuo dominio sulla porta 80 su HTTPS , apri il file di configurazione Nginx, individua la direttiva server per la porta 80 e aggiungi la riga seguente dopo l'istruzione server_name come illustrato nell'esempio seguente.

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. La configurazione del rinnovo automatico per i certificati emessi dall'autorità Let's Encrypt prima che scadano può essere eseguita pianificando l'esecuzione di un processo cron una volta al giorno eseguendo il comando seguente.

# crontab -e

Cron task per rinnovare il certificato.

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

È tutto! Nginx ora può offrire ai tuoi visitatori applicazioni web sicure utilizzando i certificati gratuiti Let's Encrypt.


FreeBSD
  1. Proteggi Nginx con Lets Encrypt su CentOS 7

  2. Come proteggere il server Web Apache con Let's Encrypt su RHEL 8

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

  4. Proteggi Nginx con Let's Encrypt SSL su Debian 10/11

  5. Come installare Let's Encrypt SSL su Ubuntu 18.04 con Nginx

Come installare Nginx con Let's Encrypt TLS/SSL su Ubuntu 20.04

Come installare Nginx con Let's Encrypt SSL su Fedora 35

Come installare Nginx con Let's Encrypt SSL su Ubuntu 20.04 LTS

Come proteggere Nginx con Let's Encrypt certificato SSL

Come proteggere il server LEMP con Let's Encrypt Free SSL su Ubuntu 18.04 VPS

Come proteggere Nginx con Let's Encrypt su Ubuntu 20.04