Homebrew拒绝链接OpenSSL

时间:2016-07-30 04:18:33

标签: macos openssl homebrew .net-core

我在:OSX 10.11.6,Homebrew版本0.9.9m OpenSSL 0.9.8zg 2015年7月14日

我正在尝试使用dotnetcore并遵循他们的instructions

我升级/安装了最新版本的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

但是当我尝试链接openssl时,我继续遇到这个链接错误:

> 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

包含编译器标志的选项对我没有意义,因为我没有编译我依赖的这些库。

编辑 dotnetcore已更新其说明:

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/

15 个答案:

答案 0 :(得分:57)

正如对其他答案的更新所示,安装旧的openssl101 brew的解决方法将不再有效。有关现在的解决方法,请参阅this comment on dotnet/cli#3964

此处复制的问题中最相关的部分是:

  

我查看了建议在库上设置rpath的另一个选项。我认为以下是一个更好的解决方案,只会影响这个特定的库。

     

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

     

和/或如果安装了NETCore 1.0.1,也要为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

     

实际上,我们不是告诉操作系统总是使用自制的SSL版本并且可能导致某些内容破坏,而是告诉dotnet如何找到正确的库。

同样重要的是,看起来微软已经意识到了这个问题,并且a)有一个立即采取的缓解计划以及b)一个长期解决方案(probaby捆绑OpenSSL和dotnet)。

需要注意的另一件事是:/usr/local/opt/openssl/lib是默认链接brew的位置:

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

如果无论出于何种原因安装brew并将其链接到不同的位置,那么该路径就是您应该用作rpath的路径。

一旦您更新了System.Security.Cryptography.Native.dylib libray的rpath,您就需要重新启动交互式会话(即关闭控制台并启动另一个控制台)。

答案 1 :(得分:49)

这对我有用:

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

感谢此帖子https://github.com/Homebrew/brew/pull/597

上的@dorlandode

注意:我只使用它作为临时修复,直到我可以花时间从头开始正确安装Openssl。我记得在我意识到最好的方法是手动安装我需要的证书之前,我花了一天时间调试并遇到问题。在尝试此操作之前,请阅读@ bouke的评论中的链接。

答案 2 :(得分:43)

在OS X El Capitan 10.11.6上,这些解决方案都不适用于我。可能是因为OS X有一个本机版本的openssl,它认为它更优越,因此不喜欢篡改。

所以,我走上了高路,开始新鲜......

手动安装和符号链接

cd /usr/local/src  
  • 如果您收到“没有此类文件或目录”,请将其设为:

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

下载openssl:

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

提取并插入:

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

编译并安装:

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

现在符号链接OS X的openssl到你的新的和更新的openssl:

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

关闭终端,打开一个新会话,并验证OS X正在使用您的新openssl:

openssl version -a

答案 3 :(得分:38)

只需执行brew info openssl并阅读其中的信息:

  

如果您需要在PATH运行中首先使用此软件:echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

答案 4 :(得分:14)

如果迁移你的mac会破坏homebrew:

我迁移了我的mac,它取消了链接所有我的自制程序安装 - 包括OpenSSL。这打破了gem install,这是我第一次发现问题并开始尝试修复此问题。

经过一百万个解决方案(迁移到OSX Sierra - 10.12.5)后,解决方案最终变得非常简单:

brew reinstall ruby
brew reinstall openssl

答案 5 :(得分:9)

在尝试了我能找到的所有内容并且没有任何效果之后,我只是尝试了这个:

touch ~/.bash_profile; open ~/.bash_profile

在文件中添加了这一行。

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

现在有效:)

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

答案 6 :(得分:8)

我有类似的情况。我需要通过brew安装openssl然后使用pip来安装mitmproxy。我从brew link --force收到同样的投诉。以下是我达成的解决方案:(没有通过brew强制链接)

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

这并没有直截了当地解决这个问题。如果有人使用pip并且需要openssl lib,我会离开单行。

注意:/usr/local/opt/openssl/lib路径是brew info openssl

获得的

答案 7 :(得分:6)

这对我有用:

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

答案 8 :(得分:5)

从edwardthesecond开始的上述解决方案也为Sierra工作了

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

我之前做的其他步骤是:

  • 通过brew安装openssl

    brew install openssl
    
  • 按照homebrew

    的建议将openssl添加到路径中
    brew info openssl
    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    

答案 9 :(得分:3)

默认情况下,自制软件为我提供了OpenSSL 1.1版,而我正在寻找的是1.0版。这对我有用。

要安装版本1.0:

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

然后我尝试通过它进行符号链接,但它给了我以下错误:

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

使用brew brew命令最终链接openssl指向1.0版本:

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

答案 10 :(得分:1)

注意:由于https://github.com/Homebrew/brew/pull/612

,此功能不再有效

我今天遇到了同样的问题。我卸载(unbrewed ??)openssl 1.0.2并使用自制软件安装1.0.1。 Dotnet new / restore / run然后工作正常。

安装openssl 101:
brew install homebrew / versions / openssl101
链接:
brew link --force homebrew / versions / openssl101

答案 11 :(得分:1)

在尝试安装较新版本的ruby 2.6.5时遇到了相同的问题 https://github.com/kelaberetiv/TagUI/issues/86可以帮助我解决问题。如果是macOS catalina版本10.15.1

基本上,我进行了update and upgrade家酿,安装了openssl和红宝石。

brew update && brew upgrade
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/

然后安装了ruby 2.6.5

答案 12 :(得分:0)

对我来说这是有效的...

我编辑了./bash_profile,并在命令下面添加了

export PATH =“ / usr / local / opt / openssl / bin:$ PATH”

答案 13 :(得分: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

为我工作

我认为它可以解决所有问题,例如 Failed to connect to raw.githubusercontent.com port 443: Connection refused

答案 14 :(得分:0)

解决方案可能正在更新一些工具。

这是我从2020年开始使用Ruby和Python的场景:

我需要在Mac上安装Python 3,事情逐步升级。最后,更新自制软件,节点和python会导致openssl问题。我已经没有openssl 1.0了,所以我无法“酿酒”了。
那么,什么仍在尝试使用旧的1.0版本?

发现它是Ruby 2.5.5。
因此,我安装了Ruby 2.5.8 ,并删除了旧版本。

如果这还不够,您可以尝试其他方法:使用rbenv和pyenv。清理宝石和配方。更新自制软件,节点,yarn。升级捆绑器。确保根据每个工具的说明设置.bash_profile(或等效文件)。重新打开终端。