Homebrew拒绝链接OpenSSL

我在:OSX 10.11.6,自制软件版本0.9.9m OpenSSL 0.9.8zg 2015年7月14日

我正在努力与dotnetcore玩,并按照他们的指示 ,

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

正如对其他答案的更新所表明的那样,安装旧版openssl101 brew的解决方法将不再有效。 对于现在正确的解决方法,请在dotnet / cli#3964上查看此评论 。

问题的最相关的部分复制在这里:

我查看了在库中设置rpath的其他选项。 我认为以下是一个更好的解决scheme,只会影响这个特定的库。

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

实际上,我们告诉dotnet如何find正确的库,而不是告诉操作系统总是使用自制软件版本的SSL并可能导致某些事情中断。

同样重要的是,微软似乎也意识到了这个问题,并且同时具备了a)即时计划,以及b)长期解决scheme(probaby与dotnet捆绑OpenSSL)。

另外需要注意的是: /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并把它连接到不同的位置,那么这个path就是你应该用作rpath的path。

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

这对我来说是有效的:

 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 

感谢@dorlandode在这个线程https://github.com/Homebrew/brew/pull/597

注意:我只用这个作为临时修复,直到我可以花时间从头再次正确安装Openssl。 正如我记得我花了一天的最好的一部分debugging和有问题之前,我意识到最好的办法是手动安装我需要一个一个的证书。 尝试此操作之前,请阅读@ bouke评论中的链接。

这些解决scheme在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 

提取和cd在:

 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 

closuresterminal,打开一个新的会话,并确认OS X正在使用新的openssl:

 openssl version -a 

只要执行brew info openssl并阅读它所说的信息:

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

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

 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库,我将保留一行。

注意: /usr/local/opt/openssl/libpath是通过brew info openssl获得的

在尝试了所有我能find的东西之后,我只是试了一下:

 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 

注意:由于https://github.com/Homebrew/brew/pull/612,这不再起作用;

我今天也有同样的问题。 我卸载(unbrewed ??)openssl 1.0.2和安装1.0.1与自制软件。 Dotnet新/恢复/运行然后工作正常。

安装openssl 101:
brew安装homebrew / versions / openssl101
链接:
brew链接 – 强制homebrew /版本/ openssl101

这对我工作:

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

以上来自edwardthesecond的解决scheme也为Sierra工作

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

我之前做过的其他步骤是:

  • 通过brew安装openssl

     brew install openssl 
  • 按照自制软件的build议添加openssl

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

只是留下一个注释,我已经迁移了我的Mac,并取消了所有我的自制安装,包括这一个。 这打破了gem install ,这是我第一次尝试修复这个问题。

我尝试了一百万的解决scheme(我在OSX Sierra – 10.12.5),解决scheme变得非常简单:

 brew reinstall ruby brew reinstall openssl