Comment mettre à jour OpenSSL sous OS X?

126

Aujourd'hui, l' exploit OpenSSL a été annoncé dans la nature, ce qui permet à un attaquant de détecter et de voler subrepticement des clés de serveur privées (en leur permettant de MitM, de déchiffrer vos données cryptées et de voler des mots de passe). Cela concerne les versions OpenSSL, y compris la version 1.0.1f, qui est la version de mon ordinateur Mac Mavericks mis à jour (car j'ai utilisé le port / brassage pour installer un autre logiciel qui a mis à jour mon openssl sans que je m'en rende compte ):

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

Cela montre que je n'utilise pas la version OpenSSL de Mavericks:

$ which openssl
/opt/local/bin/openssl

OpenSSL a publié un correctif aujourd'hui dans la version 1.0.1g et je me demande comment je peux obtenir cette version corrigée installée sur ma version actuelle.

dr jimbob
la source
16
Vous n'utilisez pas la version fournie avec OS X Mavericks - c'est la 0.9.8y, qui ne contient pas le bogue heartbleed (introduit dans la version 1.0.1). Votre meilleur chemin de mise à jour dépendra de l'emplacement et de la manière dont vous avez installé la version la plus récente. which opensslpourrait être informatif. En outre, le problème majeur n’est pas la commande openssl, ce sont les bibliothèques openssl (utilisées par d’autres programmes). Celles-ci ne sont pas compatibles avec les API entre les versions 0.9.x et 1.0.x; vous ne souhaitez donc pas mettre à jour bibliothèques openssl fournies par le système!
Gordon Davisson
@GordonDavisson - Vous avez totalement raison. Je me trompais. J'avais apparemment installé MacPortà un moment donné sur cette machine qui a mis à jour mon OpenSL. (Probablement quand j'essayais de faire fonctionner python2.7). Il faudrait probablement supprimer cette question, mais pas au cas où d'autres commettraient la même erreur (la grande réponse de SapphireSun serait utile).
dr jimbob
Avec cette mise à jour clarifiant, je le laisserais. Il y a probablement d'autres personnes dans le même bateau, et avoir ceci ici devrait leur donner une idée de ce qui doit être fait.
Gordon Davisson
2
Si vous installez OpenSSL avec Brew, cela ne liera pas les fichiers binaires à / usr / bin. Par conséquent, il ne sera pas exécuté si vous publiez un openssl en ligne de commande.
Max Ried
@ MaxRied comment lancez-vous la version installée par homebrew? J'ai installé new openssl en suivant les instructions de la réponse acceptée, et openssl versionrenvoie 1.0.1g, mais vous dites que les opensslcommandes n'utilisent pas cette version?
inorganik

Réponses:

147

Pour ce que ça vaut, je viens d'utiliser homebrew ( http://brew.sh/ ):

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

Si l’une des mauvaises versions apparaît (1.0.1a-f), vous pouvez déterminer quelle version d’OpenSL vous utilisez, de cette façon:

which openssl

Cela provient souvent de / usr / bin. Pour vous assurer d'obtenir la version mise à jour, déposez un lien symbolique dans / usr / local / bin pour qu'il pointe vers le fichier openssl mis à jour, comme ceci:

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

Au lieu de cette dernière étape, certaines personnes remplacent openssl /usr/binpar un lien symbolique vers /usr/local/Cellar/openssl/1.0.1g/bin/openssl(ou quelle que soit votre version):

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

Mais cela est connu pour causer des problèmes avec certaines versions plus récentes d’OSX. Mieux vaut simplement insérer un nouveau lien symbolique dans / usr / local / bin, qui devrait prévaloir sur votre chemin plutôt que / usr / bin.

