LINUX

Come creare un certificato SSL autofirmato per Nginx su Ubuntu 18.04

Crea un certificato SSL autofirmato Nginx

SSL è l’acronimo di “Secure Sockets Layer”, ovvero la tecnologia di sicurezza standard progettata per creare una connessione crittografata tra un server Web e un browser Web. Questo collegamento garantisce che tutte le informazioni trasmesse tra il server e il browser rimangano private e sicure. Lo scopo principale dei certificati SSL è garantire la sicurezza del sito Web e crittografare i dati trasferiti tra il client e il browser per prevenire qualsiasi furto di informazioni sensibili come dettagli della carta di credito, numeri di account e password ecc.

Un certificato autofirmato è un certificato firmato dalla persona che lo ha creato, piuttosto che da un’autorità di certificazione (CA) attendibile. La maggior parte dei clienti e delle organizzazioni è tentata di utilizzare certificati SSL autofirmati invece di quelli emessi e verificati da un’autorità di certificazione attendibile, principalmente a causa della differenza di costo. Ma fornisce comunque lo stesso livello di crittografia fino a un certo limite.

In questo articolo, spiegherò come creare un certificato SSL autofirmato su un server Ubuntu 18.04 con server web Nginx.

Prerequisiti

Un server ben configurato con privilegi di root e libreria OpenSSL. La libreria OpenSSL è necessaria per generare il tuo certificato. Esegui il seguente comando sul tuo server Ubuntu per vedere se hai già installato OpenSSL.

# which openssl
/usr/bin/openssl

Se quel comando non ha restituito il file binario, dovremo installarlo usando il comando:

#apt install openssl

Creazione del certificato autofirmato

SSL consiste principalmente di due parti, una è la chiave privata e l’altra è il certificato pubblico. La chiave SSL viene mantenuta privata sul server limitatamente all’utente root. Viene effettivamente utilizzato per crittografare i contenuti inviati ai client. Il certificato SSL pubblico è condiviso con chiunque richieda il contenuto. Può essere utilizzato per decrittografare il contenuto firmato dalla chiave SSL privata associata. Qui, utilizzo questo comando per generare un certificato autofirmato vale a dire example.com.crt e una chiave privata example.com.key (qui utilizzo example.com.pem come nome file) utilizzando lo strumento OpenSSL.

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.pem

Si prega di consultare i dettagli di ciascuna opzione di seguito:

  • req: questo sottocomando viene utilizzato per creare un nuovo certificato X.509. “X.509” è uno standard di infrastruttura a chiave pubblica a cui aderiscono SSL e TLS per la gestione di chiavi e certificati.
  • -x509: questo modifica ulteriormente il sottocomando precedente dicendo all’utilità che vogliamo creare un certificato autofirmato.
  • -nodes: viene utilizzato per omettere l’opzione password per proteggere il nostro certificato.
  • -days 365: questa opzione imposta la validità del certificato in giorni. L’abbiamo sistemato qui per un anno.
  • -newkey rsa:2048: specifica che vogliamo generare una nuova chiave RSA a 2048 bit insieme al certificato.
  • -keyout: questa opzione indica a OpenSSL dove posizionare il file della chiave privata generato.
  • -out: questa opzione indica a OpenSSL dove posizionare il certificato generato.

Durante l’esecuzione di questo comando, ci chiederà di fornire i dettagli del dominio/client per generare una richiesta di firma del certificato (CSR). È possibile fornire questi dettagli come richiesto.

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:Victoria
Locality Name (eg, city) []:Melbourne
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide LLC
Organizational Unit Name (eg, section) []:Web
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:admin@example.com

Ora abbiamo il certificato autofirmato appena generato e la chiave privata sono le seguenti posizioni: /etc/ssl/certs/example.com.pem e /etc/ssl/private/example.com.key. Successivamente, dovremmo creare un forte gruppo Diffie-Hellman, che viene utilizzato per negoziare il Perfect Forward Secrecy con i clienti. Puoi eseguire questo comando per crearne uno.

#openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Questo potrebbe richiedere del tempo per essere completato, ma quando sarà finito, avremo un forte gruppo DH a /etc/ssl/certs/dhparam.pem che possiamo usare nella nostra configurazione.

Configurazione di Nginx per l’utilizzo di certificati autofirmati

