UPDATED (2 september. 2020)
Een jaar is verstreken sinds ik dit verhaal publiceerde. Sindsdien is Ubuntu 20.04 uitgebracht en is de nieuwste versie van OpenSSL gepubliceerd op 6 augustus 2020. In principe was het enige dat ik in dit verhaal veranderde de letter die verwijst naar OpenSSL 1.1.1 series, d.w.z. het veranderen van de letter ‘c’ in de originele versie naar de letter ‘g’ in de commando’s van de bijgewerkte versie. Hoewel deze veranderingen in de commando’s terug te vinden zijn, blijven de plaatjes die de resultaten van deze commando’s illustreren ongewijzigd. Veel leesplezier!
Als u het SSL/TLS protocol in uw toepassing gebruikt, of u staat op het punt dit te doen, is het raadzaam om OpenSSL up-to-date te houden. Dit is speciaal waar niet alleen vanwege de rol die het speelt bij het uitgeven van certificaten, maar ook na de lessen die zijn geleerd met Heartbleed.
Ubuntu 20.04.1 (de nieuwste 20.04-update vanaf september 2020) wordt geleverd met “OpenSSL 1.1.1 31 mrt 2020” geïnstalleerd en Ubuntu 18.04.03 (de nieuwste 18.04-update vanaf augustus 2019) wordt geleverd met “OpenSSL 1.1.1 11 sep 2018” verzonden. Op dit moment is de laatste versie van OpenSSL 1.1.1 series “1.1.1g” verscheept op 6 aug. 2020.
In dit verhaal zal ik de lezer begeleiden over hoe verder te gaan met deze update zonder enige interoperabiliteit te verbreken met bestaande applicaties die afhankelijk zijn van OpenSSL.
Ik ga ervan uit dat de lezer bekend is met bash-commando’s en, natuurlijk, de update zal plaatsvinden op een Ubuntu 20.04 of 18.04 box. Hoewel ik geen reden zie waarom deze procedure niet zou werken op Ubuntu 16.04 (als je het wel weet, laat het me dan weten), is het niet getest.
Het eerste wat je moet doen is controleren welke versie is geïnstalleerd:
$ openssl version
In mijn geval was “OpenSSL 1.1.1 20 Mar 2020” het resultaat.
Stap 1: Download openssl-1.1.1g van hier en sla het op in ~/Downloads directory:
$ cd ~/Downloads
$ wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
Step 2: Controleer op corruptie door de SHA256 checksum van hier te vergelijken met de berekende checksum van het gedownloade zip-bestand:
$ 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
In de onderstaande afbeelding zijn de bovenstaande commando’s geel onderstreept en het checksum-resultaat (OK in dit geval) is groen onderstreept:
Stap 3: Controleer de handtekening van het gedownloade zip-bestand
Voordat we de inhoud van het gedownloade zip-bestand installeren, controleren we de handtekening ervan, met behulp van GnuPG dat met Ubuntu wordt meegeleverd (deze is te vertrouwen zoals vermeld bij GnuPG).
Op de OpenSSL download pagina vinden we de volgende informatie: “PGP keys for the signatures are available from the OMC page. Huidige leden die releases tekenen zijn onder andere Richard Levitte en Matt Caswell.” Als we de link op de OMC pagina volgen komen we bij de publieke sleutels van de leden. De volgende stap is dus het downloaden van de benodigde sleutels (een in levitte.txt en de andere in caswell.txt) en ze te importeren in de GnuPG database. Met behulp van 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
Om deze handtekeningen te vertrouwen is het een goede gewoonte om het certificaat van het domein te verifiëren (onderstaande figuur). Met behulp van Google’s Chrome Security tab binnen de Developer tools, kan men valideren dat de uitgever ” Let’s Encrypt Authority X3″ (vertrouwd door de browser) het certificaat heeft uitgegeven aan het domein www.openssl.org, wat betekent dat dit een Domein Validatie certificaat is, waardoor iedereen de gedownloade handtekeningen kan vertrouwen.
Beide sleutels worden geïmporteerd en vervolgens in een lijst gezet zoals hieronder:
$ gpg --import caswell.txt
$ gpg --import levitte.txt
$ gpg --list-keys
De volgende afbeelding bevat het resultaat van de bovenstaande commando’s die geel onderstreept zijn: