GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare più SSL su un IP con Nginx

Con la carenza di spazio di indirizzi disponibile in IPv4, gli IP stanno diventando sempre più difficili da trovare e, in alcuni casi, sempre più costosi. Tuttavia, nella maggior parte dei casi, questo non è uno svantaggio. I server sono perfettamente in grado di ospitare più siti Web su un indirizzo IP, come hanno fatto per anni.

Ma c'è stato un tempo in cui si utilizzava un certificato SSL per proteggere il traffico verso il tuo sito richiede avere un indirizzo IPv4 separato per ogni dominio protetto. Questo non perché gli SSL fossero vincolati agli IP o addirittura ai server, ma perché la richiesta di informazioni sul certificato SSL non specificava quale dominio veniva caricato e quindi il server era costretto a rispondere con un solo certificato. Una mancata corrispondenza del nome ha causato un avviso di certificato non sicuro e, pertanto, al proprietario del server è stato richiesto di disporre di IP univoci per tutti gli host SSL.

Fortunatamente, le limitazioni di IPv4 hanno portato in primo piano nuove tecnologie e usabilità, in particolare Server Name Indication (SNI).

Perché ho bisogno di un SSL?

I certificati Secure Socket Layer (SSL) consentono la comunicazione crittografata a due vie tra un client e un server. Ciò consente qualsiasi protezione dei dati da occhi indiscreti, comprese informazioni sensibili come numeri di carte di credito o password. Gli SSL sono facoltativamente firmati da un'autorità di firma di terze parti nota, come GlobalSign. L'uso più comune di tali certificati è la protezione del traffico web su HTTPS.

Quando si naviga in un sito HTTPS, invece di visualizzare un indicatore positivo, i browser moderni mostrano un negativo indicatore per un sito che non utilizzando un SSL. Quindi, i siti Web che non dispongono di un SSL avranno subito una bandiera rossa per tutti i nuovi visitatori. I siti che vogliono mantenere la reputazione sono quindi costretti a ottenere un SSL.

Fortunatamente, è così facile ottenere e installare un SSL, anche gratuitamente, che questo si riduce a una formalità di base. Tratteremo le specifiche di questo di seguito.

Cos'è SNI?

L'indicazione del nome del server è una funzionalità del browser e del server Web in cui una richiesta HTTPS include un'intestazione aggiuntiva, nome_server , a cui il server può rispondere con il certificato SSL appropriato. Ciò consente a un singolo indirizzo IP di ospitare centinaia o migliaia di domini, ciascuno con il proprio SSL!

La tecnologia SNI è disponibile su tutti i moderni browser e software per server web, quindi circa il 98% degli utenti web, secondo W3, sarà in grado di supportarla.

Controllo pre-volo

Lavoreremo su un server VPS CentOS 7 che utilizza Nginx e PHP-FPM per ospitare siti Web senza alcun pannello di controllo (cPanel, Plesk, ecc.). Questo è comunemente indicato come stack "LEMP", che sostituisce Nginx per Apache nello stack "LAMP". Queste istruzioni saranno simili alla maggior parte delle altre versioni di Linux, sebbene l'installazione di Let's Encrypt per Ubuntu 18.04 sarà diversa. Includerò istruzioni affiancate sia per CentOS 7 che per Ubuntu 18.04.

Per il resto delle istruzioni, supponiamo che Nginx sia installato e configurato per ospitare più siti Web, inclusa la configurazione del firewall per aprire le porte necessarie (80 e 443). Siamo connessi tramite SSH a una shell sul nostro server come root.

NotaSe disponi di SSL per ogni dominio, ma non sono ancora installati, dovresti utilizzare il Passaggio 3a per aggiungerli manualmente. Se non disponi di SSL e desideri utilizzare il servizio gratuito Let's Encrypt per ordinarli e configurarli automaticamente, dovresti utilizzare il Fase 3b .

Passaggio 1:abilitazione di SNI in Nginx

