UPDATED (2 września. 2020)
Minął rok od czasu, gdy opublikowałem ten artykuł. Od tego czasu Ubuntu 20.04 zostało wydane, a najnowsza wersja OpenSSL została opublikowana 6 sierpnia 2020 roku. W zasadzie jedyną rzeczą, którą zmieniłem w tej historii była litera, która odnosi się do serii OpenSSL 1.1.1, czyli zmiana litery „c” w oryginalnej wersji na literę „g” w komendach zaktualizowanej wersji. Podczas gdy te zmiany są odzwierciedlone w komendach, obrazki ilustrujące wyniki tych komend pozostają niezmienione. Miłej lektury!
Jeśli używasz protokołu SSL/TLS w swojej aplikacji, lub zamierzasz to zrobić, zalecane jest aktualizowanie OpenSSL. Jest to szczególnie prawdziwe nie tylko ze względu na rolę, jaką odgrywa w wydawaniu certyfikatów, ale także po lekcjach wyniesionych z Heartbleed.
Ubuntu 20.04.1 (najnowsza aktualizacja 20.04 od września 2020) jest dostarczany z zainstalowanym „OpenSSL 1.1.1 31 Mar 2020”, a Ubuntu 18.04.03 (najnowsza aktualizacja 18.04 od sierpnia 2019) jest dostarczany z „OpenSSL 1.1.1 11 Sep 2018”. W tej chwili najnowsza wersja serii OpenSSL 1.1.1 to „1.1.1g” wysłana 6 sierpnia. 2020.
W tej historii poprowadzę czytelnika, jak postępować z tą aktualizacją bez łamania jakiejkolwiek interoperacyjności z istniejącymi aplikacjami, które zależą od OpenSSL.
Zakładam, że czytelnik jest zaznajomiony z poleceniami basha i oczywiście aktualizacja będzie na pudełku Ubuntu 20.04 lub 18.04. Chociaż nie widzę powodu, dla którego ta procedura nie powinna działać na Ubuntu 16.04 (jeśli tak, proszę dać mi znać), nie była ona testowana.
Pierwszą rzeczą do zrobienia jest sprawdzenie, jaka wersja jest zainstalowana:
$ openssl version
W moim przypadku „OpenSSL 1.1.1 20 Mar 2020” było wynikiem.
Krok 1: Pobierz openssl-1.1.1g stąd i zapisz go w katalogu ~/Downloads:
$ cd ~/Downloads
$ wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
Krok 2: Sprawdź uszkodzenie porównując sumę kontrolną SHA256 stąd z obliczoną sumą kontrolną pobranego pliku zip:
$ 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
Na poniższym obrazku powyższe komendy są podkreślone na żółto, a wynik sumy kontrolnej (w tym przypadku OK) jest podkreślony na zielono:
Krok 3: Sprawdzenie podpisu pobranego pliku zip
Przed zainstalowaniem zawartości pobranego pliku zip zweryfikujemy jego podpis, korzystając z GnuPG dostarczanego z Ubuntu (można mu zaufać, jak wspomniano na stronie GnuPG).
Na stronie pobierania OpenSSL znajdujemy następującą informację : „Klucze PGP do podpisów są dostępne na stronie OMC. Obecni członkowie, którzy podpisują wydania to Richard Levitte i Matt Caswell.” Podążając za linkiem na stronie OMC docieramy do kluczy publicznych członków OMC. Następnym krokiem jest więc pobranie wymaganych kluczy (jeden w pliku levitte.txt, drugi w caswell.txt) i zaimportowanie ich do bazy danych GnuPG. Używając 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
Aby zaufać tym podpisom, dobrą praktyką jest zweryfikowanie certyfikatu domeny (poniższy rysunek). Korzystając z zakładki Google Chrome Security w narzędziach dla programistów, można sprawdzić, czy wystawca „Let’s Encrypt Authority X3” (zaufany przez przeglądarkę) wydał certyfikat dla domeny www.openssl.org, co oznacza, że jest to certyfikat Domain Validation, pozwalający każdemu zaufać pobranym podpisom.
Oba klucze są importowane, a następnie wymienione jak poniżej:
$ gpg --import caswell.txt
$ gpg --import levitte.txt
$ gpg --list-keys
Następna ilustracja zawiera wyniki powyższych poleceń, które są podkreślone na żółto:
$ gpg --import caswell.txt
$ gpg --import levitte.txt
$ gpg --list-keys
.