Homebrew từ chối liên kết OpenSSL


140

Tôi đang trên: OSX 10.11.6, phiên bản Homebrew 0.9.9m OpenSSL 0.9.8zg ngày 14 tháng 7 năm 2015

Tôi đang cố gắng chơi với dotnetcore và làm theo hướng dẫn của họ ,

Tôi đã nâng cấp / cài đặt phiên bản openssl mới nhất:

> 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

Nhưng khi tôi cố gắng liên kết openssl, tôi tiếp tục gặp phải lỗi liên kết này:

> 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

Tùy chọn bao gồm các cờ trình biên dịch không có ý nghĩa đối với tôi, vì tôi không biên dịch các thư viện mà tôi phụ thuộc vào.

EDIT dotnetcore đã cập nhật hướng dẫn của họ:

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/

3
Đối với .NET Core, bạn cần một phiên bản OpenSSL được hỗ trợ, đó sẽ là phiên bản 1.0.1 hoặc 1.0.2. Vì bạn đang báo cáo phiên bản 0.9.8, brew upgrade openssltrước tiên bạn có thể cần phải không?
bartonjs

2
Tôi đã làm điều đó. Tôi nên làm rõ, nhưng tôi đã không thêm các bước đó vào câu hỏi. Nhưng tôi đã thực hiện brew updatebrew install openssl. Điều này đang cố gắng để cài đặt phiên bản được hỗ trợ.
từ

2
Có vẻ như Homebrew đã chặn nó một cách rõ ràng: github.com/Homebrew/brew/commit/ mẹo .
bartonjs

4
Và .. để tiếp tục làm tròn sự lan man của tôi, bạn có thể quan tâm đến bất cứ điều gì phát triển trên github.com/Homebrew/brew/pull/597
bartonjs

2
"... Khi tôi cố gắng liên kết openssl, tôi tiếp tục gặp phải lỗi liên kết này: .." - Cũng xem Cách đặt đường dẫn thời gian chạy (-rpath) của một tệp thực thi với gcc trong Mac OSX? . Nó có thể giúp bạn luôn tải đúng thư viện trong thời gian chạy, nếu Brew không thêm nó.
jww

Câu trả lời:


63

Như bản cập nhật cho câu trả lời khác cho thấy, cách khắc phục cài đặt bia openssl101 cũ sẽ không còn hoạt động. Để biết cách giải quyết ngay bây giờ, hãy xem nhận xét này trên dotnet / cli # 3964 .

Phần có liên quan nhất của vấn đề được sao chép ở đây:

Tôi đã xem xét các tùy chọn khác được đề xuất để thiết lập đường dẫn trên thư viện. Tôi nghĩ rằng sau đây là một giải pháp tốt hơn sẽ chỉ ảnh hưởng đến thư viện cụ thể này.

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

và / hoặc nếu bạn đã cài đặt NETCore 1.0.1, hãy thực hiện cùng một lệnh cho 1.0.1:

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

Trên thực tế, thay vì yêu cầu hệ điều hành luôn sử dụng phiên bản SSL homebrew và có khả năng gây ra sự cố, chúng tôi sẽ cho dotnet biết cách tìm thư viện chính xác.

Cũng quan trọng, có vẻ như Microsoft nhận thức được vấn đề này và có cả a) một kế hoạch hơi ngay lập tức để giảm thiểu cũng như b) một giải pháp dài hạn (kết hợp gói OpenSSL với dotnet).

Một điều cần lưu ý: /usr/local/opt/openssl/liblà nơi bia được liên kết theo mặc định:

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

Nếu vì bất kỳ lý do gì bạn cài đặt bia và liên kết nó ở một vị trí khác, thì đường dẫn đó là con đường bạn nên sử dụng như một đường dẫn.

Khi bạn đã cập nhật thông tin của System.Security.Cryptography.Native.dylib libray, bạn sẽ cần khởi động lại phiên tương tác của mình (nghĩa là đóng bảng điều khiển của bạn và bắt đầu một giao diện khác).


Tôi phải thêm dòng đó ở đâu? Tôi đang cố gắng để làm việc này trong CI. Tôi đang nhận được một /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib (No such file or directory).
mrahhal

