Homebrew menolak untuk menautkan OpenSSL

143

Saya di: OSX 10.11.6, Homebrew version 0.9.9m OpenSSL 0.9.8zg 14 Juli 2015

Saya mencoba bermain dengan dotnetcore dan dengan mengikuti instruksinya ,

Saya telah meningkatkan / menginstal versi terbaru dari openssl:

> brew install openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2h_1.el_capitan.bottle.tar.gz
Already downloaded: /Users/administrator/Library/Caches/Homebrew/openssl-1.0.2h_1.el_capitan.bottle.tar.gz
==> Pouring openssl-1.0.2h_1.el_capitan.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/openssl/certs

and run
  /usr/local/opt/openssl/bin/c_rehash

This formula is keg-only, which means it was not symlinked into /usr/local.

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include

Tetapi ketika saya mencoba untuk menautkan openssl saya terus mengalami kesalahan penautan ini:

> brew link --force openssl
Warning: Refusing to link: openssl
Linking keg-only OpenSSL means you may end up linking against the insecure,
deprecated system version while using the headers from the Homebrew version.
Instead, pass the full include/library paths to your compiler e.g.:
  -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

Pilihan untuk menyertakan flag compiler tidak masuk akal bagi saya, karena saya tidak mengkompilasi library yang saya andalkan ini.

EDIT dotnetcore telah memperbarui instruksinya:

brew update    
brew install openssl    
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/    
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/
daviddeath
sumber
3
Untuk .NET Core, Anda memerlukan versi OpenSSL yang didukung, yaitu versi 1.0.1 atau 1.0.2. Karena Anda melaporkan versi 0.9.8 mungkin Anda perlu brew upgrade opensslterlebih dahulu?
bartonjs
2
Saya sudah melakukannya. Saya seharusnya mengklarifikasi, tetapi saya tidak menambahkan langkah-langkah itu ke pertanyaan. Tapi saya sudah melakukan brew updatedan brew install openssl. Ini mencoba memasang versi yang didukung.
daviddeath
2
Sepertinya Homebrew telah memblokirnya secara eksplisit: github.com/Homebrew/brew/commit/… .
bartonjs
4
Dan .. untuk terus melengkapi ocehan saya, Anda mungkin tertarik pada apa pun yang berkembang di github.com/Homebrew/brew/pull/597
bartonjs
2
"... ketika saya mencoba menautkan openssl, saya terus mengalami kesalahan penautan ini: .." - Lihat juga Bagaimana cara menyetel jalur runtime (-rpath) dari file yang dapat dieksekusi dengan gcc di Mac OSX? . Ini dapat membantu Anda selalu memuat pustaka yang benar pada waktu proses, jika Brew tidak menambahkannya.
jww

Jawaban:

63

Seperti yang disarankan oleh pembaruan untuk jawaban lain, solusi untuk menginstal minuman lama openssl101 tidak akan berfungsi lagi. Untuk solusi saat ini, lihat komentar ini di dotnet / cli # 3964 .

Bagian paling relevan dari masalah yang disalin di sini:

Saya melihat ke opsi lain yang disarankan untuk mengatur jalur jalan di perpustakaan. Saya pikir berikut ini adalah solusi yang lebih baik yang hanya akan mempengaruhi perpustakaan khusus ini.

sudo install_name_tool -add_rpath /usr/local/opt/openssl/lib /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib

dan / atau jika Anda menginstal NETCore 1.0.1, lakukan perintah yang sama untuk 1.0.1 juga:

sudo install_name_tool -add_rpath /usr/local/opt/openssl/lib /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.1/System.Security.Cryptography.Native.dylib

Akibatnya, daripada memberi tahu sistem operasi untuk selalu menggunakan SSL versi homebrew dan berpotensi menyebabkan kerusakan, kami memberi tahu dotnet cara menemukan pustaka yang benar.

Yang juga penting, sepertinya Microsoft menyadari masalah ini dan memiliki a) rencana yang agak segera untuk dikurangi serta b) solusi jangka panjang (kemungkinan membundel OpenSSL dengan dotnet).

