Come aggiornare OpenSSL in OS X?


126

Oggi l' exploit di cuore aperto di OpenSSL è stato annunciato in libertà, il che consente a un utente malintenzionato di rilevare e rubare di nascosto chiavi del server privato (consentendo loro di MitM e decrittografare i dati crittografati e rubare le password). Questo riguarda le versioni di OpenSSL tra cui 1.0.1f che è la versione sul mio Mac Mavericks aggiornato (perché ho usato port / brew per installare altri software che hanno aggiornato il mio openssl senza che me ne accorgessi ):

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

Ciò dimostra che non sto usando la versione Mavericks di OpenSSL:

$ which openssl
/opt/local/bin/openssl

OpenSSL ha rilasciato una correzione oggi in 1.0.1g e mi chiedo come posso ottenere questa versione fissa installata sulla mia versione attuale?


16
Stai Non utilizza la versione fornita con OS X Mavericks - che è 0.9.8y, che non ha il bug heartbleed (è stato introdotto in 1.0.1). Il tuo miglior percorso di aggiornamento dipenderà da dove e come hai installato la versione più recente. which opensslpotrebbe essere informativo. Inoltre, il problema principale non è il comando openssl, sono le librerie openssl (che sono utilizzate da altri programmi) - quelle non sono compatibili con le API tra le versioni 0.9.xe 1.0.x, quindi non si desidera aggiornare il librerie openssl fornite dal sistema!
Gordon Davisson,

@GordonDavisson - Hai perfettamente ragione. Mi sono sbagliato. Apparentemente avevo installato MacPortad un certo punto su questa macchina che ha aggiornato il mio openssl. (Probabilmente quando stavo cercando di far funzionare python2.7). Probabilmente dovrebbe eliminare questa domanda, ma non nel caso in cui altri commettano lo stesso errore trovino utile la grande risposta di SapphireSun).
dr jimbob,

Con quell'aggiornamento chiarificatore, lo lascerei. Probabilmente ci sono altre persone nella stessa barca, e avere questo qui dovrebbe dare loro un'idea di ciò che deve essere fatto.
Gordon Davisson,

2
Se installi OpenSSL con brew , non collegherà i binari a / usr / bin. Pertanto non verrà eseguito se si emette un openssl sulla riga di comando.
Max Ried,

@MaxRied come si esegue la versione installata da homebrew? Ho installato new openssl seguendo le istruzioni nella risposta accettata e openssl versionrestituisce 1.0.1g, ma stai dicendo che i opensslcomandi non utilizzano quella versione?
Inorganik,

Risposte:


147

Per quello che vale, ho appena usato homebrew ( http://brew.sh/ ):

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

Se compare una delle versioni errate (1.0.1a-f), puoi capire quale versione di openssl stai usando, in questo modo:

which openssl

Spesso questo è da / usr / bin. Per assicurarti di ottenere la versione aggiornata, trascina un link simbolico in / usr / local / bin per puntare all'apertura aperta, in questo modo:

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

In alternativa a quel passaggio finale, alcune persone sostituiscono openssl /usr/bincon un link simbolico /usr/local/Cellar/openssl/1.0.1g/bin/openssl(o qualunque sia la tua versione):

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

Ma questo è noto per causare problemi con alcune versioni più recenti di OSX. Meglio semplicemente inserire un nuovo link simbolico in / usr / local / bin, che dovrebbe avere la precedenza sul tuo percorso su / usr / bin.


7
Non eliminare l'originale, basta rinominarlo. Se trovi che la versione di Homebrew non funziona per qualche scopo, non c'è motivo di metterti su un torrente senza una paletta (funzionante).
Terry N

1
Abbastanza giusto, ma d'altra parte, non chiamerei quella versione funzionante ...
SapphireSun

1
Anche con la vulnerabilità, ti è comunque utile in qualsiasi situazione in cui sei disposto a correre il rischio calcolato per far funzionare brevemente l'app X (che dipende da essa). Oppure, se preferisci ... "lavorare", nel senso che una paletta rotta può ancora spingere acqua. :-p
Terry N

8
Solo una nota - dopo aver eseguito questi passaggi, digitando "openssl" nella finestra del terminale non è riuscito con un errore "nessun file o directory" che punta alla vecchia copia (ma ha funzionato in una nuova finestra del terminale). Per riparare la finestra del terminale in cui stavo lavorando, dovevo fare un:hash -r
Mike Hedman,

6
Meglio che creare un /usr/bin/opensslcollegamento simbolico su , è possibile creare il collegamento su /usr/local/bin/openssl. Ciò dovrebbe precedere /usr/binil tuo $PATHed evitare qualsiasi problema derivante dalla "Protezione dell'integrità del sistema" nelle nuove versioni di OS X.
mrKelley,

14

O per coloro che utilizzano le porte Mac e non si preoccupano di conservare la versione

sudo port upgrade openssl

semplici :-)


