Jak uaktualnić OpenSSL w OS X?

120

Dzisiaj zawstydzony Exploit OpenSSL został ogłoszony na wolności, co pozwala atakującemu na ukrycie i wykradzenie prywatnych kluczy serwera (umożliwiając MitM i odszyfrowanie zaszyfrowanych danych oraz kradzież haseł). Dotyczy to wersji OpenSSL, w tym wersji 1.0.1f, która jest wersją na moim aktualny komputer Mavericks Mac (ponieważ użyłem portu / naparu do zainstalowania innego oprogramowania, które zaktualizowało mój openssl, nie zdając sobie z tego sprawy) ):

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

To pokazuje, że nie używam wersji OpenSSL Mavericks:

$ which openssl
/opt/local/bin/openssl

OpenSSL opublikował dziś poprawkę 1,0,1 g i zastanawiam się, jak mogę zainstalować tę poprawioną wersję na mojej obecnej wersji?

dr jimbob
źródło
16
Ty jesteś nie przy użyciu wersji dołączonej do OS X Mavericks - to 0.9.8y, które nie ma błędów w sercu (zostało wprowadzone w wersji 1.0.1). Twoja najlepsza ścieżka aktualizacji zależy od tego, gdzie i jak zainstalowano nowszą wersję. which openssl może mieć charakter informacyjny. Ponadto głównym problemem nie jest polecenie openssl, ale biblioteki openssl (używane przez inne programy) - nie są one kompatybilne z API między wersjami 0.9.x i 1.0.x, więc nie chcę zaktualizować dostarczone przez system biblioteki openssl!
Gordon Davisson
@ Gordon Davisson - Masz całkowitą rację. Myliłem się. Najwyraźniej zainstalowałem MacPort w pewnym momencie na tej maszynie, która zaktualizowała mój openssl. (Prawdopodobnie podczas próby uzyskania działającego pythona 2.7). Prawdopodobnie powinno usunąć to pytanie, ale na wypadek, gdyby inni popełnili ten sam błąd, znajdź wspaniałą odpowiedź SapphireSun).
dr jimbob
Z tą aktualizacją wyjaśniłbym, że ją zostawię. Prawdopodobnie w tej samej łodzi są inni ludzie i posiadanie tego tutaj powinno dać im pojęcie, co należy zrobić.
Gordon Davisson
2
Jeśli zainstalujesz OpenSSL za pomocą napar to będzie nie połącz pliki binarne z / usr / bin. Dlatego nie zostanie uruchomiony, jeśli wydasz openssl w linii poleceń.
Max Ried
@ MaxRied Jak uruchomić wersję zainstalowaną przez homebrew? Zainstalowałem nowe openssl według instrukcji w zaakceptowanej odpowiedzi i openssl version zwraca 1.0.1g, ale mówisz openssl komendy nie używają tej wersji?
inorganik

Odpowiedzi:

143

Na co warto, właśnie użyłem homebrew ( http://brew.sh/ ):

brew update  
brew install openssl  
brew link --force openssl 
openssl version -a  

Jeśli pojawi się jedna ze złych wersji (1.0.1a-f), możesz dowiedzieć się, która wersja openssl używasz, w ten sposób:

which openssl

Często jest to z / usr / bin. Aby upewnić się, że otrzymasz zaktualizowaną wersję, upuść dowiązanie symboliczne do / usr / local / bin, aby wskazać zaktualizowany openssl, w ten sposób:

ln -s /usr/local/Cellar/openssl/1.0.1g/bin/openssl /usr/local/bin/openssl

Jako alternatywę dla tego ostatniego kroku niektórzy ludzie zastępują openssl /usr/bin z dowiązaniem symbolicznym do /usr/local/Cellar/openssl/1.0.1g/bin/openssl (lub jakakolwiek jest twoja wersja):

mv /usr/bin/openssl /usr/bin/openssl_OLD  
ln -s /usr/local/Cellar/openssl/1.0.1g/bin/openssl /usr/bin/openssl

Ale wiadomo, że powoduje to problemy w niektórych nowszych wersjach OSX. Lepiej po prostu wstawić nowe dowiązanie symboliczne do / usr / local / bin, które powinno mieć pierwszeństwo na ścieżce nad / usr / bin.

SapphireSun
źródło
7
Nie usuwaj oryginału - po prostu zmień jego nazwę. Jeśli przekonasz się, że wersja Homebrew nie działa w jakimś celu, nie ma powodu, aby podnosić się bez strumienia (działającego).
Terry N
1
W porządku, ale z drugiej strony nie nazwałbym tej wersji działającą ...
SapphireSun
1
Nawet w przypadku tej luki jest ona nadal przydatna w każdej sytuacji, w której chcesz podjąć obliczone ryzyko, aby aplikacja X (zależna od tego) działała krótko. Lub, jeśli wolisz ... „działa” w tym sensie, że złamana łopatka może nadal pchać wodę. :-p
Terry N
8
Tylko uwaga - po wykonaniu tych kroków wpisanie „openssl” w oknie terminala nie powiodło się z błędem „brak takiego pliku lub katalogu” wskazującym na starą kopię (ale działało w nowym oknie terminala). Aby naprawić okno terminala, w którym pracowałem, musiałem zrobić: hash -r
Mike Hedman
6
Lepiej niż utworzyć dowiązanie symboliczne w /usr/bin/openssl, można utworzyć link pod adresem /usr/local/bin/openssl. To powinno poprzedzać /usr/bin na Twoim $PATH i ominąć wszelkie problemy wynikające z „Ochrony integralności systemu” w nowszych wersjach OS X.
mrKelley
13

Lub dla tych, którzy używają portów mac i nie martwią się o zachowanie wersji

sudo port upgrade openssl

simples :-)