Prima di iniziare, dobbiamo assicurarci che il server web Nginx sia installato sul nostro server Ubuntu 18.04. Se non è installato, puoi installarlo usando questo semplice comando:

#apt install nginx

Ho installato e attivato questo servizio sul mio server.

# nginx -v
nginx version: nginx/1.14.0 (Ubuntu)

#systemctl enable nginx
#systemctl start nginx
#systemctl status nginx

Prossimo. possiamo configurare Nginx per utilizzare SSL. Te lo spiego in tre passaggi:

  1. Creazione di una configurazione del frammento con i dettagli del certificato SSL generato.
  2. Creazione di una configurazione shard per mantenere una configurazione SSL forte e sicura, superando possibili vulnerabilità SSL.
  3. Aggiorna l’host virtuale del dominio con le configurazioni dello snippet di cui sopra per abilitare SSL

Passaggio 1: creare una configurazione stub con i dettagli del certificato SSL

Creiamo un nuovo file di configurazione dello snippet, ovvero “self-signed.conf” per indicare i dettagli generati dal certificato autofirmato all’interno della cartella degli snippet di Nginx: /etc/nginx/snippets/ come sotto:

# cat /etc/nginx/snippets/self-signed.conf
# Self signed certificates generated by the ssl-cert package
# Don't use them in a production server!

ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;

Qui dobbiamo specificare il percorso del nostro certificato generato:/etc/ssl/certs/example.com.pem e percorso chiave: /etc/ssl/private/example.com.key per la suddetta direttiva.

Passaggio 2: crea una configurazione shard per mantenere le tue impostazioni SSL solide e sicure, superando possibili vulnerabilità SSL

In secondo luogo, dobbiamo mantenere una configurazione del server SSL completamente funzionale e forte che protegga il nostro server da tutte le possibili vulnerabilità SSL. Ho configurato il mio Nginx con una potente suite di crittografia SSL e abilitato alcune funzionalità avanzate per garantire la sicurezza del server. Tutti questi parametri sono inclusi nel file: /etc/nginx/snippets/ssl-params.conf

cat /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling off;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Puoi ottenere questi consigli di Nginx Cipher in Elenco di cifratura. Questi parametri verranno utilizzati nelle future configurazioni Nginx per SSL. Come puoi vedere, ho impostato ssl_dhparam impostazione per puntare al file Diffie-Hellman che abbiamo generato in precedenza qui. Poiché utilizziamo un certificato autofirmato, il SSL stapling non verrà utilizzato. Pertanto, l’ho restituito off oppure Nginx emetterà semplicemente un avviso come questo nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate. Dopo aver apportato queste modifiche, è possibile salvare la configurazione ed uscire.

Passaggio 3: aggiornare l’host virtuale del dominio con le configurazioni dello snippet di cui sopra per abilitare SSL

Siamo pronti con la configurazione dei frammenti necessaria, ora possiamo includerli nel nostro host virtuale di dominio e abilitarli SSL. Qui in questo articolo sto usando il file di configurazione Nginx predefinito che si trova in /etc/nginx/sites-available/default. Ho modificato questo file per abilitare SSL e recuperare i certificati autofirmati generati. Si prega di consultare la sezione modificata di seguito in questa configurazione:

cat /etc/nginx/sites-available/default

#
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration

listen 443 ssl default_server;
listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
include snippets/self-signed.conf;
include snippets/ssl-params.conf;

Ora possiamo salvare queste configurazioni e riavviare il servizio Nginx per rendere effettive queste modifiche.

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#systemctl restart nginx

TEST

Questo è il nostro passaggio finale in cui possiamo aprire il nostro browser e provare ad accedere al nostro IP del server all’URL >> https://Server_IP or Hostname. Mostrerà un avviso di sicurezza, poiché stiamo utilizzando un certificato autofirmato, puoi ignorare tale avviso e fare clic per confermare la sicurezza per continuare, come mostrato nello screenshot.

Avviso certificato

Leggi anche:

È tutto! Ho configurato con successo Nginx con certificato autofirmato, utilizzando metodi di crittografia avanzata per connessioni sicure al client. Spero che questo articolo ti sia stato utile! Si prega di pubblicare i vostri preziosi commenti e suggerimenti al riguardo.

Related Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Back to top button
Close