Bagaimana cara meningkatkan OpenSSL di OS X?

126

Hari ini eksploitasi OpenSSL yang menyentuh hati diumumkan di alam bebas, yang memungkinkan penyerang untuk secara diam-diam mendeteksi dan mencuri kunci server pribadi (memungkinkan mereka untuk MitM dan mendekripsi data terenkripsi Anda dan mencuri kata sandi). Ini mempengaruhi versi OpenSSL termasuk 1.0.1f yang merupakan versi pada komputer Mavericks Mac saya yang terbaru (karena saya menggunakan port / minuman untuk menginstal perangkat lunak lain yang memperbarui openssl saya tanpa saya sadari ):

$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

Ini menunjukkan saya tidak menggunakan versi Mavericks OpenSSL:

$ which openssl
/opt/local/bin/openssl

OpenSSL merilis perbaikan hari ini di 1.0.1g dan saya bertanya-tanya bagaimana saya bisa menginstal versi tetap ini dari versi saya saat ini?

dr jimbob
sumber
16
Anda tidak menggunakan versi yang datang dengan OS X Mavericks - itu 0.9.8y, yang tidak memiliki bug heartbleed (diperkenalkan di 1.0.1). Jalur pembaruan terbaik Anda akan bergantung pada di mana dan bagaimana Anda menginstal versi yang lebih baru. which opensslmungkin informatif. Juga, masalah utama bukanlah perintah openssl, itu adalah openssl libraries (yang digunakan oleh program lain) - itu bukan API yang kompatibel antara versi 0.9.x dan 1.0.x, jadi Anda tidak ingin memperbarui perpustakaan openssl yang disediakan sistem!
Gordon Davisson
@GordonDavisson - Anda benar sekali. Saya salah. Saya rupanya telah menginstal MacPortdi beberapa titik pada mesin ini yang meningkatkan openssl saya. (Mungkin ketika saya mencoba untuk membuat python2.7 berfungsi). Mungkin harus menghapus pertanyaan ini, tetapi tidak akan kalau-kalau orang lain membuat kesalahan yang sama menemukan jawaban bagus SapphireSun berguna).
dr jimbob
Dengan pembaruan yang mengklarifikasi itu, saya akan meninggalkannya. Mungkin ada orang lain di kapal yang sama, dan memiliki ini di sini harus memberi mereka ide apa yang perlu dilakukan.
Gordon Davisson
2
Jika Anda menginstal OpenSSL dengan brew, ia tidak akan menautkan binari ke / usr / bin. Oleh karena itu tidak akan dijalankan jika Anda mengeluarkan openssl pada baris perintah.
Max Ried
@ MaxRied bagaimana Anda menjalankan versi yang diinstal homebrew? Saya menginstal openssl baru dengan instruksi dalam jawaban yang diterima, dan openssl versionmengembalikan 1.0.1g, tetapi Anda mengatakan opensslperintah tidak menggunakan versi itu?
inorganik

Jawaban:

147

Untuk apa nilainya, saya hanya menggunakan homebrew ( http://brew.sh/ ):

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

Jika salah satu versi buruk muncul (1.0.1a-f), Anda dapat mengetahui versi openssl yang Anda gunakan, dengan cara ini:

which openssl

Seringkali ini dari / usr / bin. Untuk memastikan Anda mendapatkan versi yang diperbarui, masukkan symlink ke / usr / local / bin untuk menunjuk ke openssl yang diperbarui, seperti ini:

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

Sebagai alternatif untuk langkah terakhir itu, beberapa orang mengganti openssl /usr/bindengan symlink ke /usr/local/Cellar/openssl/1.0.1g/bin/openssl(atau apa pun versi Anda):

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

Tapi ini diketahui menyebabkan masalah dengan beberapa versi OSX yang lebih baru. Lebih baik menyisipkan symlink baru ke / usr / local / bin, yang harus diutamakan pada path Anda di atas / usr / bin.

SapphireSun
sumber
7
Jangan hapus yang asli — cukup ganti namanya. Jika Anda menemukan versi buatan Homebrew tidak berfungsi untuk tujuan tertentu, tidak ada alasan untuk memasang sungai tanpa dayung (berfungsi).
Terry N
1
Cukup adil, tetapi di sisi lain, saya tidak akan menyebut versi itu berfungsi ...
SapphireSun
1
Bahkan dengan kerentanannya, tetap bermanfaat bagi Anda dalam situasi apa pun di mana Anda bersedia mengambil risiko yang diperhitungkan untuk mendapatkan aplikasi X (yang bergantung padanya) untuk bekerja secara singkat. Atau, jika Anda lebih suka ... "bekerja" dalam arti dayung yang rusak masih bisa mendorong air. :-p
Terry N
8
Hanya sebuah catatan - setelah melakukan langkah-langkah ini, mengetik "openssl" di jendela terminal gagal dengan "tidak ada file atau direktori" kesalahan menunjuk ke salinan lama (tetapi itu berhasil di jendela terminal baru). Untuk memperbaiki jendela terminal tempat saya bekerja, saya perlu melakukan:hash -r
Mike Hedman
6
Lebih baik daripada membuat symlink di /usr/bin/openssl, seseorang dapat membuat tautan di /usr/local/bin/openssl. Itu harus mendahului /usr/binAnda $PATHdan memintas masalah yang timbul dari "Perlindungan Integritas Sistem" di versi OS X yang lebih baru
mrKelley
14

Atau bagi mereka yang menggunakan port mac, dan tidak khawatir tentang menjaga versi

sudo port upgrade openssl

simples :-)