3
sudo port upgrade outdatedfunziona anche.
dr jimbob,

1
È divertente, avere macport e preparare entrambi openssl sul mio computer è stato in realtà la causa di ciò che mi è successo. Correre sudo port -f uninstall openssl @<old-version>ha funzionato per me :)
yair

@yair che ha sia macport che homebrew causerà molti problemi
user151019

6

Per risolvere la crescita illimitata della memoria dell'estensione della richiesta di stato OCSP (CVE-2016-6304) su macOS Sierra usando brewcon System Integrity Protection abilitato:

  1. Regola temporaneamente le autorizzazioni in /usr/localmodo che brew possa aggiornare:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. Installa la versione aggiornata di OpenSSL (probabilmente vuoi 1.0.2i):

    brew install openssl
    
  3. Potrebbe essere necessario / necessario eliminare un collegamento simbolico esistente su openssl da /usr/local/bin:

    rm /usr/local/bin/openssl
    
  4. Ricollegare la versione corretta della birra:

    sudo ln -s /usr/local/Cellar/openssl/1.0.2i/bin/openssl /usr/local/bin/openssl
    
  5. Ripristina permessi originali su /usr/local/bin:

    sudo chown root:wheel /usr/local
    

Nel mio caso la vecchia versione di OpneSSL si trova in / usr / bin. Non riesce quando si tenta di modificare l'autorizzazione del cestino.
Ramis,

Stai usando il Sudo?
brandonscript

Sì. Ho usato sudo. Ho trovato commento che nell'ultima versione di OS X qui non è possibile modificare l'autorizzazione di questo file. Quindi smetto di raggiungerlo.
Ramis,

Perché non cambiare semplicemente la tua $PATHvariabile per cercare /usr/local/bin?
brandonscript

Ciao a tutti, sono confuso da tutte le risposte, rilasciando link simbolici, collegamenti, bug senza cuore, ecc ... Quando corro $ openssl versionottengo, OpenSSL 0.9.8zh 14 Jan 2016ma quando corro $ brew install opensslottengo Warning: openssl 1.0.2l is already installed. Questo significa che ho due versioni installate? Cosa dovrei fare esattamente adesso?
Giosuè,

1

Chi non desidera utilizzare brew o le porte e desidera solo sostituire l'installazione di OpenSSL 0.9.8 predefinita può sempre disabilitare la protezione dell'integrità del sistema riavviando in modalità di ripristino (cmd + R) ed emettendo

csrutil disable

e successivamente compilare openssl con

./config --prefix=/usr
make install

Ha sostituito con successo OpenSSL in ElCapitan per me e sono stato in grado di compilare curl e apd httpd 2.4 senza alcun problema direttamente dai sorgenti. Il ragionamento alla base del metodo che alcuni potrebbero considerare drastici è che ElCapitan non è più gestito da Apple e non sono previsti aggiornamenti, quindi probabilmente non si romperà. In secondo luogo, ti evita di puntare alla cartella openssl in / usr / local per ogni programma che compili, rendendo la compilazione più solida.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.