Làm cách nào để nâng cấp OpenSSL trong OS X?


126

Ngày nay, heartbleed OpenSSL khai thác đã được công bố trong tự nhiên, cho phép kẻ tấn công lén lút phát hiện và đánh cắp chìa khóa private server (cho phép họ MITM và giải mã dữ liệu được mã hóa của bạn và ăn cắp mật khẩu). Điều này ảnh hưởng đến các phiên bản OpenSSL bao gồm 1.0.1f, đây là phiên bản trên máy tính Mavericks cập nhật của tôi (vì tôi đã sử dụng port / brew để cài đặt phần mềm khác cập nhật openssl của tôi mà tôi không nhận ra )

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

Điều này chứng tỏ tôi không sử dụng phiên bản Mavericks của OpenSSL:

$ which openssl
/opt/local/bin/openssl

OpenSSL đã phát hành bản sửa lỗi ngày hôm nay trong 1.0.1g và tôi tự hỏi làm thế nào tôi có thể cài đặt phiên bản cố định này so với phiên bản hiện tại của tôi?


16
Bạn không sử dụng phiên bản đi kèm với OS X Mavericks - đó là 0.9.8y, không có lỗi nghiêm trọng (được giới thiệu trong 1.0.1). Đường dẫn cập nhật tốt nhất của bạn sẽ phụ thuộc vào vị trí và cách bạn cài đặt phiên bản mới hơn. which opensslcó thể là thông tin Ngoài ra, vấn đề chính không phải là lệnh openssl, đó là các thư viện openssl (được sử dụng bởi các chương trình khác) - những thư viện này không tương thích API giữa các phiên bản 0.9.x và 1.0.x, vì vậy bạn không muốn cập nhật thư viện openssl do hệ thống cung cấp!
Gordon Davisson

@GordonDavisson - Bạn hoàn toàn đúng. Tôi đã lầm. Tôi dường như đã cài đặt MacPorttại một số điểm trên máy này đã nâng cấp openssl của tôi. (Có lẽ khi tôi đang cố gắng để python2.7 hoạt động). Có lẽ nên xóa câu hỏi này, nhưng sẽ không trong trường hợp những người khác mắc lỗi tương tự thấy câu trả lời tuyệt vời của SapphireSun hữu ích).
dr jimbob

Với bản cập nhật làm rõ đó, tôi sẽ rời khỏi nó. Có lẽ có những người khác trong cùng một chiếc thuyền, và có được điều này ở đây sẽ cho họ một ý tưởng những gì cần phải làm.
Gordon Davisson

2
Nếu bạn cài đặt OpenSSL với brew, nó sẽ không liên kết các nhị phân với / usr / bin. Do đó, nó sẽ không được chạy nếu bạn phát hành openssl trên dòng lệnh.
Max Ried

@MaxRied làm thế nào để bạn chạy phiên bản mà homebrew đã cài đặt? Tôi đã cài đặt openssl mới theo hướng dẫn trong câu trả lời được chấp nhận và openssl versiontrả về 1.0.1g, nhưng bạn đang nói opensslcác lệnh không sử dụng phiên bản đó?
inorganik

Câu trả lời:


147

Đối với những gì nó có giá trị, tôi chỉ sử dụng homebrew ( http://brew.sh/ ):

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

Nếu một trong những phiên bản xấu xuất hiện (1.0.1a-f), bạn có thể tìm ra phiên bản openssl nào bạn đang sử dụng, theo cách này:

which openssl

Thường thì đây là từ / usr / bin. Để đảm bảo bạn có được phiên bản cập nhật, hãy thả một liên kết tượng trưng vào / usr / local / bin để trỏ đến openssl được cập nhật, như thế này:

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

Thay thế cho bước cuối cùng đó, một số người thay thế openssl /usr/binbằng một liên kết tượng trưng đến /usr/local/Cellar/openssl/1.0.1g/bin/openssl(hoặc bất kể phiên bản của bạn là gì):

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

Nhưng điều này được biết là gây ra vấn đề với một số phiên bản OSX mới hơn. Tốt hơn là chỉ cần chèn một liên kết tượng trưng mới vào / usr / local / bin, điều này sẽ được ưu tiên trên đường dẫn của bạn hơn / usr / bin.


7
Đừng xóa bản gốc chỉ đổi tên nó. Nếu bạn thấy phiên bản do Homebrew xây dựng không hoạt động vì mục đích nào đó, không có lý do gì để bạn tự đặt mình lên một con suối mà không có mái chèo (hoạt động).
Terry N

1
Đủ công bằng, nhưng mặt khác, tôi sẽ không gọi phiên bản đó hoạt động ...
SapphireSun

1
Ngay cả với lỗ hổng bảo mật, nó vẫn hữu ích cho bạn trong mọi trường hợp bạn sẵn sàng chấp nhận rủi ro được tính toán để ứng dụng X (phụ thuộc vào nó) hoạt động nhanh chóng. Hoặc, nếu bạn thích ... "làm việc" theo nghĩa là một mái chèo bị hỏng vẫn có thể đẩy nước. :-p
Terry N

8
Chỉ cần một lưu ý - sau khi thực hiện các bước này, việc gõ "openssl" trong cửa sổ đầu cuối không thành công với lỗi "không có tệp hoặc thư mục như vậy" chỉ vào bản sao cũ (nhưng nó đã hoạt động trong cửa sổ đầu cuối mới). Để sửa cửa sổ terminal mà tôi đang làm việc, tôi cần phải thực hiện:hash -r
Mike Hedman

6
Tốt hơn là tạo một liên kết tượng trưng tại /usr/bin/openssl, người ta có thể tạo liên kết tại /usr/local/bin/openssl. Điều đó sẽ xảy ra trước /usr/binbạn $PATHvà bỏ qua mọi vấn đề phát sinh từ "Bảo vệ toàn vẹn hệ thống" trong các phiên bản mới hơn của OS X.
mrKelley

14

Hoặc cho những người đang sử dụng cổng mac và không lo lắng về việc giữ phiên bản

sudo port upgrade openssl

đơn giản :-)