Hal lain yang perlu diperhatikan: /usr/local/opt/openssl/libadalah tempat minuman terhubung secara default:

13:22 $ ls -l /usr/local/opt/openssl
lrwxr-xr-x  1 ben  admin  26 May 15 14:22 /usr/local/opt/openssl -> ../Cellar/openssl/1.0.2h_1

Jika karena alasan apa pun Anda menginstal minuman dan menautkannya di lokasi yang berbeda, maka jalur itu yang harus Anda gunakan sebagai jalur jalan.

Setelah Anda memperbarui rpath libray System.Security.Cryptography.Native.dylib, Anda harus memulai ulang sesi interaktif Anda (yaitu, tutup konsol Anda dan mulai yang lain).

Ben Collins
sumber
Di mana saya bisa menambahkan baris itu? Saya mencoba untuk membuat ini bekerja di CI. Saya mendapatkan a /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib (No such file or directory).
mrahhal
@mrahhal itulah jalur instalasi dotnetperkakas. Mungkin saja Anda tidak menginstalnya atau Anda menginstal atau ke lokasi lain. Jika sudah terpasang dan di pihak Anda, Anda dapat menggunakannya which dotnetuntuk menemukannya.
Ben Collins
Oh, baru sadar saya menambahkan baris ini sebelum menginstal dotnet. Akan mencoba lagi dan kembali.
mrahhal
3
Berhasil untuk saya, dalam kasus saya sdk diinstal ke direktori yang berbeda jadi saya harus mengubah jalurnya.
mrahhal
4
Dengan dotnet 1.1.0 saya harus melakukan:sudo install_name_tool -add_rpath /usr/local/opt/openssl/lib /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.1.0/System.Security.Cryptography.Native.OpenSsl.dylib
Bouke
61

Inilah yang berhasil untuk saya:

brew update
brew install openssl
ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/Cellar/openssl/1.0.2j/bin/openssl /usr/local/bin/openssl

Terima kasih kepada @dorlandode di utas ini https://github.com/Homebrew/brew/pull/597

NB: Saya hanya menggunakan ini sebagai perbaikan sementara sampai saya dapat menghabiskan waktu dengan benar menginstal Opensl lagi dari awal. Seingat saya, saya menghabiskan sebagian besar hari debugging dan mengalami masalah sebelum saya menyadari bahwa cara terbaik adalah menginstal secara manual sertifikat yang saya butuhkan satu per satu. Silakan baca tautan di komentar @ bouke sebelum mencoba ini.

rorykoehler
sumber
9
jalur lengkap untuk tautan terakhir /usr/local/bin/openssl?
Mohamed Hafez
Mengapa jawaban ini tidak diterima, Anda menyelamatkan hidup saya. :: jempol ke atas ::
wukong
2
Ada alasan bagus mengapa brew menolak melakukan ini. Lihat juga ini: github.com/Homebrew/brew/pull/597 .
Bouke
8
Solusi ini bekerja untuk saya, tapi saya harus berubah 1.0.2juntuk 1.0.2kkarena perbedaan versi. Jadi pengguna berhati-hatilah, Anda mungkin perlu menyesuaikan jalur untuk versi saat ini
Jeff
Saya melihat komentar @ Jeff agak terlambat. Jika Anda melakukannya juga, saya yakin akan ln -s -f /usr/local/Cellar/openssl/1.0.2k/bin/openssl /usr/local/bin/opensslmemperbaikinya
shaneparsons
49

Tidak ada solusi ini yang berfungsi untuk saya di OS X El Capitan 10.11.6. Mungkin karena OS X memiliki versi opensl asli yang diyakini lebih unggul, dan karena itu, tidak suka dirusak.

Jadi, saya mengambil jalan raya dan mulai segar ...


Instal dan symlink secara manual

cd /usr/local/src  
  • Jika Anda mendapatkan "Tidak ada file atau direktori seperti itu", buatlah:

    cd /usr/local && mkdir src && cd src

Unduh openssl:

curl --remote-name https://www.openssl.org/source/openssl-1.0.2h.tar.gz

Ekstrak dan cd di:

tar -xzvf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h

Kompilasi dan instal:

