題:
如何在OS X中升級OpenSSL?
dr jimbob
2014-04-08 09:25:15 UTC
view on stackexchange narkive permalink

今天,令人沮喪的 OpenSSL漏洞被大肆宣布,它使攻擊者可以秘密檢測和竊取私有服務器密鑰(允許它們進入MitM並解密您的加密數據並竊取密碼)。這會影響OpenSSL版本,包括1.0.1f,這是我的最新Mavericks計算機 s> Mac上的版本(因為我使用端口/ brew安裝了其他軟件,這些軟件在沒有意識到的情況下更新了我的openssl它 i>):

  $ openssl versionOpenSSL 1.0.1f 2014年1月6日 

這表明我沒有使用Mavericks版本OpenSSL:

  $,其中openssl / opt / local / bin / openssl  

i>

OpenSSL今天發布了一個修復程序 1.0.1g中,我不知道如何在當前版本上安裝此固定版本?

您正在*不*使用OS X Mavericks隨附的版本-0.9.8y,它沒有令人討厭的錯誤(在1.0.1中引入)。最佳更新路徑取決於安裝新版本的位置和方式。 `openssl`可能會提供信息。另外,主要問題不是openssl命令,而是openssl庫(供其他程序使用),這些庫在0.9.x和1.0.x版本之間與API不兼容,因此您*不希望*更新系統提供的openssl庫!
@GordonDavisson-您完全正確。我誤解了。我顯然已經在這台機器上安裝了MacPort,從而升級了我的openssl。 (可能是在我嘗試使python2.7工作時)。可能應該刪除此問題,但是如果其他人犯了同樣的錯誤,則不會發現SapphireSun的好答案很有用)。
有了這個澄清的更新,我將保留它。可能有其他人在同一條船上,在這裡有這個應該可以使他們知道需要做什麼。
如果使用* brew *安裝OpenSSL,它將*不*將二進製文件鏈接到/ usr / bin。因此,如果在命令行上發出* openssl *,它將不會運行。
@MaxRied您如何運行自製軟件安裝的版本?我按照接受的答案中的說明安裝了新的openssl,而`openssl version`返回1.0.1g,但您是說`openssl`命令未使用該版本嗎?
當您將brew與openssl一起安裝時,它會告訴您,它不會鏈接它,因為他們擔心這會破壞某些OS X內部。
→Gordon:您應該將評論升級為答案。 2個命令和2個使用的庫之間的混淆太多。
四 答案:
SapphireSun
2014-04-08 09:46:48 UTC
view on stackexchange narkive permalink

