Wie aktualisiere ich OpenSSL in OS X?

126

Heute wurde der Heartbleed- OpenSSL-Exploit in freier Wildbahn angekündigt, der es einem Angreifer ermöglicht, private Serverschlüssel zu erkennen und zu stehlen (wodurch er MitM-fähig wird und Ihre verschlüsselten Daten entschlüsselt und Passwörter stiehlt). Dies betrifft OpenSSL-Versionen, einschließlich 1.0.1f, die auf meinem aktuellen Mavericks-Computer- Mac installiert sind (da ich mit port / brew andere Software installiert habe, die mein openssl aktualisiert hat, ohne dass ich es bemerkt habe ):

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

Dies zeigt, dass ich nicht die Mavericks-Version von OpenSSL verwende:

$ which openssl
/opt/local/bin/openssl

OpenSSL hat heute einen Fix in 1.0.1g veröffentlicht und ich frage mich, wie ich diese feste Version über meine aktuelle Version installieren kann.

Dr. Jimbob
quelle
16
Sie verwenden nicht die Version, die mit OS X Mavericks geliefert wurde - das ist 0.9.8y, die nicht den Heartbleed-Bug enthält (der in 1.0.1 eingeführt wurde). Ihr bester Update-Pfad hängt davon ab, wo und wie Sie die neuere Version installiert haben. which opensslkönnte informativ sein. Das Hauptproblem ist nicht der Befehl openssl, sondern die openssl-Bibliotheken (die von anderen Programmen verwendet werden). Diese sind zwischen den Versionen 0.9.x und 1.0.x nicht API-kompatibel, sodass Sie das nicht aktualisieren möchten Vom System gelieferte openssl-Bibliotheken!
Gordon Davisson
@ GordonDavisson - Sie sind völlig richtig. Ich lag falsch. Ich hatte anscheinend MacPortirgendwann auf diesem Rechner installiert, was mein openssl aufgerüstet hat. (Wahrscheinlich, als ich versuchte, Python 2.7 zum Laufen zu bringen). Wahrscheinlich sollte diese Frage gelöscht werden, aber falls andere nicht den gleichen Fehler machen, finden Sie die großartige Antwort von SapphireSun nützlich).
Dr. Jimbob
Mit diesem Update würde ich es verlassen. Es gibt wahrscheinlich andere Leute im selben Boot, und dies hier zu haben sollte ihnen eine Idee geben, was zu tun ist.
Gordon Davisson
2
Wenn Sie OpenSSL mit installieren Gebräu wird es nicht verknüpfen die Binärdateien in / usr / bin. Daher wird es nicht ausgeführt, wenn Sie in der Befehlszeile ein openssl eingeben .
Max Ried
@MaxRied Wie läuft die Version ab, die Homebrew installiert hat? Ich habe new openssl anhand von Anweisungen in der akzeptierten Antwort installiert und openssl versiongibt 1.0.1g zurück, aber Sie sagen, dass opensslBefehle diese Version nicht verwenden?
inorganik

Antworten:

147

Für das, was es wert ist, habe ich gerade Homebrew verwendet ( http://brew.sh/ ):

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

Wenn eine der fehlerhaften Versionen (1.0.1a-f) auftaucht, können Sie auf folgende Weise herausfinden, welche Version von openssl Sie verwenden:

which openssl

Oft ist dies aus / usr / bin. Um sicherzustellen, dass Sie die aktualisierte Version erhalten, legen Sie einen Symlink in / usr / local / bin ab, um auf das aktualisierte openssl zu verweisen:

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

Als Alternative zu diesem letzten Schritt ersetzen einige Leute die OpenSL-Eingabe /usr/bindurch einen Symlink zu /usr/local/Cellar/openssl/1.0.1g/bin/openssl(oder was auch immer Ihre Version ist):

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

Es ist jedoch bekannt, dass dies bei einigen neueren Versionen von OSX zu Problemen führt. Fügen Sie einfach einen neuen Symlink in / usr / local / bin ein, der auf Ihrem Pfad Vorrang vor / usr / bin haben sollte.

SapphireSun
quelle
7
Löschen Sie das Original nicht - benennen Sie es einfach um. Wenn Sie feststellen, dass die von Homebrew gebaute Version aus irgendeinem Grund nicht funktioniert, gibt es keinen Grund, sich ohne (funktionierendes) Paddel auf einen Bach zu setzen.
Terry N
1
Fair genug, aber auf der anderen Seite würde ich nicht sagen, dass diese Version funktioniert ...
SapphireSun
1
Selbst mit dieser Sicherheitsanfälligkeit ist es für Sie in jeder Situation nützlich, in der Sie bereit sind, das berechnete Risiko einzugehen, damit App X (das davon abhängt) kurz funktioniert. Oder wenn Sie es vorziehen ... "zu arbeiten" in dem Sinne, dass ein kaputtes Paddel immer noch Wasser drücken kann. :-p
Terry N
8
Nur ein Hinweis: Nach dem Ausführen dieser Schritte schlug die Eingabe von "openssl" im Terminalfenster mit dem Fehler "no such file or directory" fehl, der auf die alte Kopie zeigte (dies funktionierte jedoch in einem neuen Terminalfenster). Um das Terminalfenster zu reparieren, in dem ich arbeitete, musste ich Folgendes tun:hash -r
Mike Hedman,
6
Besser als einen Symlink unter /usr/bin/opensslzu erstellen, kann man den Link unter erstellen /usr/local/bin/openssl. Das sollte /usr/binIhrem vorausgehen $PATHund alle Probleme umgehen, die sich aus dem "Schutz der Systemintegrität" in neueren Versionen von OS X ergeben.
mrKelley
14

Oder für diejenigen, die Mac-Ports verwenden und sich keine Sorgen um die Beibehaltung der Version machen

sudo port upgrade openssl

simples :-)