mammix2
źródło
3
sudo port upgrade outdated działa również.
dr jimbob
1
To zabawne, ponieważ zarówno macports, jak i brew oba instalacje openssl na moim komputerze były przyczyną tego, co mi się przydarzyło. Bieganie sudo port -f uninstall openssl @<old-version> zrobiłem sztuczkę dla mnie :)
yair
@yair mający zarówno macport, jak i homebrew spowoduje wiele problemów
Mark
6

Do rozwiązania Rozszerzenie żądania statusu OCSP nieograniczony wzrost pamięci (CVE-2016-6304) na macOS Sierra za pomocą brew z Ochrona integralności systemu włączone:

  1. Tymczasowo dostosuj uprawnienia /usr/local więc napar może zaktualizować:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. Zainstaluj zaktualizowaną wersję OpenSSL (prawdopodobnie chcesz 1.0.2i):

    brew install openssl
    
  3. Możesz / potrzebujesz usunąć istniejące dowiązanie symboliczne do openssl z /usr/local/bin:

    rm /usr/local/bin/openssl
    
  4. Ponownie połącz właściwą wersję parzenia:

    sudo ln -s /usr/local/Cellar/openssl/1.0.2i/bin/openssl /usr/local/bin/openssl
    
  5. Przywróć oryginalne uprawnienia /usr/local/bin:

    sudo chown root:wheel /usr/local
    
brandonscript
źródło
W moim przypadku stara wersja OpenSSL znajduje się w / usr / bin. Błąd przy próbie zmiany uprawnień bin.
Ramis
Czy korzystasz z Sudo?
brandonscript
Tak. Użyłem sudo. Znalazłem komentarz, że w najnowszej wersji OS OS X nie ma możliwości zmiany uprawnień tego pliku. Więc przestaję to osiągać.
Ramis
Dlaczego nie po prostu zmienić $PATH zmienna do przejrzenia /usr/local/bin?
brandonscript
Cześć wszystkim, jestem zdezorientowany przez wszystkie odpowiedzi, upuszczanie dowiązania symbolicznego, linkowanie, błąd z sercem itp. ... Kiedy biegam $ openssl version dostaję OpenSSL 0.9.8zh 14 Jan 2016 ale kiedy biegnę $ brew install openssl dostaję Warning: openssl 1.0.2l is already installed. Czy to oznacza, że ​​mam zainstalowane dwie wersje? Co dokładnie powinienem teraz zrobić?
Joshua
1

Ktokolwiek nie chce używać brew lub portów i chce po prostu zastąpić domyślną instalację OpenSSL 0.9.8, zawsze może wyłączyć ochronę integralności systemu, ponownie uruchamiając tryb odzyskiwania (cmd + R) i wydając

csrutil disable

a następnie skompiluj openssl z

./config --prefix=/usr
make install

Z powodzeniem zastąpił dla mnie OpenSSL w ElCapitan i udało mi się skompilować curd i httpd 2.4 apache bez żadnego problemu bezpośrednio ze źródeł. Powodem tej metody, którą niektórzy mogą uznać za drastyczne, jest to, że firma ElCapitan nie jest już obsługiwana przez Apple i żadne aktualizacje nie są dostępne, więc prawdopodobnie się nie zepsuje. Po drugie, oszczędza się przed wskazywaniem folderu openssl w / usr / local dla każdego kompilowanego programu, dzięki czemu kompilacja jest bardziej niezawodna.

Захар Joe
źródło