SSL o "Secure Sockets Layer". Secure Sockets Layer è un protocollo progettato per consentire alle applicazioni di trasmettere informazioni in modo sicuro e protetto. Utilizzando i certificati SSL è possibile l'invio e la ricezione di chiavi di protezione che consentono di criptare/decriptare le informazioni trasmesse utilizzando le stesse chiavi.
Una delle attività prioritarie che abbiamo individuato prima di mettere in produzione l'istanza di Odoo della nostra associazione, è stata quella di mettere in sicurezza il sistema mediante una connessione sicura SSL. Questa guida segue quindi i passi che ho effettuato sul nostro server su cui è installato Debian 9.
Per questo abbiamo sicuramente bisogno di un certificato che possiamo acquistare da i numerosi fornitori disponibili in rete, oppure possiamo scegliere Letsencrypt così come ho fatto per www.odoo-italia.org, ma andiamo con ordine ed iniziamo con l'istallazione di nginx che utilizzeremo come proxy. È possibile utilizzare Apache ed ottenere lo stesso risultato, magari sarà oggetto di una prossima guida.
Iniziamo con l'aggiornamento dei repositories del sistema operativo ed installiamo gli strumenti necessari:
apt-get update && apt-get upgrade
apt-get install vim git (anche se dovremmo averli già installati)
quindi installiamo nginx:
apt-get install nginx
e scarichiamo i sorgenti di letsencrypt:
cd /opt/
git clone http://github.com/letsencrypt/letsencrypt
a questo punto configuriamo nginx affinchè serva sulla porta 80 e renda accessibile una directory temporanea per letsencrypt:
cd /etc/nginx/sites-available
vi miodominio
server {
listen 80;
server_name www.miodominio.org;
# LETSENCRYPT
location '/.well-known/acme-challenge' {
default_type "text/plain";
root /tmp/letsencrypt;
autoindex on;
}
access_log /var/log/nginx/miodominio.access.log;
error_log /var/log/nginx/miodominio.error.log;
}
dopo aver salvato, non dimentichiamo di creare la cartella /tmp/letsencrypt
a questo punto abilitiamo la configurazione appena salvata per nginx linkando il file nella cartella /etc/nginx/sites-enabled e ricarichiamo nginx
ln -s /etc/nginx/sites-available/miodominio /etc/nginx/sites-enabled/
service nginx reload
ora lanciamo la prima volta letsencrypt in maniera da fargli scaricare automaticamente librierie necessarie e rispondiamo da terminale alle domande che ci pone, che ovviamente possono cambiare da release a release ma in linea di massima sono le seguenti:
/opt/letsencrypt/letsencrypt-auto
a questo punto farà i suoi downloads e nel caso gestissimo più configurazioni per i certificati,
inizierà chiedendoci quale per dominio attivare HTTPS. Quindi ci chiederà se effettuare il redirect da HTTP ad HTTPS,
io qui indico sempre 1 - no redirect, perchè preferisco modificare manualmente il file di configurazione visto che
devo successivamente indicare anche come raggiungere Odoo.
Quindi la procedura dovrà concludersi con un Congratulations! You have successfully enabled https://www.miodomino.org
Ora dobbiamo aggiungere la configurazione SSL ad nginx in maniera che possa servire Odoo sulla porta 443
cd /etc/nginx/sites-available
vi miodominio-ssl
upstream myOdoo { server localhost:8069; <<< qui è necessario specificare host e porta di Odoo }
server {
listen 443;
server_name www.miodominio.org;
ssl on;
ssl_ciphers ALL:!ADH:!MD5:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/letsencrypt/live/www.miodominio.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.miodominio.org/privkey.pem;
[...]
location / {
proxy_pass http://myOdoo;
[...]
}
# LETSENCRYPT
location '/.well-known/acme-challenge' {
default_type "text/plain";
root /tmp/letsencrypt;
autoindex on;
}
access_log /var/log/nginx/miodominio-ssl.access.log;
error_log /var/log/nginx/miodominio-ssl.error.log;
}
salviamo e linkiamo il file per attivarlo
ln -s /etc/nginx/sites-available/miodominio-ssl /etc/nginx/sites-enabled
service nginx reload
A questo punto il nostro Odoo sarà raggiungibile mediante HTTPS, ci sono sicuramente altri parametri che possono migliorare la configurazione qui esposta, come il redirect automatico da non-www a www e/o viceversa, ed è facile trovare in rete il materiale necessario, un esempio lo troviamo sulla guida ufficiale di Odoo. L'importante è che con queste indicazioni si riesca a mettere in sicurezza la nostra istanza di Odoo e si comprenda il meccanismo di base tra i vari componenti installati.
Concludo con un consiglio che è quello si configurare crontab affinchè esegua periodicamente l'aggiornamento dei certificati:
crontab -e
0 4 1 * * /opt/letsencrypt/letsencrypt-auto renew
in questo caso alle 4:00 di ogni primo del mese viene invocato il comando per aggiornare i certificati presenti.
Saluti
Configuriamo Odoo con SSL