วิธีอัปเกรด OpenSSL ใน OS X


126

วันนี้การหาประโยชน์จาก OpenSSL ที่หัวใจวายได้ประกาศออกมาอย่างรวดเร็วซึ่งช่วยให้ผู้โจมตีสามารถตรวจจับและขโมยคีย์เซิร์ฟเวอร์ส่วนตัวอย่างลับ ๆ ล่อใจ (อนุญาตให้ MitM และถอดรหัสข้อมูลที่เข้ารหัสและขโมยรหัสผ่าน) สิ่งนี้มีผลต่อเวอร์ชัน OpenSSL ซึ่งรวมถึง 1.0.1f ซึ่งเป็นเวอร์ชั่นในคอมพิวเตอร์ Mavericks ล่าสุดของ Mac (เพราะฉันใช้พอร์ต / ชงเพื่อติดตั้งซอฟต์แวร์อื่นซึ่งอัปเดต 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 Mavericks - ที่ 0.9.8y ซึ่งไม่มีข้อผิดพลาด heartbleed (แนะนำในเวอร์ชั่น 1.0.1) เส้นทางการอัปเดตที่ดีที่สุดของคุณจะขึ้นอยู่กับตำแหน่งและวิธีการติดตั้งเวอร์ชันที่ใหม่กว่า which opensslอาจเป็นข้อมูล นอกจากนี้ปัญหาที่สำคัญไม่ใช่คำสั่ง openssl แต่เป็นไลบรารี openssl (ซึ่งใช้โดยโปรแกรมอื่น) ซึ่งไม่รองรับ API ระหว่างรุ่น 0.9.x และ 1.0.x ดังนั้นคุณไม่ต้องการอัปเดต ไลบรารี openssl ที่ระบบจัดมาให้!
Gordon Davisson

@GordonDavisson - คุณพูดถูก ฉันเข้าใจผิด เห็นได้ชัดว่าฉันได้ติดตั้งMacPortในบางจุดบนเครื่องนี้ซึ่งอัปเกรด openssl ของฉัน (อาจเป็นตอนที่ฉันพยายามทำให้ python2.7 ทำงานได้) อาจจะลบคำถามนี้ แต่จะไม่ทำในกรณีที่คนอื่นทำผิดพลาดเหมือนกันหาคำตอบที่ดีของ SapphireSun)
dr jimbob

ด้วยการอัพเดทที่ชัดเจนฉันจะทิ้งมันไว้ อาจมีคนอื่นอยู่ในเรือลำเดียวกันและการมีที่นี่ควรทำให้พวกเขารู้ว่าต้องทำอะไร
Gordon Davisson

2
หากคุณติดตั้ง OpenSSL ด้วยการสร้างมันจะไม่เชื่อมโยงไบนารีไปยัง / usr / bin ดังนั้นมันจะไม่ทำงานหากคุณออกopensslบนบรรทัดคำสั่ง
Max Ried

@MaxRied คุณจะเรียกใช้เวอร์ชันที่ homebrew ติดตั้งได้อย่างไร ฉันติดตั้ง openssl ใหม่ด้วยคำแนะนำในคำตอบที่ยอมรับแล้วและopenssl versionคืน 1.0.1g แต่คุณกำลังพูดว่าopensslคำสั่งไม่ได้ใช้เวอร์ชันนั้นหรือไม่
อนินทรีย์

คำตอบ:


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 เพื่อให้แน่ใจว่าคุณได้รับเวอร์ชันที่อัปเดตแล้วให้วาง symlink ลงใน / usr / local / bin เพื่อชี้ไปที่ openssl ที่อัปเดตเช่นนี้:

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

เพื่อเป็นทางเลือกแทนขั้นตอนสุดท้ายนั้นบางคนแทนที่ openssl /usr/binด้วย symlink เป็น/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 เวอร์ชั่นใหม่กว่านี้ ดีกว่าเพียงแค่แทรก symlink ใหม่ลงใน / usr / local / bin ซึ่งควรมีความสำคัญเหนือกว่าพา ธ ของคุณมากกว่า / usr / bin


7
อย่าลบต้นฉบับ - เพียงแค่เปลี่ยนชื่อ หากคุณพบว่าเวอร์ชันที่สร้างโดย Homebrew ใช้ไม่ได้กับบางวัตถุประสงค์ก็ไม่มีเหตุผลที่จะสร้างลำห้วยโดยไม่ต้องใช้ไม้พาย (ใช้งาน)
เทอร์รี่ N

1
ยุติธรรมเพียงพอ แต่ในมืออื่น ๆ ที่ฉันจะไม่เรียกว่าการทำงานรุ่น ...
SapphireSun

1
แม้จะมีช่องโหว่ แต่ก็ยังมีประโยชน์สำหรับคุณในทุกสถานการณ์ที่คุณยินดีรับความเสี่ยงที่คำนวณได้เพื่อที่จะได้รับแอป X (ขึ้นอยู่กับมัน) เพื่อให้ทำงานได้อย่างรวดเร็ว หรือถ้าคุณต้องการ ... "ทำงาน" ในแง่ที่ว่าไม้พายที่หักก็ยังสามารถดันน้ำได้ :-p
เทอร์รี่ N