./configure darwin64-x86_64-cc --prefix=/usr/local/openssl-1.0.2h shared
make depend
make
make install

Sekarang symlink OS X openssl ke openssl Anda yang baru dan diperbarui:

ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl

Tutup terminal, buka sesi baru, dan verifikasi OS X menggunakan openssl baru Anda:

openssl version -a
mcgwier.dll
sumber
Jika Anda mencoba menginstal .NET core di OS X, Anda harus membungkusnya di Docker.
mcgwier
6
Setelah melakukan semua ini: OpenSSL 0.9.8zh 14 Jan 2016 dibangun pada: 15 Mei 2016 platform: darwin64-x86_64-llvm
AsimRazaKhan
5
Membuat symlink dengan cara berikut bekerja untuk saya: ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl. Setelah memulai kembali sesi Terminal Anda, ketik which openssluntuk memastikan Anda menggunakan versi 1.0.2 yang diperbarui ( /usr/local/bin/openssl) dan bukan versi bawaan ( /usr/bin/openssl).
Olivier
1
Saya mengikuti instruksi ini tetapi ketika saya mengetik yang openssl, saya mendapatkan (/ opt / local / bin / openssl). Bagaimana cara membuatnya menjadi / usr / local / bin / openssl?
Chris
2
Saya mengikuti instruksi ini (terima kasih banyak untuk langkah demi langkahnya), dan masih tertulis 0.9.8. Terima kasih kepada Olivier untuk metode penautan alternatif yang berhasil.
Onikoroshi
45

Cukup jalankan brew info openssldan baca informasi di mana dikatakan:

Jika Anda perlu memiliki perangkat lunak ini terlebih dahulu dalam menjalankan PATH Anda: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

Alex Maiburg
sumber
3
brew info opensslmemberikan informasi bermanfaat yang sama untuk saya. Menjalankan perintah yang disarankan di atas dan kemudian menjalankan source ~/.bash_profileatau membuka terminal baru menyelesaikannya untuk saya.
PanPipes
2
AKHIRNYA. Ini juga berhasil untuk saya. Jawaban lain di atas tidak!
pengguna124384
2
atauecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
B.Ma
16

Jika migrasi mac Anda merusak homebrew:

Saya memigrasikan mac saya, dan itu memutuskan tautan semua pemasangan homebrew saya - termasuk OpenSSL. Ini rusak gem install, begitulah pertama kali saya menyadari masalahnya dan mulai mencoba memperbaikinya.

Setelah sejuta solusi (saat bermigrasi ke OSX Sierra - 10.12.5), solusinya akhirnya menjadi sangat sederhana:

brew reinstall ruby
brew reinstall openssl
tobybot
sumber
Dan setahun kemudian, ini terjadi pada saya memigrasi Mac saya, dan perbaikan Anda juga berhasil untuk saya. Terima kasih banyak; Saya sampai pada titik mempertimbangkan untuk menghapus Mac baru saya dan melakukan instalasi baru dan mengatur semuanya lagi secara manual.
David
@David senang saya bisa mencegah Anda melewati jurang! Saya hampir melakukan hal yang sama.
tobybot
1
Anda mungkin juga perlu menghapus folder ini sebelum melakukan hal di atas. rm -rf /usr/local/opt/openssl
Gal Bracha
9

Setelah mencoba semua yang dapat saya temukan dan tidak ada yang berhasil, saya baru saja mencoba ini:

touch ~/.bash_profile; open ~/.bash_profile

Di dalam file ditambahkan baris ini.

export PATH="$PATH:/usr/local/Cellar/openssl/1.0.2j/bin/openssl"

sekarang berhasil :)

Jorns-iMac:~ jorn$ openssl version -a
OpenSSL 1.0.2j  26 Sep 2016
built on: reproducible build, date unspecified
//blah blah
OPENSSLDIR: "/usr/local/etc/openssl"

