Як оновити OpenSSL в OS X?


126

Сьогодні сердечний експлуататор OpenSSL був оголошений у дикій природі, що дозволяє зловмиснику приховано виявляти та красти приватні ключі сервера (дозволяючи їм MitM та розшифровувати ваші зашифровані дані та красти паролі). Це впливає на версії OpenSSL, включаючи 1.0.1f, що є версією на моєму сучасному комп'ютері Mavericks Mac (тому що я використовував порт / brew для встановлення іншого програмного забезпечення, яке оновило мій Opensl, не розуміючи, що це ):

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

Це свідчить про те, що я не використовую версію OpenSSL Mavericks:

$ which openssl
/opt/local/bin/openssl

OpenSSL випустив виправлення сьогодні в 1.0.1g, і мені цікаво, як я можу встановити цю фіксовану версію над моєю поточною версією?


16
Ви не використовуєте версію, яка постачалася разом з OS X Mavericks - це 0.9.8y, в якому немає помилки з серцем (вона була представлена ​​в 1.0.1). Ваш найкращий шлях оновлення залежатиме від того, де і як ви встановили нову версію. which opensslможе бути інформативним. Крім того, головною проблемою є не команда openssl, це бібліотеки openssl (які використовуються іншими програмами) - вони не сумісні з API між версіями 0.9.x та 1.0.x, тому ви не хочете оновлювати оновлення забезпечені системою бібліотеки openssl!
Гордон Девіссон

@GordonDavisson - Ви абсолютно праві. Я помилився. Я, мабуть, встановив MacPortв якийсь момент на цій машині, яка оновила мій openssl. (Можливо, коли я намагався змусити python2.7 працювати). Напевно, слід видалити це запитання, але не буде, якщо інші помиляються, коли чудова відповідь SapphireSun стане корисною).
д-р Джимбоб

З цим уточнюючим оновленням я б його залишив. Напевно, є й інші люди в одному човні, і наявність цього тут повинна дати їм уявлення, що потрібно зробити.
Гордон Девіссон

2
Якщо ви встановите OpenSSL з brew, він не пов'язує двійкові файли до / usr / bin. Тому він не буде запущений, якщо ви видасте Opensl у командному рядку.
Макс Рійд

@MaxRied Як запустити версію, встановлену домашньою мовою? Я встановив новий openssl за інструкціями у прийнятій відповіді і openssl versionповертає 1.0.1g, але ви говорите, що opensslкоманди не використовують цю версію?
inorganik

Відповіді:


147

Для чого це варто, я просто використовував домашню мову ( http://brew.sh/ ):

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

Якщо з’явиться одна з поганих версій (1.0.1a-f), ви можете зрозуміти, яку версію openssl ви використовуєте, таким чином:

which openssl

Часто це від / usr / bin. Щоб переконатися, що ви отримаєте оновлену версію, опустіть символьне посилання в / usr / local / bin, щоб вказати на оновлений openssl, як це:

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

В якості альтернативи цьому останньому кроку деякі люди замінюють openssl /usr/binсимвольним посиланням на /usr/local/Cellar/openssl/1.0.1g/bin/openssl(або будь-яку версію):

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

Але це, як відомо, створює проблеми з деякими більш новими версіями OSX. Краще просто вставити нове символьне посилання в / usr / local / bin, яке повинно мати перевагу на вашому шляху над / usr / bin.


7
Не видаляйте оригінал - просто перейменуйте його. Якщо ви вважаєте, що побудована в Homebrew версія не працює з певними цілями, немає підстав ставити собі крик без (робочого) весла.
Terry N

1
Досить справедливо, але з іншого боку, я б не назвав цю версію робочою ...
SapphireSun

1
Навіть з уразливістю, він все одно корисний вам у будь-якій ситуації, коли ви готові взяти на себе розрахований ризик, щоб програма X (це від цього залежить) працювала коротко. Або, якщо ви віддаєте перевагу ... "працюючи" в тому сенсі, що зламане весло все одно може штовхати воду. :-p
Террі N

8
Лише зауваження - після виконання цих кроків введення терміна "openssl" у вікно терміналу не вдалося, помилка "немає такого файлу чи каталогу" вказувала на стару копію (але вона працювала в новому вікні терміналу). Щоб виправити вікно терміналу, в якому я працював, мені потрібно було зробити:hash -r
Майк Хедман,

6
Краще, ніж створювати посилання на /usr/bin/openssl, можна створити посилання на /usr/local/bin/openssl. Це повинно передувати /usr/binвашим $PATHпроблемам, які випливають із "Захисту цілісності системи" в нових версіях ОС X.
mrKelley

14

Або для тих, хто використовує порти mac і не переживає за збереження версії

sudo port upgrade openssl

симплекс :-)


3
sudo port upgrade outdatedтакож працює.
д-р Джимбоб

1
Це смішно, тому, що обидва макпорти та заварювання обох встановити openssl на моїй машині було насправді причиною цього, що відбувається зі мною. Біг sudo port -f uninstall openssl @<old-version>зробив для мене трюк :)
yair

@yair, що має і макроспорт, і домашню мову, викличе багато проблем
користувач151019

6

Для вирішення зростання OCSP стану розширення запиту необмеженої пам'яті (CVE-2016-6304) на MacOS Sierra використання brewз захистом цілісності системи дозволила:

  1. Тимчасово відрегулюйте дозволи на /usr/localоновлення пива:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. Встановіть оновлену версію OpenSSL (можливо, ви хочете 1.0.2i):

    brew install openssl
    
  3. Ви можете / хочете видалити існуюче символьне посилання до openssl з /usr/local/bin:

    rm /usr/local/bin/openssl
    
  4. Повторно зв’яжіть правильну версію варіння:

    sudo ln -s /usr/local/Cellar/openssl/1.0.2i/bin/openssl /usr/local/bin/openssl
    
  5. Відновити оригінальні дозволи на /usr/local/bin:

    sudo chown root:wheel /usr/local
    

У моєму випадку стара версія OpneSSL знаходиться в / usr / bin. Це не вдається при спробі змінити дозвіл контейнера.
Раміс

Ви використовуєте Судо?
брендоскрипт

Так. Я використовував судо. Я знайшов коментар, що в останній версії os OS X тут не можна змінити дозвіл на цей файл. Тож я перестаю її досягати.
Раміс

Чому б просто не змінити свою $PATHзмінну, щоб заглянути /usr/local/bin?
брендоскрипт

Привіт всім, мене бентежать усі відповіді, скидаючи симпосилання, зв'язуючи, помилки з серцем тощо ... Коли я бігаю, $ openssl versionя отримую, OpenSSL 0.9.8zh 14 Jan 2016але коли біжу, $ brew install opensslотримую Warning: openssl 1.0.2l is already installed. Це означає, що у мене встановлені дві версії? Що саме мені зараз робити?
Джошуа

1

Хто не хоче використовувати brew чи порти, а просто хоче замінити встановлену OpenSSL 0.9.8 за замовчуванням, завжди може відключити захист цілісності системи, перезавантажившись у режим відновлення (cmd + R) та видавши

csrutil disable

а потім компілюйте openssl з

./config --prefix=/usr
make install

Він успішно замінив OpenSSL в ElCapitan для мене, і я зміг скласти curl і apache з httpd 2.4 без жодних проблем безпосередньо з джерел. Аргументація методу, який деякі можуть вважати драстичним, полягає в тому, що ElCapitan більше не підтримується Apple, і не надходять оновлення, тому він, ймовірно, не зламається. По-друге, це позбавить вас від вказівки на папку openssl в / usr / local для кожної програми, яку ви компілюєте, зробивши компіляцію більш надійною.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.