GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come creare un certificato SSL autofirmato per Nginx su Ubuntu 18.04

SSL sta per "Secure Sockets Layer", che è la tecnologia di sicurezza standard pensata per creare un collegamento crittografato 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 il furto di informazioni sensibili come dettagli di carte di credito, numeri di conto e password ecc.

Un certificato autofirmato è un certificato firmato dalla persona che lo crea anziché 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 fidata principalmente a causa della differenza di costo. Ma offre ancora lo stesso livello di crittografia fino a un limite.

In questo articolo spiegherò come creare un certificato SSL autofirmato su un server Ubuntu 18.04 con il 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 nel tuo server Ubuntu per vedere se hai già installato OpenSSL.

# which openssl
/usr/bin/openssl

Se il comando which non ha restituito il file binario, dovremo installarlo utilizzando il comando:

#apt install openssl

Creazione del certificato autofirmato

SSL comprende principalmente due parti, una è la chiave privata e l'altra è il certificato pubblico. La chiave SSL viene mantenuta privata sul server limitato all'utente root. Viene effettivamente utilizzato per crittografare il contenuto inviato ai client. Il certificato SSL pubblico è condiviso con chiunque ne richieda il contenuto. Può essere utilizzato per decrittografare il contenuto firmato dalla chiave SSL privata associata. Qui, sto usando questo comando per generare un certificato autofirmato, vale a dire example.com.crt e una chiave privata example.com.key (qui sto usando example.com.pem come nome del file) usando 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 vedere 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 SSL e TLS aderiscono 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 ignorare l'opzione passphrase per proteggere il nostro certificato.
  • -days 365:questa opzione imposta la validità del certificato in giorni. Lo stiamo impostando per un anno qui.
  • -newkey rsa:2048:Questo specifica che vogliamo generare una nuova chiave RSA con una lunghezza di 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 verrà chiesto di fornire i dettagli del dominio/client per generare una richiesta di firma del certificato (CSR). Puoi 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 []:[email protected]

Ora abbiamo il nostro certificato autofirmato appena generato e la chiave privata è in queste 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 nella negoziazione di 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 una volta terminato avremo un forte gruppo DH su /etc/ssl/certs/dhparam.pem che possiamo utilizzare 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 abilitato 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. Lo spiegherò in tre passaggi:

  1. Creazione di una configurazione snippet con i dettagli del certificato SSL generato.
  2. Creazione di una configurazione snippet per mantenere le impostazioni SSL forti e sicure superando possibili vulnerabilità SSL.
  3. Aggiornamento dell'host virtuale del dominio con le configurazioni degli snippet sopra per abilitare SSL

Passaggio 1:creazione di una configurazione snippet con i dettagli del certificato SSL

Creiamo un nuovo file di configurazione dello snippet denominato "self-signed.conf" per indicare i dettagli del nostro certificato autofirmato generato all'interno della cartella dello snippet Nginx:/etc/nginx/snippets/ come di seguito:

# 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 è necessario specificare il percorso del certificato generato:/etc/ssl/certs/example.com.pem e Percorso chiave:/etc/ssl/private/example.com.key per la direttiva di cui sopra.

Passaggio 2:creazione di una configurazione snippet per mantenere le impostazioni SSL forti e sicure superando possibili vulnerabilità SSL

In secondo luogo, dobbiamo mantenere una configurazione del server SSL completamente funzionante e robusta che protegga il nostro server da tutte le possibili vulnerabilità SSL. Ho configurato il mio Nginx con una potente suite di crittografia SSL e ho 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 sulla crittografia Nginx nell'elenco di crittografia. Questi parametri verranno utilizzati nelle future configurazioni di Nginx per SSL. Come puoi vedere abbiamo impostato il ssl_dhparam impostazione per puntare al file Diffie-Hellman che abbiamo generato in precedenza qui. Poiché utilizziamo un certificato autofirmato, la SSL stapling non verrà utilizzato. Quindi, l'ho disattivato off oppure Nginx genererà 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:aggiornamento dell'host virtuale del dominio con le configurazioni degli snippet sopra per abilitare SSL

Siamo pronti con la nostra configurazione di snippet richiesta, ora possiamo includerli nel nostro host virtuale di dominio e abilitare 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 vedere 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 ultimo passaggio, in cui possiamo aprire il nostro browser e provare ad accedere al nostro server IP all'URL>> https://Server_IP or Hostname . Verrà visualizzato un avviso di sicurezza poiché stiamo utilizzando un certificato autofirmato, puoi ignorare tale avviso e fare clic per confermare la sicurezza per procedere ulteriormente come mostrato nell'istantanea.

Leggi anche :

  • Mkcert - Crea certificati SSL per lo sviluppo locale su Linux
  • Come installare i certificati SSL Let's Encrypt su Ubuntu 18.04
  • Come configurare NGINX come proxy inverso utilizzando Docker

È tutto! abbiamo configurato correttamente Nginx con il certificato autofirmato utilizzando metodi di crittografia avanzati per connessioni client sicure. Spero che questo articolo ti sia utile! Pubblica i tuoi preziosi commenti e suggerimenti su questo.


Ubuntu
  1. Come installare un certificato SSL autofirmato in cPanel

  2. Come creare un'unità USB Ubuntu avviabile per Mac in OS X

  3. Come fare in modo che Apache 2 smetta di chiedere una password per un certificato SSL?

  4. Come aggiungere un certificato/chiave client SSL a livello globale in Ubuntu?

  5. Come creare un certificato SSL autofirmato su Ubuntu 18.04

Come configurare Let's Encrypt certificato SSL con Nginx su Ubuntu 18.04 e Ubuntu 16.04

Come generare una richiesta di firma del certificato (CSR) su Ubuntu

Come installare il certificato SSL gratuito per Nginx su CentOS 8

Come installare Let's Encrypt SSL per Nginx su Ubuntu 18.04 LTS

Come creare un certificato SSL autofirmato locale su CentOS 8

Come abilitare il tasto Alt Gr come Alt R per Emacs su Ubuntu 16.04?