1. ホーム
  2. macos

[解決済み] HomebrewがOpenSSLをリンクするのを拒否する

2022-04-26 17:04:24

質問

私が乗っているのは 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/

解決方法は?

他の回答の更新にあるように、古い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に正しいライブラリを見つける方法を指示しているのです。

また、重要なのは、マイクロソフトがこの問題を認識していて、a)ある程度即時の緩和策と、b)長期的な解決策(おそらく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 を更新したら、対話型セッションを再起動する必要があります (つまり、コンソールを終了して別のセッションを開始します)。