對於它的價值,我只是使用自製軟件( http://brew.sh/):

  brew update brew install openssl brew link --force openssl openssl版本-a  

如果出現一個錯誤版本(1.0.1a-f),您可以通過以下方式找出正在使用的openssl版本:

  opensl  

通常是從/ usr / bin。為了確保獲得更新的版本,請將符號鏈接拖放到/ usr / local / bin中,以指向更新的openssl,如下所示:

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

作為最後一步的替代方法,有些人替換了 / usr /中的openssl 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。

不要刪除原始文件,只需將其重命名即可。如果您發現自製的版本出於某些目的無法使用,則沒有理由在沒有(工作)撥片的情況下使自己陷入困境。
足夠公平,但另一方面,我不會認為該版本有效...
即使存在此漏洞,它在您願意承擔計算出的風險以使應用程序X(取決於它)短暫運行的任何情況下仍然對您有用。或者,如果您更喜歡...“有效”,則是指折斷的撥片仍然可以推水。 :-p
請注意-執行這些步驟後,在終端窗口中鍵入“ openssl”失敗,並出現“沒有這樣的文件或目錄”錯誤,指向舊副本(但它確實在新的終端窗口中起作用)。我在工作,我需要做一個:`hash -r`
在OS X 10.9.5上,我使用自製軟件獲得了openssl二進製文件,但必須手動創建符號鏈接(答案的結尾)。
在嘗試了這10種不同的方式之後,這使我的OpenSSL在升級後恢復了正常工作。
如果我能提到另一個命令,人們可能會在這裡找到有用的信息…`php -r“ print_r(openssl_get_cert_locations());”將告訴您openssl在哪裡尋找證書。我有一個“ composer update”,但失敗了,“ ssl3_get_server_certificate:certificate verify failed”,結果是和更新Mozilla ca軟件包一樣,我需要添加一個`openssl.cafile = / usr / local / etc / openssl /cert.pem`行到我的php.ini文件,因此它知道在哪裡尋找它。
比在/ usr / bin / openssl上創建符號鏈接更好,可以在/ usr / local / bin / openssl上創建鏈接。這應該在$ PATH上的/ usr / bin之前,並繞過在較新版本的OS X中由“系統完整性保護”引起的任何問題。
對我來說@SapphireSun openssl不會更新。你能看看嗎http://pastebin.com/gZv4zcYj
如果沒有重命名“ / usr / bin / openssl”文件的權限,請[禁用](http://stackoverflow.com/a/32661637/1330787)`csrutil`。 重新啟動Mac,並在啟動時按cmd + r。然後進入實用程序>終端並鍵入以下命令: `csrutil禁用 重新啟動 之後,您可以重命名`/ usr / bin / openssl`。鍵入此命令作為@SapphireSun's答案。 在-s / usr / local / Cellar / openssl / / bin / openssl / usr / bin / openssl中 並檢查您的“ openssl版本”。
@SapphireSun`brew link openssl --force`將二進製文件鏈接到`/ usr / local / bin`,這排除了手動鏈接這些二進製文件的需要。但是,brew發出警告,不能忽略。
在-s / usr / local / opt / openssl / bin / openssl / usr / local / bin /中,將動態連接到自製軟件安裝的任何版本(或以後更新)。自製的摘要鏈接它/ usr / local / opt / openssl-> ../ Cellar / openssl / 1.0.2h_1`
設置符號鏈接路徑後,需要重新啟動終端。
如果避免--force失敗並且僅遵循運行brew info openssl時給出的說明,我將避免維護符號鏈接。這些狀態會更新$ PATH,使其首先包含openssl bin。有關更多信息,請參見http://stackoverflow.com/a/42385568/3985886。
我發現這篇中篇文章很有幫助。查找文本“ [UPDATE] 2016/12/11”,然後按照步驟3進行操作。我複制並粘貼了列出的命令,然後它起作用了。 我還添加了 將PATH =“ / usr / local / opt / openssl / bin:$ PATH”導出到我的.bash_profile https://medium.com/@katopz/how-to-upgrade-openssl-8d005554401
如果您使用的是brew,則只需使用“ brew upgrade openssl”來升級openssl
mammix2
2014-04-08 21:39:20 UTC
view on stackexchange narkive permalink

或者對於那些正在使用mac端口並且不擔心保留版本的人

  sudo端口升級openssl  

簡單的:-)

sudo端口升級已經過時。
這很有趣,在我的機器上同時安裝了macports和brew都安裝了openssl確實是我發生這種情況的原因。運行`sudo port -f uninstall openssl @ `對我有用:)
同時具有Macport和Homebrew的@yair會引起很多問題
brandonscript
2016-09-22 22:51:25 UTC
view on stackexchange narkive permalink

使用啟用了系統完整性保護 brew 在macOS Sierra上解決 OCSP狀態請求擴展無限制內存增長(CVE-2016-6304)

  1. 臨時調整對 / usr / local 的權限,以便brew可以更新:

      sudo chgrp -R管理員/ usr / local
    須藤chmod -R g + w / usr / local
     
  2. 安裝OpenSSL的更新版本(您可能需要1.0.2i):

     釀造openssl
     
  3. 您可能希望/需要從 / usr / local / bin 刪除到openssl的現有符號鏈接:

      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
     
  6. ol>
在我的情況下,舊版本的OpenSSL位於/ usr / bin中。嘗試更改bin權限時失敗。
您在使用Sudo嗎?
是。我用了sudo。我發現在最新版本的OS X中無法更改此文件的權限。所以我停止實現它。
為什麼不只更改$ PATH變量以使其在/ usr / local / bin中呢?
大家好,我對所有答案都很困惑,刪除了符號鏈接,鏈接,heartbleed bug等...當我運行`$ openssl version`時,我會得到`OpenSSL 0.9.8zh 2016年1月14日`,但是當我運行`$ brew install我得到“警告:openssl 1.0.2l已經安裝”。這是否意味著我安裝了兩個版本?我現在該怎麼辦?
@Joshua提出一個新問題
我有@brandonscript => [link](https://apple.stackexchange.com/questions/298818/upgrading-openssl-without-linking-and-aroundarounds)
什麼是“ root:wheel”?
Захар Joe
2018-05-16 03:07:34 UTC
view on stackexchange narkive permalink

誰不想使用brew或端口,而只想替換默認的OpenSSL 0.9.8安裝,則始終可以通過重新引導到恢復模式(cmd + R)並發出來禁用系統完整性保護

  csrutil禁用
 

然後用

編譯openssl
  ./ config --prefix = / usr
進行安裝
 

它為我成功地替代了ElCapitan中的OpenSSL,而且我能夠編譯curl和apache的httpd 2.4,而沒有任何直接來自源的問題。某些人可能認為過激的方法背後的原因是ElCapitan不再由Apple維護,並且沒有即將進行的更新,因此它可能不會損壞。其次,它使您不必為要編譯的每個程序都指向/ usr / local中的openssl文件夾,從而使編譯更加可靠。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...