Il nostro primo passo è già compiuto! Le moderne versioni del repository di Nginx verranno compilate con il supporto OpenSSL per le informazioni SNI del server per impostazione predefinita. Possiamo confermarlo sulla riga di comando con:

nginx -V

Questo produrrà un mucchio di testo, ma siamo interessati solo a questa riga:

...
TLS SNI support enabled
...

Se non hai una riga come questa, allora Nginx dovrà essere ricompilato manualmente per includere questo supporto. Questo sarebbe un caso molto raro, come in una versione obsoleta di Nginx, già compilata manualmente dal sorgente con una libreria OpenSSL diversa. La versione Nginx installata dal repository EPEL di CentOS 7 (1.12.2) e quella inclusa con Ubuntu 18.04 (1.14.0) supporteranno SNI.

Fase 2:configurazione degli host virtuali Nginx

Dal momento che hai già impostato più di un dominio in Nginx, probabilmente hai blocchi di configurazione del server impostati per ogni sito in un file separato. In caso contrario, assicuriamoci innanzitutto che i nostri domini siano impostati per il traffico non SSL. Se lo sono, puoi saltare questo passaggio. Lavoreremo su domain.com e example.com.

vim /etc/nginx/sites-available/domain.com

NotaSe non disponi di cartelle abilitate per i siti o disponibili per i siti e desideri utilizzarle, puoi creare /etc/nginx/sites-available e /etc/nginx/sites-enabled con la mkdir comando. Successivamente, all'interno di /etc/nginx/nginx.conf , aggiungi questa riga ovunque all'interno del http{} principale block (consigliamo di metterlo subito dopo quella riga include che parla di conf.d):

