Configurando il nostro server personale, magari per creare un cloud casalingo, ci siamo resi conto che di default le connessioni sono in chiaro (HTTP) senza alcuna protezione. Anche inserendo l’autenticazione rischiamo di mostrare tutto il nostro traffico di rete ad un utente malintenzionato, che può recuperare con facilità i dati d’accesso e il contenuto della connessione tra noi e il server. Per proteggere la connessione dovremo utilizzare una connessione cifrata (HTTPS), rendendo il nostro server accessibile solo con connessioni SSL/TLS. Per far ciò dovremo dotare il nostro server di un certificato. Lo scopo di questa guida è mostrarvi come generare certificati per server auto-gestiti senza dover pagare per ottenere certificati firmati da aziende del settore.
Generare certificati per server
Certificati e CA
Prima di proseguire bisogna conoscere un minimo di teoria su come funzionano le connessioni cifrate. Senza entrare troppo nello specifico (ci sono i libri universitari a riguardo) per poter accettare connessioni cifrate è necessario che il nostro server mostri un certificato a chiunque si connetta. Questo certificato serve ad identificare il server e a garantirci di non essere connessi al server sbagliato.
Tutti i siti che offrono connessioni cifrate (HTTPS) dispongono di un certificato rilasciato da una società che opera nel settore (CA, o Certificate Authority), il cui compito è appunto “autenticare” quel sito e associarlo ad una precisa persona/ente/società.
In basso possiamo osservare il certificato delle connessioni cifrate di Facebook.
Quando contattiamo un server che accetta connessioni HTTPS, il nostro browser leggerà il certificato e controllerà se esso sia autentico; questo controllo viene effettuato controllando quale CA ha rilasciato il certificato.
Se un malintenzionato prova a “rubare” il traffico in un sito HTTPS copiandone lo stile e fornendo un URL simile, il certificato non corrisponderà a quello fornito dalla CA o non sarà autenticato (sarà auto-gestito), quindi il browser reagirà mostrando una finestra d’allarme.
Certificati auto-gestiti
Nel caso di un server personale non è necessario autenticare il nostro certificato presso enti terzi, visto che saremo verosimilmente gli unici ad usufruire del server e a possedere una copia del certificato. Quindi generare certificati per server non ha costi per i privati: basta crearsi il certificato con gli strumenti giusti ed inserirlo sul server e (se necessario) fornire il certificato ai client da connettere. Quando tenteremo di accedere al nostro server con un browser Web dovremo ignorare la finestra d’allarme sul certificato, essendo auto-generato non ha alcuna società CA dietro che l’abbia autenticato.
Mentre se ci connettiamo con altri programmi (FTPS o SFTP) dovremo avere a portata di mano il certificato al momento della connessione e verificare che la chiave privata fornita sia corrispondente a quella fornita con il certificato.
Generare certificati per server con OpenSSL
Il miglior modo per generare certificati per server personali è utilizzare lo strumento gratuito e open source OpenSSL.
OpenSSL è disponibile su numerose distribuzioni GNU/Linux. Per comodità vedremo come generare il nostro certificato utilizzando Ubuntu 16.04 LTS, ma potremo utilizzare qualsiasi altra distribuzione.
Una volta avviato Ubuntu (e se siete da Windows possiamo creare per lo scopo una macchina virtuale) apriamo un terminale e digitiamo il seguente comando.
openssl req -x509 -nodes -days 3650 -newkey rsa:1024 -keyout "miachiave.pem" -out "miocertificato.pem"
Abbiamo appena generato un certificato a scadenza lunga (10 anni) con una forte crittografia (RSA 1024-bit) e relativa chiave di cifratura (keyout).
Una volta lanciato il comando il terminale ci chiederà alcune informazioni aggiuntive per il certificato. Utilizziamo lo schema in basso per compilare ogni voce e premiamo Enter ad ogni passaggio.
- Country Name : digitiamo IT;
- State or Province Name: digitiamo Italia;
- Locality Name: inseriamo il nome della città in cui viviamo;
- Organization Name: possiamo inserire qualsiasi nome a piacere;
- Organizational Unit Name: digitiamo Amministrazione;
- Common Name: se state generando un certificato per un sito personale inseriamo l’URL del nostro sito, in alternativa utilizziamo nome e cognome;
- Email Address: possiamo inserire una email a piacere o anche lasciare il campo vuoto.
Al termine dei passaggi avremo ottenuto nella Home di Ubuntu due file in formato PEM: il certificato vero e proprio e il file con la chiave di cifratura.
Possiamo caricare questi due file su qualsiasi server o programma supporti le connessioni TLS.
Società CA per certificati autenticati
Se siete in cerca di un certificato autenticato per il sito o il server possiamo rivolgerci ad una delle società elencate di seguito.
- COMODO SSL
- Thawte
- SSL Symantec (ex VeriSign)
- RapidSSL
- DigiCert
- Google Internet Authority G2
Certificati CA gratuiti
Vogliamo un certificato autenticato gratuitamente? Possiamo utilizzare i servizi offerti dai seguenti siti.