@mrahhal đó là đường dẫn cài đặt của dotnetdụng cụ. Có thể là bạn không cài đặt hoặc bạn đã cài đặt hoặc đến một vị trí khác. Nếu nó được cài đặt và về phía bạn, bạn có thể sử dụng which dotnetđể tìm thấy nó.
Ben Collins

Ồ, chỉ cần nhận ra tôi đang thêm dòng này trước khi cài đặt dotnet. Sẽ thử lại và trở lại.
mrahhal

3
Làm việc cho tôi, trong trường hợp của tôi, sdk đã được cài đặt vào một thư mục khác vì vậy tôi phải thay đổi đường dẫn.
mrahhal

4
Với dotnet 1.1.0 tôi phải làm: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

59

Đây là những gì làm việc cho tôi:

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

Cảm ơn @dorlandode về chủ đề này https://github.com/Homebrew/brew/pull/597

NB: Tôi chỉ sử dụng nó như một sửa chữa tạm thời cho đến khi tôi có thể dành thời gian cài đặt lại Openssl một cách chính xác từ đầu. Như tôi nhớ, tôi đã dành phần tốt nhất trong một ngày để gỡ lỗi và gặp sự cố trước khi tôi nhận ra cách tốt nhất là tự cài đặt các certs tôi cần từng cái một. Vui lòng đọc liên kết trong bình luận của @ bouke trước khi thử điều này.


9
đường dẫn đầy đủ cho liên kết cuối cùng là /usr/local/bin/opensslgì?
Mohamed Hafez

Tại sao câu trả lời này không được chấp nhận, bạn đã cứu người đàn ông của tôi. :: ngón tay cái lên ::
wukong

2
Có một lý do chính đáng để từ chối làm điều này. Xem thêm điều này: github.com/Homebrew/brew/pull/597 .
Bouke

7
Giải pháp này hiệu quả với tôi, nhưng tôi phải đổi 1.0.2jsang 1.0.2kvì sự khác biệt về phiên bản. Vì vậy, người dùng hãy cẩn thận, bạn có thể cần điều chỉnh đường dẫn cho phiên bản hiện tại
Jeff

Tôi thấy bình luận của @ Jeff hơi muộn. Nếu bạn cũng vậy, tôi tin rằng sẽ ln -s -f /usr/local/Cellar/openssl/1.0.2k/bin/openssl /usr/local/bin/opensslsửa nó
shaneparsons

49

Không có giải pháp nào trong số này làm việc cho tôi trên OS X El Capitan 10.11.6. Có lẽ bởi vì OS X có phiên bản openssl riêng mà nó tin là vượt trội và do đó, không thích giả mạo.

Vì vậy, tôi đi đường cao tốc và bắt đầu tươi ...


Cài đặt thủ công và symlink

cd /usr/local/src  
  • Nếu bạn nhận được "Không có tệp hoặc thư mục như vậy", hãy tạo nó:

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

Tải xuống openssl:

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

Trích xuất và cd trong:

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

Biên dịch và cài đặt:

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

Bây giờ symlink của OS X là openssl mới và openssl mới được cập nhật của bạn:

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

Đóng thiết bị đầu cuối, mở một phiên mới và xác minh OS X đang sử dụng openssl mới của bạn:

openssl version -a

Nếu bạn đang cố gắng cài đặt .NET core trên OS X, bạn nên bọc nó trong Docker.
mcgwier

6
Sau khi thực hiện tất cả điều này: OpenSSL 0.9.8zh 14 tháng 1 năm 2016 được xây dựng trên: nền tảng ngày 15 tháng 5 năm 2016: darwin64-x86_64-llvm
AsimRazaKhan

5
Tạo một liên kết tượng trưng theo cách sau đây làm việc cho tôi : ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl. Sau khi khởi động lại phiên Terminal, hãy nhập which opensslđể đảm bảo bạn đang sử dụng phiên bản 1.0.2 được cập nhật ( /usr/local/bin/openssl) thay vì phiên bản tích hợp ( /usr/bin/openssl).
Olivier

1
Tôi đã làm theo các hướng dẫn này nhưng khi tôi nhập vào openssl, tôi nhận được (/ opt / local / bin / openssl). Làm thế nào để tôi có được nó là / usr / local / bin / openssl?
Chris

