家酿拒绝链接 OpenSSL

I’m on: OSX 10.11.6,Homebrewversion 0.9.9 m OpenSSL 0.9.8 zg 14 July 2015我在: OSX 10.11.6,Homebrewversion 0.9.9 m OpenSSL 0.9.8 zg 14 July 2015

我试着和 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 e.g.:
-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

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

EdIT 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/
176089 次浏览

注意: 由于 https://github.com/Homebrew/brew/pull/612,这不再有效

我今天也遇到了同样的问题。我卸载(未酿造? ?)Openssl 1.0.2和安装1.0.1也与自制。Dotnet 新建/恢复/运行后工作正常。

安装开关 l101:
安装自制程序/版本/openssl101
连结:
力自制/版本/openssl101

正如对另一个答案的更新所表明的那样,安装旧的 openssl101酿酒器的解决方案将不再有效。有关现在的解决方案,请参见 在 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

和/或如果安装了 NETCore1.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)采取长期的解决方案(可能将 OpenSSL 与 dotnet 捆绑在一起)。

另一件需要注意的事情是: /usr/local/opt/openssl/lib是缺省情况下连接啤酒的地方:

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。

更新系统的 rpath 之后。保安。密码学。Dylib 库,您需要重新启动交互式会话(即,关闭控制台并启动另一个)。

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

现在,symlink OS X 的 openssl 到您的新的和更新的 openssl:

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

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

openssl version -a

在尝试了所有我能找到的东西,但都没用之后,我试了这个:

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

这就是对我有效的方法:

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

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

我有个类似的案子。我需要安装 openssl 通过酿造,然后使用 pip 安装 mitmxy。我也收到了 brew link --force的投诉。以下是我达成的解决方案: (无需通过酿造强制链接)

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获得

只要执行 brew info openssl并阅读其中显示的信息:

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

这对我很有效:

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

上面 Edward 提出的解决方案,对我来说也适用于 Sierra

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

我之前做的其他步骤包括:

  • 通过酿酒安装开关

    brew install openssl
    
  • adding openssl to the path as suggested by homebrew

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

如果迁移你的 Mac 打破了自制:

我迁移了我的 Mac,它解除了我自制的安装程序 所有的链接-包括 OpenSSL。这打破了 gem install,这是我第一次注意到这个问题,并开始尝试修复这一点。

在一百万个解决方案之后(当迁移到 OSX Sierra-10.12.5时) ,解决方案最终变得简单得可笑:

brew reinstall ruby
brew reinstall openssl

稍后再编辑: 正如 Gal Bracha 在评论中指出的那样,你呢?可能?需要删除 /usr/local/opt/openssl之前,做重新安装,只是为了安全。我当时不需要,但如果你还是有问题,试试看。

对我来说,这是什么工作..。

我编辑了./bash _ profile 并添加了以下命令

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

我在尝试安装新版本的 Ruby 2.6.5时也遇到了同样的问题 Https://github.com/kelaberetiv/tagui/issues/86 帮助我解决这个问题

基本上,我做 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

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

默认情况下,自制软件给了我 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

最后使用 brewswitch 命令将 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

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

下面是我在2020年对 Ruby 和 Python 的设想:

我需要在 Mac 上安装 Python 3,于是事情升级了。最后,更新自制程序、 node 和 python 导致了 openssl 的问题。我没有 openssl 1.0了,所以我不能“酿造切换”到它。
那么是什么仍在尝试使用旧的1.0版本呢?

它调出的是 Ruby 2.5.5。
所以我只是 安装了 Ruby 2.5.8和删除旧的。

如果这还不够,还可以尝试其他方法: 使用 rbenv 和 pyenv。清理宝石和配方。更新自制程序,节点,纱线。升级包。确保你的。根据每个工具的说明设置 bash _ profile (或等效项)。重新打开终端。