Jorns-iMac:~ jorn$ which openssl
/usr/local/opt/openssl/bin/openssl
Jorn
sumber
1
Ini adalah solusi yang sangat sederhana dan saya sangat berharap ini akan berhasil untuk saya tetapi tidak berhasil di sini. Bahkan setelah memperbarui PATH saya dan memulai kembali sesi shell saya which opensslmasih mengarah ke/usr/bin/openssl
Will Hitchcock
Agar ini berfungsi, saya harus mengedit .bash_profile saya juga. Tetapi satu-satunya hal yang berhasil adalah menyuruhnya melihat / usr / local / bin daripada / usr / bin. Saya melakukan ini dengan menambahkanexport PATH=/usr/local/bin:$PATH
Alison
3
Untuk ini untuk bekerja, Anda perlu menambahkan /usr/local/opt/openssl/bin, tanpa yang /opensslpada akhirnya, ke depan dari PATH, bukan akhir: PATH=/usr/local/opt/openssl/bin:$PATH Menggunakan /usr/local/opt/opensslbukan /usr/local/Cellar/openssl/$versionberarti Anda secara otomatis akan menyimpan versi paling up-to-date di $ PATH Anda tanpa harus untuk mengubahnya setiap kali Anda meningkatkan.
Mark Reed
Setelah berjam-jam kebodohan ini melakukan trik untuk saya bersama dengan catatan tambahan @ MarkReed
Naomi Lihat
Saya bisa menggunakan ini dan membuatnya bekerja untuk saya. Terima kasih. Saya memiliki versi openssl 1.0.2q.
Karthik NG
8

Saya memiliki kasus serupa. Saya perlu menginstal openssl melalui brew dan kemudian menggunakan pip untuk menginstal mitmproxy. Saya mendapatkan keluhan yang sama dari brew link --force. Berikut adalah solusi yang saya capai: (tanpa tautan paksa oleh minuman)

LDFLAGS=-L/usr/local/opt/openssl/lib 
CPPFLAGS=-I/usr/local/opt/openssl/include
PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig 
pip install mitmproxy

Ini tidak menjawab pertanyaan secara langsung. Saya meninggalkan one-liner jika ada yang menggunakan pip dan membutuhkan lib openssl.

Catatan: /usr/local/opt/openssl/libjalur diperoleh denganbrew info openssl

Pili Hu
sumber
Menemukan yang ini berguna untuk menginstal pysqlcipher
drtf
Berguna untuk menginstal cryptography. Saya kehilangan PKG_CONFIG_PATHvariabel
Sagar
7

Ini berhasil untuk saya:

 brew install openssl
 cd /usr/local/include 
 ln -s ../opt/openssl/include/openssl .
Edwardthesecond
sumber
Ini berhasil untuk saya, mencoba mengkompilasi PHP 7.2.1 dengan phpbrew di Mac OS High Sierra - Terima kasih!
Bruno de Oliveira
6

Solusi di atas dari edwardthesecond bekerja untuk saya juga di Sierra

 brew install openssl
 cd /usr/local/include 
 ln -s ../opt/openssl/include/openssl 
 ./configure && make

Langkah lain yang saya lakukan sebelumnya adalah:

  • menginstal openssl melalui brew

    brew install openssl
    
  • menambahkan openssl ke jalur seperti yang disarankan oleh homebrew

    brew info openssl
    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    
Lili
sumber
Bekerja dengan baik untuk saya, lewati saja la part './configure && make'
David 'mArm' Ansermot
3

Secara default, homebrew memberi saya OpenSSL versi 1.1 dan saya mencari versi 1.0 sebagai gantinya. Ini berhasil untuk saya.

Untuk menginstal versi 1.0:

brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

Kemudian saya mencoba untuk melakukan symlink melalui itu tetapi memberi saya kesalahan berikut:

ln -s /usr/local/Cellar/openssl/1.0.2t/include/openssl /usr/bin/openssl
ln: /usr/bin/openssl: Operation not permitted

Akhirnya ditautkan openssl untuk menunjuk ke versi 1.0 menggunakan perintah brew switch:

brew switch openssl 1.0.2t
Cleaning /usr/local/Cellar/openssl/1.0.2t
Opt link created for /usr/local/Cellar/openssl/1.0.2t
Mayank
sumber
Memanggil Unduhan non-checksum dari file formula openssl dari URL arbitrer dinonaktifkan!
AlxVallejo
1

