Homebrew отказывается связывать OpenSSL

Я нахожусь: OSX 10.11.6, версия Homebrew 0.9.9m OpenSSL 0.9.8zg 14 июля 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/

Ответ 1

Как показывает обновление к другому ответу, обходной путь установки старого 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) долгосрочное решение (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.

Как только вы обновите rpath в System.Security.Cryptography.Native.dylib libray, вам необходимо перезапустить интерактивный сеанс (т.е. закрыть консоль и запустить другую).

Ответ 2

Это то, что сработало для меня:

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

NB: Я использовал это только как временное исправление, пока не смогу потратить время на правильную установку Openssl снова с нуля. Насколько я помню, я потратил большую часть дневной отладки и проблем, прежде чем я понял, что лучший способ - это вручную установить сертификаты, которые мне нужны по одному. Пожалуйста, прочитайте ссылку в комментарии @bouke, прежде чем пытаться это сделать.

Ответ 3

Ни один из этих решений не работал у меня на 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

Теперь symlink OS X откроет новый и обновленный openssl:

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

Закройте терминал, откройте новый сеанс и убедитесь, что OS X использует ваш новый openssl:

openssl version -a

Ответ 4

Просто выполните brew info openssl и прочитайте информацию, где он говорит:

Если вам нужно сначала запустить это программное обеспечение в своем запуске PATH: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

Ответ 5

Если миграция вашего Mac ломает доморощенный:

Я перенес свой Mac, и он отключил все мои домашние установки - в том числе OpenSSL. Это сломало gem install, таким образом я сначала заметил проблему и начал пытаться исправить это.

После миллиона решений (при переходе на OSX Sierra - 10.12.5) решение оказалось комично простым:

brew reinstall ruby
brew reinstall openssl

Ответ 6

Попробовав все, что я смог найти, и ничего не получилось, я просто попробовал это:

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

Ответ 7

У меня подобный случай. Мне нужно установить openssl через brew, а затем использовать 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 и требует opensl lib.

Примечание: пути /usr/local/opt/openssl/lib получены с помощью brew info openssl

Ответ 8

Это сработало для меня:

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

Ответ 9

Решение выше от edwardthesecond работало для меня тоже на Sierra

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

Другие шаги, которые я делал раньше:

  • установка openssl через brew

    brew install openssl
    
  • добавление openssl к пути, предложенному homebrew

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

Ответ 10

Примечание: это больше не работает из-за https://github.com/Homebrew/brew/pull/612

У меня была такая же проблема сегодня. Я удалил (unbrewed??) openssl 1.0.2 и установил 1.0.1 также с доморощенным. Dotnet new/restore/run затем работал нормально.

Установить openssl 101:
brew установить homebrew/versions/openssl101
Linking:
brew ссылка --force homebrew/versions/openssl101

Ответ 11

для меня это то, что сработало...

Я отредактировал. /bash_profile и добавил команду ниже

экспорт PATH = "/usr/local/opt/openssl/bin: $ PATH"