SapphireSun
la source
7
Ne supprimez pas l'original, renommez-le simplement. Si vous trouvez que la version construite par Homebrew ne fonctionne pas, il n'y a aucune raison de vous installer dans une crique sans pagaie (de travail).
Terry N
1
Bien assez, mais d'un autre côté, je n'appellerais pas cette version comme fonctionnant ...
SapphireSun
1
Même avec la vulnérabilité, il vous est toujours utile dans toute situation dans laquelle vous êtes prêt à prendre le risque calculé afin que l'application X (qui en dépend) fonctionne brièvement. Ou, si vous préférez ... "travailler" dans le sens où une pagaie cassée peut toujours pousser de l'eau. :-p
Terry N
8
Juste une remarque - après avoir exécuté ces étapes, taper "openssl" dans la fenêtre du terminal a échoué avec une erreur "aucun fichier ou répertoire de ce type" pointant vers l'ancienne copie (mais cela fonctionnait dans une nouvelle fenêtre de terminal). Pour réparer la fenêtre du terminal sur lequel je travaillais, je devais faire:hash -r
Mike Hedman le
6
Mieux que de créer un lien symbolique à /usr/bin/openssl, on peut créer le lien à /usr/local/bin/openssl. Cela devrait précéder /usr/binsur votre $PATHet de contourner les problèmes liés à « la protection du système d' intégrité » dans les nouvelles versions de Mac OS X.
mrKelley
14

Ou pour ceux qui utilisent des ports mac, et ne craignent pas de garder la version

sudo port upgrade openssl

simples :-)

mammix2
la source
3
sudo port upgrade outdatedfonctionne aussi.
dr jimbob
1
C’est drôle, le fait que cela se produise à la fois avec macports et brassage et d’installer open opensl sur ma machine est en fait la cause de cet incident. Course à pied a sudo port -f uninstall openssl @<old-version>fait l'affaire pour moi :)
Yair
@yair ayant à la fois macports et homebrew posera de nombreux problèmes
user151019
6

Pour résoudre OCSP Etat demande l' extension croissance de la mémoire non lié (CVE-2016-6304) sur macOS Sierra à l' aide brewde la protection de l' intégrité du système activé:

  1. Ajustez temporairement les autorisations sur /usr/localafin que l'infusion puisse être mise à jour:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. Installez la version mise à jour de OpenSSL (vous voulez probablement 1.0.2i):

    brew install openssl
    
  3. Vous voudrez peut-être / aurez besoin de supprimer un lien symbolique existant vers openssl à partir de /usr/local/bin:

    rm /usr/local/bin/openssl
    
  4. Re-liez la version de brassage appropriée:

    sudo ln -s /usr/local/Cellar/openssl/1.0.2i/bin/openssl /usr/local/bin/openssl
    
  5. Restaurer les autorisations d'origine sur /usr/local/bin:

    sudo chown root:wheel /usr/local
    
brandonscript
la source
Dans mon cas, l'ancienne version de OpneSSL se trouve dans / usr / bin. Il échoue lorsque vous essayez de modifier l’autorisation bin.
Ramis
Utilisez-vous Sudo?
brandonscript
Oui. J'ai utilisé sudo. J'ai trouvé un commentaire que dans la dernière version d'OS OS X, il n'y a aucun moyen de changer l'autorisation de ce fichier. Alors j'arrête d'y arriver.
Ramis
Pourquoi ne pas simplement changer votre $PATHvariable à regarder /usr/local/bin?
brandonscript
Salut tout le monde, je suis confus par toutes les réponses, laissant tomber symlink, lier, bug heartbleed, etc ... Quand je lance que $ openssl versionje reçois , OpenSSL 0.9.8zh 14 Jan 2016mais quand je lance que $ brew install opensslje reçois Warning: openssl 1.0.2l is already installed. Est-ce que cela signifie que j'ai deux versions installées? Que dois-je faire exactement maintenant?
Joshua
1

Quiconque ne veut pas utiliser d'infusion ou de ports et veut juste remplacer l'installation par défaut d'OpenSSL 0.9.8 peut toujours désactiver la protection de l'intégrité du système en redémarrant en mode de récupération (cmd + R) et en émettant

csrutil disable

et ensuite compiler openssl avec

./config --prefix=/usr
make install

Il a réussi à remplacer OpenSSL dans ElCapitan pour moi et j'ai pu compiler curl et httpd 2.4 d'Apache sans aucun problème directement à partir des sources. Le raisonnement derrière la méthode que certains pourraient considérer comme radicale est qu'ElCapitan n'est plus mis à jour par Apple et qu'aucune mise à jour n'est à venir, de sorte qu'elle ne fonctionnera probablement pas. Deuxièmement, cela vous évite de pointer vers le dossier openssl de / usr / local pour chaque programme que vous compilez, ce qui rend la compilation plus robuste.

Захар Joe
la source