Catatan: ini tidak lagi berfungsi karena https://github.com/Homebrew/brew/pull/612

Saya memiliki masalah yang sama hari ini. Saya menghapus (unbrewed ??) openssl 1.0.2 dan menginstal 1.0.1 juga dengan homebrew. Dotnet baru / restore / run kemudian bekerja dengan baik.

Instal openssl 101:
Brew menginstal homebrew / versi / openssl101
Menautkan:
link brew - force homebrew / versi / openssl101

pengguna3488820
sumber
2
Ini berhasil! Sepertinya 1.0.2 tidak ingin ditautkan. Pertanyaan selanjutnya adalah mengapa .netcore menyarankan sesuatu yang tidak direkomendasikan di komunitas.
daviddeath
1.0.2 bekerja untuk saya di mac lain beberapa hari yang lalu, jadi mungkin ada perubahan baru atau perubahan openssl. Bagaimanapun, untuk inti dot net, kami baik-baik saja :)
user3488820
1
Tautan github yang diposting oleh @bartonjs menunjukkan bahwa minuman tersebut diperbarui beberapa hari yang lalu. Melihat komit, perubahannya adalah `jika HOMEBREW_PREFIX.to_s ==" / usr / local "&& keg.name ==" openssl "` jadi saya menebak bahwa versi 1.0.1 menggunakan HOMEBREW_PREFIX yang berbeda.
daviddeath
11
tidak berhasil untuk saya, masih memberikan kesalahanRefusing to link: openssl101 Linking keg-only openssl101 means you may end up linking against the insecure, deprecated system OpenSSL while using the headers from Homebrew's openssl101. Instead, pass the full include/library paths to your compiler e.g.: -I/usr/local/opt/openssl101/include -L/usr/local/opt/openssl101/lib
dark_ruby
6
Jawaban ini tidak lagi benar mengingat perubahan yang dilakukan oleh pengembang
Joshka
1

Saya mengalami masalah yang sama ketika mencoba menginstal versi terbaru dari ruby ​​2.6.5 https://github.com/kelaberetiv/TagUI/issues/86 membantu saya menyelesaikan masalah. Ini jika untuk macOS catalina Versi 10.15.1

Pada dasarnya, saya melakukan update and upgradehomebrew dan menginstal openssl dan menginstal ruby.

brew update && brew upgrade
brew install openssl

Kemudian buat 2 symlink ini

ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/

lalu pasang ruby ​​2.6.5

gsumk
sumber
0

bagi saya inilah yang berhasil ...

Saya mengedit ./bash_profile dan menambahkan perintah di bawah ini

ekspor PATH = "/ usr / local / opt / openssl / bin: $ PATH"

pengembang
sumber
0
export https_proxy=http://127.0.0.1:1087 http_proxy=http://127.0.0.1:1087 all_proxy=socks5://127.0.0.1:1080

bekerja untuk saya

dan saya pikir itu bisa menyelesaikan semua masalah seperti Failed to connect to raw.githubusercontent.com port 443: Connection refused

John Jim
sumber
0

Solusinya mungkin memperbarui beberapa alat.

Inilah skenario saya dari tahun 2020 dengan Ruby dan Python:

Saya perlu menginstal Python 3 di Mac dan hal-hal meningkat. Pada akhirnya, memperbarui homebrew, node, dan python menyebabkan masalah dengan openssl. Saya tidak memiliki openssl 1.0 lagi, jadi saya tidak bisa "brew switch" ke sana.
Jadi apa yang masih mencoba menggunakan versi 1.0 lama itu?

Ternyata itu adalah Ruby 2.5.5.
Jadi saya baru saja menginstal Ruby 2.5.8 dan menghapus yang lama.

Hal-hal lain yang dapat Anda coba jika ini tidak cukup: Gunakan rbenv dan pyenv. Bersihkan permata dan formula. Perbarui homebrew, node, yarn. Tingkatkan bundler. Pastikan .bash_profile Anda (atau yang setara) telah diatur sesuai dengan instruksi setiap alat. Buka kembali terminal.

Stan
sumber