include /etc/nginx/sites-enabled/*;

Altrimenti, puoi effettuare le tue configurazioni in /etc/nginx/conf.d/*.conf .

Come minimo, inserisci le seguenti opzioni, sostituendo la radice del documento con il percorso reale dei file del tuo sito e aggiungendo qualsiasi altra variabile necessaria per i tuoi siti:

server {
listen 80;
server_name domain.com;
root /var/www/domain.com;
...
}

Un file simile dovrebbe essere impostato per esempio.com e qualsiasi altro dominio che desideri ospitare. Una volta creati questi file, possiamo abilitarli con un collegamento simbolico:

ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Ora riavviamo Nginx...

systemctl reload nginx

Questo ricarica i file di configurazione senza riavviare l'applicazione. Possiamo confermare che i due che abbiamo appena creato vengono caricati utilizzando:

nginx -T

Dovresti vedere il tuo nome_server riga sia per dominio.com che per esempio.com.

NotaIl ascolta riga inclusa nel blocco server sopra consentirà al sito di ascoltare su qualsiasi IP che si trova sul server. Se invece desideri specificare un IP, puoi utilizzare IP:port formattare invece, in questo modo:

server {
listen 123.45.67.89:80;
...
}

Fase 3a:aggiungi SSL esistenti agli host virtuali Nginx

Ora che abbiamo configurazioni di esecuzione valide, possiamo aggiungere gli SSL che abbiamo per questi domini come nuovi blocchi server in Nginx. Innanzitutto, salva il tuo certificato SSL e la chiave (privata) in una cartella globale sul server, con nomi che indichino il dominio pertinente. Supponiamo che tu abbia scelto la cartella globale di /etc/ssl/ . I nostri nomi, in questo caso, saranno /etc/ssl/domain.com.crt (che contiene il certificato stesso e qualsiasi catena di certificati dell'autorità di firma) e /etc/ssl/domain.com.key , che contiene la chiave privata. Modifica i file di configurazione che abbiamo creato:

vim /etc/nginx/sites-available/domain.com

Aggiungi un nuovo blocco di server sotto la fine di quello esistente (al di fuori dell'ultima parentesi graffa) con le seguenti informazioni:

server {
listen 443;
server_name domain.com;
root /var/www/domain.com;
ssl_certificate /etc/ssl/domain.com.crt;
ssl_certificate_key /etc/ssl/domain.com.key;
...
}

Nota la modifica della porta di ascolto su 443 (per HTTPS) e l'aggiunta del certificato_ssl e ssl_certificate_key Linee. Invece di riscrivere l'intero blocco, puoi copiare il blocco del server originale e quindi aggiungere queste righe extra, cambiando la porta di ascolto. Salva questo file e ricarica la configurazione di Nginx.

systemctl reload nginx

Confermiamo ancora una volta che la modifica è in atto utilizzando:

nginx -T

Per alcune configurazioni vedrai due righe server_name ciascuna per dominio.com ed esempio.com, una che utilizza la porta 80 e l'altra che utilizza la porta 443. Se lo fai, puoi saltare al passaggio 4, altrimenti vai al passaggio successivo.

Fase 3b:installa e configura Let's Encrypt

Impostiamo quindi il provider SSL gratuito Let's Encrypt per firmare automaticamente i certificati per tutti i domini che abbiamo appena impostato in Nginx. Su Ubuntu 18.04 , aggiungi il PPA e installa gli script del certificato con apt altitudine:

add-apt-repository ppa:certbot/certbot

apt-get update

apt-get install certbot python-certbot-nginx

In CentOS 7 , installiamo il repository EPEL e da lì installiamo l'helper del certificato.

yum install epel-release

yum install certbot python2-certbot-nginx

Su entrambi i sistemi, ora possiamo leggere la configurazione di Nginx e chiedere al Certbot di assegnarci dei certificati.

certbot --nginx

Questo ti porrà alcune domande su quali domini vorresti utilizzare (puoi lasciare l'opzione vuota per selezionare tutti i domini) e se desideri che Nginx reindirizzi il traffico al tuo nuovo SSL (lo faremmo!). Al termine del processo di firma, Nginx dovrebbe ricaricare automaticamente la sua configurazione, ma in caso contrario, ricaricala manualmente:

systemctl reload nginx

Ora puoi controllare la configurazione in esecuzione con:

nginx -T

Ora dovresti invece vedere due righe server_name ciascuna per dominio.com ed esempio.com, una che utilizza la porta 80 e l'altra che utilizza la porta 443.

I certificati Let's Encrypt sono validi solo per 90 giorni dall'emissione, quindi vogliamo assicurarci che vengano rinnovati automaticamente. Modifica il file cron per l'utente root eseguendo:

crontab -e

Il cron dovrebbe assomigliare a questo:

45 2 * * 3,6 certbot renew && systemctl reload nginx

Dopo aver salvato questo file, ogni mercoledì e sabato alle 2:45, il certbot comando verificherà eventuali rinnovi necessari, scaricherà e installerà automaticamente i certificati, seguiti da un ricaricamento della configurazione di Nginx.

Fase 4:verifica l'installazione e la validità

Ora dovremmo verificare la validità dei nostri SSL e assicurarci che i browser visualizzino correttamente il certificato. Visita sslcheck.liquidweb.com e digita i tuoi nomi di dominio per verificare l'SSL del sito sul tuo server. Dovresti vedere quattro segni di spunta verdi, che indicano la protezione SSL.

Ci auguriamo che il nostro tutorial su come installare SSL su più siti all'interno di un server ti sia piaciuto. I clienti Liquid Web hanno accesso al nostro team di supporto 24 ore su 24, 7 giorni su 7. Possiamo aiutarti con SSL firmato o ordinare un nuovo server per un facile trasferimento su Liquid Web.


Linux
  1. Come configurare più siti Web con il server Web Apache

  2. Come configurare l'SSL Cloudflare di origine con Nginx

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

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

  5. Come configurare il server Linux come router con NAT

Come configurare Nginx con supporto HTTP/2 su Ubuntu 18.04

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

Come impostare la sincronizzazione dell'ora con NTP su Ubuntu 18.04

Come configurare un server Seafile con Nginx su Ubuntu 18.04

Come configurare un server FTP con ProFTPD in Ubuntu 18.04

Come configurare un server di posta con Modoboa su Ubuntu 20.04