PRE-REQUISITI
Prima di iniziare, è necessario disporre di un utentza root sul sistem Ubuntu Server.
Inoltre, sarà necessario installare il server web Nginx.
CREAZIONE DEL CERTIFICATO SSL
TLS / SSL funziona utilizzando una combinazione di un certificato pubblico e di una chiave privata. Il codice SSL viene mantenuto segreto sul server. Viene utilizzato per crittografare i contenuti inviati ai client. Il certificato SSL è pubblicamente condiviso con chiunque richiede il contenuto. Può essere utilizzato per decrittografare il contenuto firmato dal relativo codice SSL.
Possiamo creare chiave pubblica e priovata con OpenSSL lanciando il comando:
0 |
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
|
0
1
2
3
4
5
6
|
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Torino
Locality Name (eg, city) []:Torino
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ACME S.r.l.
Organizational Unit Name (eg, section) []:ACME S.r.l.
Common Name (e.g. server FQDN or YOUR name) []:NOME_DEL_SERVER (va bene mettere anche lì'IP Address)
Email Address []:admin@dominio.com
|
Entrambi i file creati verranno collocati nelle sottodirectory appropriate della directory /etc/ssl.
Mentre utilizziamo OpenSSL, dobbiamo anche creare il gruppo Diffie-Hellman, utilizzato per negoziare Perfect Forward Secrecy con i clienti.
Creiamo il gruppo con questo comando:
0 |
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
|
Questa operazione può richiedere diversi minuti ed al termine avremo un gruppo DH in /etc/ssl/certs/dhparam.pem che possiamo usare nella nostra configurazione.
CONFIGURARE NGINX PER L’UTILIZZO DEL CERTIFICATO SSL
Abbiamo creato i nostri file chiavi e certificati sotto la directory /etc/ssl.
Ora abbiamo solo bisogno di modificare la nostra configurazione Nginx per utilizzare l’SSL
Innanzitutto, creiamo un nuovo snippet di configurazione Nginx nella directory /etc/nginx/snippets.
Per distinguere correttamente lo scopo di questo file, lo chiamiamo self-signed.conf:
0 |
sudo nano /etc/nginx/snippets/self-signed.conf
|
All’interno del file creato inseriamo le seguenti righe quindi salviamo e usciamo
0
1
|
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
|
Successivamente creeremo un altro snippet che definirà alcune impostazioni SSL. Questo proteggerà Nginx con una forte suite di codici SSL e abiliterà alcune funzionalità avanzate che contribuiranno a mantenere sicuro il nostro server.
I parametri che verranno impostati possono essere riutilizzati nelle future configurazioni di Nginx, quindi daremo al file un nome generico:
0 |
sudo nano /etc/nginx/snippets/ssl-params.conf
|
Per impostare in sicurezza la Nginx SSL, utilizzeremo le raccomandazioni di Remy van Elst sul sito Cipherli.st.
Inseriamo quindi nel file creato le seguenti righe di codice:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
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 on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
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;
|
Salviamo il file ed usciamo dall’editor.
A questo punto è possibile customizzare la configurazione del nostro Nginx per l’utilizzo del certificato SSL creato.
Grande! Tra mille che hanno provato tu ci sei riuscito! GRANDE!!!