Aggiornato (2 settembre 2020)
È passato un anno da quando ho pubblicato questa storia. Da allora Ubuntu 20.04 è stato rilasciato e l’ultima versione di OpenSSL è stata pubblicata il 6 agosto 2020. Fondamentalmente l’unica cosa che ho cambiato in questa storia è stata la lettera che fa riferimento alla serie OpenSSL 1.1.1, cioè cambiando la lettera ‘c’ nella versione originale alla lettera ‘g’ nei comandi di quella aggiornata. Mentre questi cambiamenti si riflettono nei comandi, le immagini che illustrano i risultati di questi comandi rimangono inalterate. Buona lettura!
Se usate il protocollo SSL/TLS nella vostra applicazione, o state per farlo, la raccomandazione è di tenere OpenSSL aggiornato. Questo è particolarmente vero non solo per il ruolo che svolge nel rilascio dei certificati, ma anche dopo le lezioni apprese con Heartbleed.
Ubuntu 20.04.1 (l’ultimo aggiornamento 20.04 a partire da settembre 2020) viene fornito con “OpenSSL 1.1.1 31 mar 2020” installato e Ubuntu 18.04.03 (l’ultimo aggiornamento 18.04 a partire da agosto 2019) viene fornito con “OpenSSL 1.1.1 11 set 2018”. In questo momento l’ultima versione della serie OpenSSL 1.1.1 è “1.1.1g” spedita il 6 agosto. 2020.
In questa storia guiderò il lettore su come procedere con questo aggiornamento senza rompere alcuna interoperabilità con le applicazioni esistenti che dipendono da OpenSSL.
Presumo che il lettore abbia familiarità con i comandi bash e, naturalmente, l’aggiornamento sarà su una scatola Ubuntu 20.04 o 18.04. Anche se non vedo alcun motivo per cui questa procedura non dovrebbe funzionare su Ubuntu 16.04 (se lo fate fatemelo sapere), non è stata testata.
La prima cosa da fare è controllare quale versione è installata:
$ openssl version
Nel mio caso “OpenSSL 1.1.1 20 Mar 2020” è stato il risultato.
Step 1: Scaricare openssl-1.1.1g da qui e salvarlo nella directory ~/Downloads:
$ cd ~/Downloads
$ wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
Step 2: Controllare la corruzione confrontando la somma di controllo SHA256 formata qui con la somma di controllo calcolata del file zip scaricato:
$ wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz.sha256
$ echo "$(cat openssl-1.1.1g.tar.gz.sha256) openssl-1.1.1g.tar.gz" | sha256sum --check
Nell’immagine qui sotto i comandi sopra sono sottolineati in giallo e il risultato del checksum (OK in questo caso) è sottolineato in verde:
Step 3: Controllare la firma del file zip scaricato
Prima di installare il contenuto del file zip scaricato verificheremo la sua firma, usando GnuPG fornito con Ubuntu (questo può essere affidabile come menzionato in GnuPG).
Nella pagina di download di OpenSSL troviamo la seguente informazione: “Le chiavi PGP per le firme sono disponibili dalla pagina OMC. Gli attuali membri che firmano i rilasci includono Richard Levitte e Matt Caswell”. Seguendo il link alla pagina OMC raggiungiamo le chiavi pubbliche dei membri. Il prossimo passo è quindi scaricare le chiavi richieste (una in levitte.txt e l’altra in caswell.txt) e importarle nel database di GnuPG. Usando curl:
$ curl 'http://pool.sks-keyservers.net:11371/pks/lookup?op=get&search=0x7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C' > levitte.txt
$ curl 'http://pool.sks-keyservers.net:11371/pks/lookup?op=get&search=0x8657ABB260F056B1E5190839D9C4D26D0E604491' > caswell.txt
Per fidarsi di queste firme è buona norma verificare il certificato del dominio (figura sotto). Usando la scheda Sicurezza di Google Chrome all’interno degli strumenti per sviluppatori, si può convalidare che l’emittente “Let’s Encrypt Authority X3” (di cui il browser si fida) ha rilasciato il certificato al dominio www.openssl.org, il che significa che si tratta di un certificato Domain Validation, che permette a chiunque di fidarsi delle firme scaricate.
Entrambe le chiavi sono importate e poi elencate come segue:
$ gpg --import caswell.txt
$ gpg --import levitte.txt
$ gpg --list-keys
La prossima illustrazione contiene il risultato dei comandi di cui sopra che sono sottolineati in giallo: