OS XでOpenSSLをアップグレードする方法は?


126

今日、攻撃的な OpenSSLエクスプロイトが野生で発表されました。これにより、攻撃者は秘密のサーバーキーを密かに検出して盗むことができます(MitMを許可し、暗号化されたデータを解読し、パスワードを盗みます)。これは、最新のMavericksコンピューター Mac上のバージョンである1.0.1fを含むOpenSSLバージョンに影響します(portssl を使用して、気づかずにopensslを更新した他のソフトウェアをインストールしたため)。

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

これは、OpenSSLのMavericksバージョンを使用していないことを示しています。

$ which openssl
/opt/local/bin/openssl

OpenSSLは本日、1.0.1gで修正をリリースしましたが、この修正バージョンを現在のバージョンの上にインストールする方法を知りたいのですが?


16
あなたはされていない OS Xマーベリックスに付属のバージョンを使用して-それは(それが1.0.1で導入されました)ハートブリードのバグを持っていない0.9.8y、です。最適な更新パスは、新しいバージョンをインストールした場所と方法によって異なります。which openssl有益かもしれません。また、主要な問題はopensslコマンドではなく、opensslライブラリ(他のプログラムで使用される)です-バージョン0.9.xと1.0.xの間でAPI互換性がないため、更新したくないシステム提供のopensslライブラリ!
ゴードンデイヴィソン14

@GordonDavisson-あなたはまったく正しい。間違えました。どうやらMacPortこのマシンのある時点でopensslをアップグレードしたようです。(おそらくpython2.7を動作させようとしたとき)。おそらくこの質問を削除する必要がありますが、他の人が同じ間違いを犯した場合にSapphireSunのすばらしい答えが役に立つとは思わないでしょう)。
ジンボブ博士14

その明確なアップデートで、私はそれを残すでしょう。同じボートに他の人がいる可能性があります。ここにこれを持っていると、何をする必要があるかがわかります。
ゴードンデイヴィソン14

2
brewでOpenSSLをインストールすると、バイナリが/ usr / binにリンクされません。したがって、コマンドラインでopensslを発行すると実行されません。
マックスリード14

@MaxRied homebrewがインストールしたバージョンをどのように実行しますか?受け入れられた答えの指示で新しいopensslをインストールし、openssl version1.0.1g を返しましたが、opensslコマンドはそのバージョンを使用していないと言っていますか?
inorganik

回答:


147

それが価値があるため、私はちょうどhomebrew(http://brew.sh/)を使用しました:

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

不良バージョンのいずれか(1.0.1a-f)が発生した場合、使用しているopensslのバージョンを次のように把握できます。

which openssl

多くの場合、これは/ usr / binからのものです。更新されたバージョンを確実に取得するには、次のように、更新されたopensslを指すシンボリックリンクを/ usr / local / binにドロップします。

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でビルドしたバージョンが何らかの目的で機能しないことがわかった場合、(機能する)パドルなしでクリークを立てる理由はありません。
テリーN 14

1
...十分なフェアが、一方で、私が働いてそのバージョンを呼び出すことはありません
SapphireSun

1
この脆弱性があったとしても、アプリX(それに依存する)を短時間動作させるために、計算されたリスクを引き受けたいという状況では、依然として有用です。または、もしあなたが望むなら...壊れたパドルがまだ水を押すことができるという意味で「働く」。:-p
テリーN

8
注:これらの手順を実行した後、ターミナルウィンドウで「openssl」と入力すると、古いコピーを指す「no such file or directory」エラーで失敗しました(ただし、新しいターミナルウィンドウで機能しました)。:私は働いていたターミナルウィンドウを修正するには、私が行うために必要なhash -r
マイクHedman

6
でシンボリックリンクを作成するよりも、でリンクを/usr/bin/openssl作成できます/usr/local/bin/openssl。それは/usr/binあなたに先行し、$PATHOS Xの新しいバージョンの「システム整合性保護」に起因する問題を回避する必要があります
。– mrKelley

14

または、Macポートを使用していて、バージョンを維持することを心配していない人向け

sudo port upgrade openssl

シンプル:-)


3
sudo port upgrade outdated動作します。
ジンボブ博士14

1
それは面白いです、macportsとbrewの両方が私のマシンにopensslをインストールすることは、実際に私に起こっているこれの原因でした。実行sudo port -f uninstall openssl @<old-version>は私のためのトリックをしました:)
yair

@yairにmacportsとhomebrewの両方があると、多くの問題が発生します
-user151019

6

解決するためのOCSPステータス要求延長無制限メモリの増加(CVE-2016から6304)を使用してMacOSのシエラ上brew、システムの整合性の保護が有効になって:

  1. /usr/localbrewが更新できるように、アクセス許可を一時的に調整します。

    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. 適切なbrewバージョンを再リンクします。

    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にあります。ビンの許可を変更しようとすると失敗します。
ラミス

Sudoを使用していますか?
brandonscript

はい。sudoを使用しました。OS Xの最新バージョンでは、このファイルの許可を変更する方法はないというコメントを見つけました。だから私はそれを達成するのをやめる。
ラミス

ただ$PATH変数を変更して見てみ/usr/local/binませんか?
brandonscript

皆さん、こんにちは、私は私が実行すると...リンク、ハートブリードバグなど、シンボリックリンクを落とし、すべての答えで混乱しています$ openssl version私が手OpenSSL 0.9.8zh 14 Jan 2016が、私は実行したときに$ brew install openssl、私が得ますWarning: openssl 1.0.2l is already installed。これは、2つのバージョンがインストールされていることを意味しますか?今私は正確に何をすべきですか?
ジョシュア

1

brewまたはportsを使用せず、デフォルトのOpenSSL 0.9.8インストールを単に置き換えたい場合は、リカバリモード(cmd + R)で再起動して発行することにより、常にシステム整合性保護を無効にできます。

csrutil disable

その後、opensslをコンパイルします

./config --prefix=/usr
make install

ElCapitanのOpenSSLは私のために正常に置き換えられ、curlとapacheのhttpd 2.4をソースから直接問題なくコンパイルできました。抜本的と思われる方法の背後にある理由は、ElCapitanはもはやAppleによって保守されておらず、アップデートは予定されていないため、壊れない可能性が高いことです。第二に、コンパイルするプログラムごとに/ usr / localのopensslフォルダーを指定する必要がないため、コンパイルがより堅牢になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.