HomebrewがOpenSSLのリンクを拒否


140

私は参加しています:OSX 10.11.6、Homebrewバージョン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 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/

3
.NET Coreの場合、サポートされているバージョンのOpenSSLが必要です。これは1.0.1または1.0.2バージョンになります。あなたは0.9.8バージョンを報告しているので、多分あなたはbrew upgrade openssl最初に必要がありますか?
bartonjs 2016

2
私はすでにそれをやった。明確にすべきでしたが、これらのステップを質問に追加しませんでした。しかし、私はすでにやったbrew updatebrew install openssl。これはサポートされているバージョンをインストールしようとしています。
daviddeath 2016

2
Homebrewが明示的にブロックしているようです:github.com/Homebrew/brew/commit/…
bartonjs 2016

4
そして、私のとりとめのない問題を解決し続けるために、github.com
Homebrew /

2
「... opensslをリンクしようとすると、このリンクエラーが発生し続けます:..」 - Mac OSXでgccを使用して実行可能ファイルのランタイムパス(-rpath)を設定する方法も参照してください。Brewがライブラリを追加していない場合は、実行時に常に正しいライブラリをロードするのに役立ちます。
jww 2016

回答:


63

他の回答への更新が示唆するように、古いopenssl101 brewをインストールする回避策は機能しなくなります。現時点での回避策については、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に指示しています。

また、重要なのは、Microsoftがこの問題を認識しており、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として使用する必要があります。

System.Security.Cryptography.Native.dylib librayのrpathを更新したら、インタラクティブセッションを再起動する必要があります(つまり、コンソールを閉じて別のセッションを開始します)。


その行をどこに追加すればよいですか?これをCIで動作させるようにしています。を取得してい/usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib (No such file or directory)ます。
mrahhal

@mrahhalは、dotnetツールのインストールパスです。インストールされていないか、インストールされているか、別の場所にある可能性があります。それがインストールされていれば、あなたはwhich dotnetそれを見つけるために使うことができます。
ベンコリンズ

ああ、インストールする前にこの行を追加していることに気づきましたdotnet。再試行して戻ってきます。
mrahhal

3
私の場合、sdkが別のディレクトリにインストールされていたため、パスを変更する必要がありました。
mrahhal

4
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
dotnet

59

これは私のために働いたものです:

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を最初から正しく正しくインストールするのに時間を費やすことができるまで、これを一時的な修正としてのみ使用しました。覚えているように、1日の大半をデバッグして問題を抱えていたので、最善の方法は、必要な証明書を1つずつ手動でインストールすることでした。これを試す前に、@ boukeのコメントにあるリンクを読んでください。


9
最後のリンクの完全パスは/usr/local/bin/openssl何ですか?
Mohamed Hafez

なぜこの答えが受け入れられないのか、あなたは私の命を救った。:: thumb up ::
wukong

2
Brewがこれを拒否するのには十分な理由があります。これも参照してください:github.com/Homebrew/brew/pull/597
Bouke

7
このソリューションは私にとってはうまくいき1.0.2jまし1.0.2kたが、バージョンの違いのために変更する必要がありました。したがって、ユーザーは注意して、現在のバージョンのパスを調整する必要があるかもしれません
Jeff

@Jeffのコメントは少し遅すぎました。あなたもそうなら、私はln -s -f /usr/local/Cellar/openssl/1.0.2k/bin/openssl /usr/local/bin/opensslそれを修正すると思います
shaneparsons

49

OS X El Capitan 10.11.6では、これらのソリューションはどれも機能しませんでした。おそらく、OS Xにはopensslのネイティブバージョンがあり、それが優れていると考えられており、改ざんを好まないためです。

だから、私は高い道を取り、新鮮に始めました...


手動でインストールしてsymlink

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

端末を閉じ、新しいセッションを開き、OS Xが新しいopensslを使用していることを確認します。

openssl version -a

OS Xに.NETコアをインストールする場合は、Dockerでラップする必要があります。
mcgwier 2016

6
これをすべて実行した後:OpenSSL 0.9.8zh 2016年1月14日ビルド:2016年5月15日プラットフォーム:darwin64-x86_64-llvm
AsimRazaKhan

5
次の方法でシンボリックリンクを作成すると、うまくいきました ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl。ターミナルセッションを再起動した後、組み込みwhich opensslバージョン(/usr/local/bin/openssl)ではなく更新された1.0.2バージョン()を使用していることを確認するために入力します/usr/bin/openssl
Olivier

1
これらの指示に従いましたが、「openssl」と入力すると、(/ opt / local / bin / openssl)が表示されます。/ usr / local / bin / opensslにするにはどうすればよいですか?
クリス

2
私はこれらの指示に従いました(ステップバイステップで本当にありがとう)、それでも0.9.8と言いました。有効な代替リンク方法を提供してくれたOlivierに感謝します。
Onikoroshi 2017年

44

ただそれを実行brew info opensslし、それが言うところの情報を読んでください:

このソフトウェアを最初にPATHで実行する必要がある場合: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile


3
brew info openssl私に同じ役立つ情報を提供しました。上記の推奨コマンドを実行してからsource ~/.bash_profile、新しいターミナルを実行または開くと、問題が解決しました。
PanPipes 2017

2
最後に。これも私にとってはうまくいきました。上記の他の答えはしませんでした!
user124384 2017

2
またはecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
B.Ma

16

Macを移行すると自作が壊れる場合:

Macを移行したところ、OpenSSLを含むすべての自作インストールがリンク解除されました。これが壊れたためgem install、最初に問題に気づき、これを修復しようとしました。

100万のソリューション(OSX Sierra-10.12.5への移行時)の後、ソリューションは単純なものになりました。

brew reinstall ruby
brew reinstall openssl

そして1年後、私はMacを移行するときにこれが起こり、あなたの修正も私にとってはうまくいきました。本当にありがとう; 新しいMacをワイプして新規インストールを行い、すべてを手動で再セットアップすることを検討するようになりました。
デビッド

@David私があなたが瀬戸際を越えないようにすることができてうれしい!私はほとんど同じことをしました。
tobybot 2018年

1
上記を実行する前に、このフォルダを削除する必要がある場合もあります。rm -rf /usr/local/opt/openssl
Gal Bracha '19

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

1
これは本当に簡単な解決策であり、うまくいくことを期待していましたが、ここではうまくいきませんでした。でも、私のPATHを更新し、私のシェルセッションを再起動した後which openssl、まだを指す/usr/bin/openssl
ウィル・ヒッチコック

これを機能させるには、.bash_profileも編集する必要がありました。しかし、機能したのは、/ usr / binではなく/ usr / local / binを検索するように指示することだけでした。私はこれを追加しましたexport PATH=/usr/local/bin:$PATH
アリソン

3
このために仕事に、あなたが追加する必要がある/usr/local/opt/openssl/binなし/opensslに、最後にフロント PATH、終わりではないの: PATH=/usr/local/opt/openssl/bin:$PATH 使用する/usr/local/opt/openssl代わりの/usr/local/Cellar/openssl/$version手段あなたは自動的にせずに、あなたの$ PATHに最新バージョンをしておこうアップグレードするたびに変更します。
マークリード

数時間の無知の後、@ MarkReedの追加のメモ
Naomi

私はこれを使用してそれを機能させることができました。ありがとうございました。opensslの1.0.2qバージョンがあります。
Karthik NG

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


これはpysqlcipherをインストールするのに便利です
drtf

のインストールに役立ちcryptographyます。PKG_CONFIG_PATH変数がありませんでした
Sagar

7

これは私のために働きました:

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

これは私にとってはうまくいき、Mac OS High Sierraでphpbrewを使ってPHP 7.2.1をコンパイルしようとしました-ありがとう!
Bruno de Oliveira

6

edwardthesecondからの上記の解決策は、Sierraでも私にとってうまくいきました

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

私が以前に行った他のステップは:

  • brew経由でopensslをインストールする

    brew install openssl
    
  • 自作で推奨されているようにパスにopensslを追加する

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

私にとっては
うまくいき

1

注:https://github.com/Homebrew/brew/pull/612のため、これは機能しなくなりました

今日も同じ問題がありました。openssl 1.0.2をアンインストール(unbrewed ??)し、homebrewでも1.0.1をインストールしました。Dotnet new / restore / runは正常に機能しました。

openssl 101のインストール:
brew install homebrew / versions / openssl101
リンク:
brew link --force homebrew / versions / openssl101


2
やった!1.0.2はリンクしたくなかったようです。次の質問は、なぜ.netcoreがコミュニティで推奨されていないことを提案するのかということです。
daviddeath 2016

1.0.2は数日前に別のMacで動作したので、最近のbrewまたはopensslの変更があるかもしれません。とにかく、ドットネットコアに関しては、私達はよいです:)
user3488820

1
@bartonjsによって投稿されたgithubリンクは、brewが数日前に更新されたことを示しています。コミットを見ると、変更は `if HOMEBREW_PREFIX.to_s ==" / usr / local "&& keg.name ==" openssl "`なので、1.0.1バージョンは異なるHOMEBREW_PREFIXを使用していると思います。
daviddeath

11
私にはRefusing 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
うまくいき

6
この答えはで自作の開発者によって行われた変更与えもはや正しくありませんgithub.com/Homebrew/brew/pull/612
Joshka

1

Ruby 2.6.5の新しいバージョンをインストールしようとしたときに同じ問題が発生しました 。https://github.com/kelaberetiv/TagUI/issues/86を使用すると、問題を解決できます。これは、macOS catalinaバージョン10.15.1の場合

基本的に、私はupdate and upgrade自作してopensslをインストールし、rubyをインストールしました。

brew update && brew upgrade
brew install openssl

次に、これらの2つのシンボリックリンクを作成します

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をインストールしました


1

デフォルトでは、homebrewから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

最後にopensslをリンクして、brew switchコマンドを使用して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

0

私にとってこれはうまくいったものです...

./bash_profileを編集し、コマンドの下に追加しました

export 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

私のために働く

そしてそれはのようなすべての問題を解決できると思います Failed to connect to raw.githubusercontent.com port 443: Connection refused

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.