2
Tôi đã làm theo các hướng dẫn này (cảm ơn bạn rất nhiều vì từng bước), và nó vẫn nói 0.9.8. Cảm ơn Olivier vì phương pháp liên kết thay thế đã hoạt động.
Onikoroshi

44

Chỉ cần thực hiện brew info opensslvà đọc thông tin nơi nó nói:

Nếu bạn cần có phần mềm này trước tiên trong lần chạy PATH của bạn: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile


3
brew info opensslđã đưa ra thông tin hữu ích tương tự cho tôi. Chạy lệnh được đề xuất ở trên và sau đó chạy source ~/.bash_profilehoặc mở một thiết bị đầu cuối mới đã giải quyết nó cho tôi.
PanPipes

2
CUỐI CÙNG. Điều này cũng làm việc cho tôi. Các câu trả lời khác ở trên đã không!
dùng124384

2
hoặcecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
B.Ma

16

Nếu di chuyển mac của bạn phá vỡ homebrew:

Tôi đã di chuyển máy mac của mình và nó đã hủy liên kết tất cả các cài đặt homebrew của tôi - bao gồm cả OpenSSL. Điều này đã phá vỡ gem install, đó là cách đầu tiên tôi nhận thấy vấn đề và bắt đầu cố gắng sửa chữa điều này.

Sau một triệu giải pháp (khi chuyển sang OSX Sierra - 10.12.5), giải pháp cuối cùng đã trở nên đơn giản về mặt hài hước:

brew reinstall ruby
brew reinstall openssl

Và một năm sau, điều này đã xảy ra với tôi khi di chuyển máy Mac của tôi và bản sửa lỗi của bạn cũng có hiệu quả với tôi. Cám ơn rất nhiều; Tôi đã đi đến điểm xem xét việc xóa máy Mac mới của tôi và thực hiện cài đặt mới và thiết lập lại mọi thứ một cách thủ công.
David

@David rất vui vì tôi có thể ngăn bạn đi qua bờ vực! Tôi gần như đã làm như vậy.
tobybot

1
Bạn cũng có thể cần phải xóa thư mục này trước khi làm ở trên. rm -rf /usr/local/opt/openssl
Gal Bracha

9

Sau khi thử mọi thứ tôi có thể tìm thấy và không có gì hiệu quả, tôi chỉ thử điều này:

touch ~/.bash_profile; open ~/.bash_profile

Bên trong tập tin đã thêm dòng này.

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

bây giờ nó hoạt động :)

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

1
Đây là một giải pháp thực sự đơn giản và tôi khá hy vọng rằng nó sẽ hiệu quả với tôi nhưng không có may mắn ở đây. Ngay cả sau khi cập nhật PATH của tôi và khởi động lại phiên shell của tôi which opensslvẫn trỏ đến/usr/bin/openssl
Will Hitchcock

Để làm việc này, tôi cũng phải chỉnh sửa .bash_profile của mình. Nhưng điều duy nhất có tác dụng là bảo nó tìm trong / usr / local / bin thay vì / usr / bin. Tôi đã làm điều này bằng cách thêmexport PATH=/usr/local/bin:$PATH
Alison

3
Để làm việc này, bạn cần thêm /usr/local/opt/openssl/bin, không có phần /opensslcuối, ở phía trước PATH, không phải phần cuối: PATH=/usr/local/opt/openssl/bin:$PATH Sử dụng /usr/local/opt/opensslthay cho /usr/local/Cellar/openssl/$versionphương tiện, bạn sẽ tự động giữ phiên bản cập nhật nhất trong $ PATH của mình mà không cần để thay đổi nó mỗi khi bạn nâng cấp.
Mark Reed

Sau nhiều giờ ngớ ngẩn, điều này đã tạo nên mánh khóe cho tôi cùng với các ghi chú bổ sung của @ MarkReed
Naomi Xem

Tôi đã có thể sử dụng nó và làm cho nó hoạt động cho tôi. Cảm ơn bạn. Tôi có phiên bản 1.0.2q của openssl.
Karthik NG

8

Tôi có một trường hợp tương tự. Tôi cần cài đặt openssl qua brew và sau đó sử dụng pip để cài đặt mitmproxy. Tôi nhận được cùng một khiếu nại từbrew link --force . Sau đây là giải pháp tôi đạt được: (không có liên kết lực bằng bia)

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

Điều này không giải quyết câu hỏi một cách đơn giản. Tôi để lại một lớp lót trong trường hợp bất cứ ai sử dụng pip và yêu cầu lib openssl.

Lưu ý: các /usr/local/opt/openssl/libđường dẫn có được bởibrew info openssl


Tìm thấy cái này hữu ích để cài đặt pysqlcodes
drtf

Hữu ích cho việc cài đặt cryptography. Tôi đã bỏ lỡ PKG_CONFIG_PATHbiến
Sagar

7

Điều này làm việc cho tôi:

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

Điều này làm việc cho tôi, cố gắng biên dịch PHP 7.2.1 bằng phpbrew trên Mac OS High Sierra - Cảm ơn!
Bruno de Oliveira

6

Giải pháp trên từ edwardthesecond cũng có hiệu quả với tôi trên Sierra

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

Các bước khác tôi đã làm trước đây là:

  • cài đặt openssl qua brew

    brew install openssl
    
  • thêm openssl vào đường dẫn theo đề xuất của homebrew

    brew info openssl
    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    

Làm việc tốt với tôi, chỉ cần bỏ qua phần './mình && make'
David 'mArm' Ansermot

1

Lưu ý: điều này không còn hoạt động do https://github.com/Homebrew/brew/pull/612

Tôi đã có cùng một vấn đề ngày hôm nay. Tôi đã gỡ cài đặt (unbrewed ??) openssl 1.0.2 và cài đặt 1.0.1 cũng với homebrew. Dotnet mới / khôi phục / chạy sau đó hoạt động tốt.

Cài đặt openssl 101:
brew install homebrew / Phiên bản / openssl101
Liên kết:
liên kết bia - lực lượng homebrew / phiên bản / openssl101


2
Điều này đã làm nó! Có vẻ như 1.0.2 không muốn liên kết. Câu hỏi tiếp theo là tại sao .netcore đề xuất một cái gì đó không được khuyến nghị trong cộng đồng.
daviddeath

1.0.2 đã làm việc cho tôi trên một máy mac khác vài ngày trước, vì vậy có thể có một sự thay đổi bia hoặc openssl gần đây. Dù sao, đối với lõi dot net, chúng tôi là tốt :)
user3488820

1
Liên kết github được đăng bởi @bartonjs cho thấy brew đã được cập nhật chỉ vài ngày trước. Nhìn vào cam kết, thay đổi là `if HOMEBREW_PREFIX.to_s ==" / usr / local "&& keg.name ==" openssl "` vì vậy tôi đoán rằng phiên bản 1.0.1 sử dụng HOMEBREW_PREFIX khác.
daviddeath

11
không làm việc cho tôi, vẫn báo lỗiRefusing 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
Câu trả lời này không còn đúng với sự thay đổi được thực hiện bởi các nhà phát triển homebrew tại github.com/Homebrew/brew/pull/612
Joshka

1

Tôi gặp vấn đề tương tự khi thử cài đặt phiên bản ruby ​​2.6.5 mới hơn https://github.com/kelaberetiv/TagUI/issues/86 giúp tôi giải quyết vấn đề. Điều này nếu cho macOS catalina Phiên bản 10.15.1

Về cơ bản, tôi đã làm update and upgradehomebrew và cài đặt openssl và cài đặt ruby.

brew update && brew upgrade
brew install openssl

Sau đó tạo 2 symlink này

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/

sau đó cài đặt ruby ​​2.6.5


1

Theo mặc định, homebrew đã cho tôi phiên bản OpenSSL 1.1 và thay vào đó tôi đang tìm phiên bản 1.0. Điều này làm việc cho tôi.

Để cài đặt phiên bản 1.0:

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

Sau đó, tôi đã cố gắng liên kết theo cách của mình thông qua nó nhưng nó đã cho tôi lỗi sau:

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

Cuối cùng, openssl được liên kết để trỏ đến phiên bản 1.0 bằng lệnh 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

0

Đối với tôi đây là những gì đã làm việc ...

Tôi đã chỉnh sửa lệnh ./bash_profile và thêm vào bên dưới lệnh

xuất PATH = "/ usr / local / opt / openssl / bin: $ PATH"


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

làm việc cho tôi

và tôi nghĩ nó có thể giải quyết tất cả các vấn đề như Failed to connect to raw.githubusercontent.com port 443: Connection refused

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.