mammix2
quelle
3
sudo port upgrade outdatedfunktioniert auch.
Dr. Jimbob
1
Das ist lustig, da ich eigentlich die Ursache dafür hatte, dass sowohl Macports als auch Brew OpenSL auf meinem Computer installiert waren. Laufen sudo port -f uninstall openssl @<old-version>hat den Trick für mich :)
yair
@yair mit Macports und Homebrew wird viele Probleme verursachen
user151019
6

Zum Auflösen des unbegrenzten Speicherzuwachses bei OCSP-Statusanforderungserweiterungen (CVE-2016-6304) unter macOS Sierra brewmit aktiviertem Systemintegritätsschutz :

  1. Passen Sie die Berechtigungen für vorübergehend an, /usr/localdamit das Brühen aktualisiert werden kann:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. Installieren Sie die aktualisierte Version von OpenSSL (Sie möchten wahrscheinlich 1.0.2i):

    brew install openssl
    
  3. Möglicherweise möchten / müssen Sie einen vorhandenen Symlink zu openssl löschen von /usr/local/bin:

    rm /usr/local/bin/openssl
    
  4. Verknüpfen Sie die richtige Brühversion erneut:

    sudo ln -s /usr/local/Cellar/openssl/1.0.2i/bin/openssl /usr/local/bin/openssl
    
  5. Stellen Sie die ursprünglichen Berechtigungen wieder her für /usr/local/bin:

    sudo chown root:wheel /usr/local
    
brandonscript
quelle
In meinem Fall befindet sich die alte Version von OpneSSL in / usr / bin. Es schlägt fehl, wenn versucht wird, die bin-Berechtigung zu ändern.
Ramis
Verwenden Sie Sudo?
brandonscript
Ja. Ich habe sudo benutzt. Ich fand Kommentar, dass in der neuesten Version von OS OS X hier keine Möglichkeit besteht, die Berechtigung dieser Datei zu ändern. Also höre ich auf, es zu erreichen.
Ramis
Warum ändern Sie nicht einfach Ihre $PATHVariable, um nachzuschauen /usr/local/bin?
brandonscript
Hallo allerseits, ich bin verwirrt von all den Antworten, dem Löschen von Symlinks, dem Verknüpfen von Links, Heartbleed Bugs usw. Wenn ich renne, $ openssl versionbekomme ich, OpenSSL 0.9.8zh 14 Jan 2016aber wenn ich renne, $ brew install opensslbekomme ich Warning: openssl 1.0.2l is already installed. Heißt das, ich habe zwei Versionen installiert? Was genau soll ich jetzt tun?
Joshua
1

Wer keinen Brew oder keine Ports verwenden möchte und nur die Standardinstallation von OpenSSL 0.9.8 ersetzen möchte, kann den Systemintegritätsschutz jederzeit deaktivieren, indem er im Wiederherstellungsmodus (cmd + R) neu startet und ausstellt

csrutil disable

und kompiliere danach openssl mit

./config --prefix=/usr
make install

Es hat OpenSSL in ElCapitan für mich erfolgreich ersetzt und ich konnte curl und apaches httpd 2.4 ohne Probleme direkt aus den Quellen kompilieren. Die Gründe für die Methode, die manche als drastisch erachten, sind, dass ElCapitan nicht mehr von Apple gepflegt wird und keine Updates anstehen, so dass es wahrscheinlich nicht kaputt geht. Zweitens erspart es Ihnen, für jedes Programm, das Sie kompilieren, auf den Ordner openssl in / usr / local zu verweisen, wodurch die Kompilierung robuster wird.

Захар Joe
quelle