mammix2
sumber
3
sudo port upgrade outdatedjuga berfungsi.
dr jimbob
1
Itu lucu, memiliki kedua macport dan menyeduh keduanya menginstal openssl pada mesin saya sebenarnya penyebab hal ini terjadi pada saya. Berlari sudo port -f uninstall openssl @<old-version>melakukan trik untukku :)
yair
@yair memiliki kedua macport dan homebrew akan menyebabkan banyak masalah
user151019
6

Untuk mengatasi ekstensi Permintaan Status OCSP pertumbuhan memori tidak terbatas (CVE-2016-6304) di macOS Sierra menggunakan brewdengan Perlindungan Integritas Sistem diaktifkan:

  1. Sesuaikan sementara izin /usr/localagar minuman dapat memperbarui:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  2. Instal versi terbaru dari OpenSSL (Anda mungkin ingin 1.0.2i):

    brew install openssl
    
  3. Anda mungkin ingin / perlu menghapus symlink yang ada untuk openssl dari /usr/local/bin:

    rm /usr/local/bin/openssl
    
  4. Tautkan kembali versi minuman yang tepat:

    sudo ln -s /usr/local/Cellar/openssl/1.0.2i/bin/openssl /usr/local/bin/openssl
    
  5. Kembalikan izin asli pada /usr/local/bin:

    sudo chown root:wheel /usr/local
    
naskah merek
sumber
Dalam kasus saya, versi lama OpneSSL terletak di / usr / bin. Gagal saat mencoba mengubah izin nampan.
Ramis
Apakah Anda menggunakan Sudo?
naskah merek
Iya. Saya menggunakan sudo. Saya menemukan komentar bahwa dalam versi terbaru os OS X di sini tidak ada cara untuk mengubah izin file ini. Jadi saya berhenti mencapainya.
Ramis
Mengapa tidak hanya mengubah $PATHvariabel Anda untuk melihat /usr/local/bin?
Naskah Naskah
Hai semuanya, saya bingung dengan semua jawaban, menjatuhkan symlink, menghubungkan, bug heartbleed, dll ... Ketika saya menjalankan $ openssl versionsaya mendapatkan OpenSSL 0.9.8zh 14 Jan 2016tetapi ketika saya menjalankan $ brew install opensslsaya dapatkan Warning: openssl 1.0.2l is already installed. Apakah ini berarti saya memiliki dua versi yang diinstal? Apa sebenarnya yang harus saya lakukan sekarang?
Joshua
1

Siapa pun yang tidak ingin menggunakan bir atau port dan hanya ingin mengganti instalasi OpenSSL 0.9.8 default selalu dapat menonaktifkan perlindungan integritas sistem dengan me-reboot ke mode pemulihan (cmd + R) dan mengeluarkan

csrutil disable

dan kemudian kompilasi openssl dengan

./config --prefix=/usr
make install

Itu berhasil menggantikan OpenSSL di ElCapitan untuk saya dan saya dapat mengkompilasi curl dan apache httpd 2.4 tanpa masalah langsung dari sumber. Alasan di balik metode yang beberapa orang anggap drastis adalah bahwa ElCapitan tidak lagi dikelola oleh Apple dan tidak ada pembaruan yang akan datang sehingga kemungkinan tidak akan rusak. Kedua, ini menghemat Anda dari menunjuk ke folder openssl di / usr / local untuk setiap program yang Anda kompilasi membuat kompilasi lebih kuat.

Joeахар Joe
sumber