3
sudo port upgrade outdatedcũng hoạt động.
dr jimbob

1
Điều đó thật buồn cười, việc cả macports và brew đều cài đặt openssl trên máy của tôi thực sự là nguyên nhân khiến điều này xảy ra với tôi. Chạy sudo port -f uninstall openssl @<old-version>đã lừa tôi :)
yair 14/03/2016

@yair có cả macports và homebrew sẽ gây ra nhiều vấn đề
user151019

6

Đối với việc giải quyết các OCSP Status Yêu cầu mở rộng phát triển bộ nhớ không giới hạn (CVE-2016-6304) trên hệ điều hành MacOS Sierra sử dụng brewvới hệ thống bảo vệ toàn vẹn được kích hoạt:

  1. Điều chỉnh tạm thời quyền trên /usr/localđể brew có thể cập nhật:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. Cài đặt phiên bản cập nhật của OpenSSL (bạn có thể muốn 1.0.2i):

    brew install openssl
    
  3. Bạn có thể muốn / cần xóa một liên kết tượng trưng hiện có để openssl từ /usr/local/bin:

    rm /usr/local/bin/openssl
    
  4. Liên kết lại phiên bản ủ phù hợp:

    sudo ln -s /usr/local/Cellar/openssl/1.0.2i/bin/openssl /usr/local/bin/openssl
    
  5. Khôi phục quyền ban đầu trên /usr/local/bin:

    sudo chown root:wheel /usr/local
    

Trong trường hợp của tôi, phiên bản cũ của OpneSSL được đặt trong / usr / bin. Đó là thất bại khi cố gắng thay đổi quyền bin.
Ramis

Bạn đang sử dụng Sudo?
brandonscript

Đúng. Tôi đã sử dụng sudo. Tôi thấy nhận xét rằng trong phiên bản mới nhất os OS X ở đây không có cách nào để thay đổi quyền của tệp này. Vì vậy, tôi ngừng đạt được nó.
Ramis

Tại sao không chỉ thay đổi $PATHbiến của bạn để nhìn vào /usr/local/bin?
brandonscript

Xin chào mọi người, tôi bối rối bởi tất cả các câu trả lời, bỏ liên kết tượng trưng, ​​liên kết, lỗi đau lòng, v.v ... Khi tôi chạy $ openssl versiontôi nhận được OpenSSL 0.9.8zh 14 Jan 2016nhưng khi tôi chạy $ brew install openssltôi nhận được Warning: openssl 1.0.2l is already installed. Điều này có nghĩa là tôi có hai phiên bản được cài đặt? Chính xác thì tôi nên làm gì bây giờ?
Joshua

1

Bất cứ ai không muốn sử dụng brew hoặc cổng và chỉ muốn thay thế cài đặt OpenSSL 0.9.8 mặc định luôn có thể vô hiệu hóa bảo vệ toàn vẹn hệ thống bằng cách khởi động lại vào chế độ phục hồi (cmd + R) và phát hành

csrutil disable

và sau đó biên dịch openssl với

./config --prefix=/usr
make install

Nó đã thay thế thành công OpenSSL trong ElCapitan cho tôi và tôi đã có thể biên dịch httpd 2.4 của curl và apache mà không gặp sự cố trực tiếp nào từ các nguồn. Lý do đằng sau phương pháp mà một số người có thể cân nhắc quyết liệt là ElCapitan không còn được Apple duy trì và không có bản cập nhật nào sắp ra mắt nên có khả năng nó sẽ không bị hỏng. Thứ hai, nó giúp bạn tiết kiệm từ việc trỏ đến thư mục openssl trong / usr / local cho mọi chương trình bạn biên dịch làm cho quá trình biên dịch mạnh mẽ hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.