8
เพียงแค่ทราบ - หลังจากทำตามขั้นตอนเหล่านี้การพิมพ์ "openssl" ในหน้าต่างเทอร์มินัลล้มเหลวโดยมีข้อผิดพลาด "ไม่มีไฟล์หรือไดเรกทอรี" ชี้ไปที่สำเนาเก่า (แต่ทำงานในหน้าต่างเทอร์มินัลใหม่) ในการแก้ไขหน้าต่างเทอร์มินัลที่ฉันทำงานฉันต้องทำ:hash -r
Mike Hedman

6
ดีกว่าการสร้าง symlink ที่หนึ่งสามารถสร้างการเชื่อมโยงที่/usr/bin/openssl /usr/local/bin/opensslสิ่งนี้ควร/usr/binอยู่ข้างหน้าคุณ$PATHและหลีกเลี่ยงปัญหาใด ๆ ที่เกิดขึ้นจาก "การป้องกันความสมบูรณ์ของระบบ" ใน OS X เวอร์ชันใหม่กว่า
mrKelley

14

หรือสำหรับผู้ที่ใช้พอร์ต mac และไม่กังวลเกี่ยวกับการรักษาเวอร์ชัน

sudo port upgrade openssl

simples :-)


3
sudo port upgrade outdatedยังใช้งานได้
dr jimbob

1
มันตลกดีที่มีทั้ง macports และการติดตั้ง openssl ทั้งสองบนเครื่องของฉันเป็นสาเหตุของสิ่งนี้ที่เกิดขึ้นกับฉัน การวิ่งsudo port -f uninstall openssl @<old-version>ทำได้เคล็ดลับสำหรับฉัน :)
yair

@ ฉันมีทั้ง macports และ homebrew จะทำให้เกิดปัญหามากมาย
user151019

6

สำหรับการแก้ไขการขยายสถานะคำขอหน่วยความจำ OCSP ที่เพิ่มขึ้นอย่างไม่ จำกัด ของหน่วยความจำ (CVE-2016-6304)บน macOS Sierra โดยใช้brewกับSystem Integrity Protection ที่เปิดใช้งาน:

  1. ปรับการอนุญาตชั่วคราว/usr/localเพื่อให้ Brew สามารถอัปเดต:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. ติดตั้ง OpenSSL เวอร์ชันอัปเดต (คุณอาจต้องการ 1.0.2i):

    brew install openssl
    
  3. คุณอาจต้องการ / จำเป็นต้องลบ symlink ที่มีอยู่เพื่อ 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 มันล้มเหลวเมื่อพยายามเปลี่ยนสิทธิ์ถัง
Ramis

คุณใช้ Sudo หรือไม่
brandonscript

ใช่. ฉันใช้ sudo ฉันพบความคิดเห็นว่าในเวอร์ชันล่าสุด os OS X ที่นี่ไม่มีวิธีที่จะเปลี่ยนการอนุญาตของไฟล์นี้ ดังนั้นฉันหยุดการบรรลุมัน
Ramis

ทำไมไม่เปลี่ยน$PATHตัวแปรของคุณเพื่อดู/usr/local/bin?
brandonscript

สวัสดีทุกคนฉันกำลังสับสนโดยคำตอบทั้งหมดลดลง symlink เชื่อมโยงข้อผิดพลาด Heartbleed ฯลฯ ... เมื่อฉันเรียก$ openssl versionฉันได้รับOpenSSL 0.9.8zh 14 Jan 2016แต่เมื่อฉันเรียกฉันได้รับ$ brew install openssl Warning: openssl 1.0.2l is already installedหมายความว่าฉันมีสองรุ่นติดตั้งอยู่หรือไม่ ตอนนี้ฉันควรทำอย่างไรดี?
Joshua

1

ใครก็ตามที่ไม่ต้องการใช้ชงหรือพอร์ตและเพียงต้องการเปลี่ยนการติดตั้ง OpenSSL 0.9.8 ที่เป็นค่าเริ่มต้นสามารถปิดการใช้งานการป้องกันความสมบูรณ์ของระบบได้โดยการบูตเครื่องใหม่ในโหมดการกู้คืน (cmd + R) และออก

csrutil disable

และคอมไพล์ openssl ด้วย

./config --prefix=/usr
make install

มันประสบความสำเร็จในการแทนที่ OpenSSL ใน ElCapitan สำหรับฉันและฉันสามารถรวบรวม httpd 2.4 ของ curl และ apache ได้โดยไม่มีปัญหาใด ๆ จากแหล่งโดยตรง เหตุผลเบื้องหลังวิธีการที่บางคนอาจเห็นว่ารุนแรงนั้นก็คือ ElCapitan นั้นจะไม่ได้รับการดูแลโดย Apple อีกต่อไปและไม่มีการอัพเดทใด ๆ ประการที่สองมันช่วยให้คุณประหยัดจากการชี้ไปที่โฟลเดอร์ openssl ใน / usr / local สำหรับทุกโปรแกรมที่คุณคอมไพล์ทำให้การรวบรวมมีประสิทธิภาพมากขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.