Homebrew відмовляється зв’язати OpenSSL


141

Я перебуваю на: OSX 10.11.6, домашня версія 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/

3
Для .NET Core потрібна підтримувана версія OpenSSL, яка була б версією 1.0.1 або 1.0.2. Оскільки ви повідомляєте версію 0.9.8, можливо, вам потрібно brew upgrade opensslспочатку?
bartonjs

2
Я вже це зробив. Я повинен був уточнити, але я не додав цих кроків до питання. Але я вже зробив brew updateі brew install openssl. Це намагається встановити підтримувану версію.
daviddeath

2
Схоже, Homebrew явно заблокував це: github.com/Homebrew/brew/commit/… .
bartonjs

4
І .. щоб продовжити закруглення мого розгулу, вас може зацікавити все, що розвиватиметься на github.com/Homebrew/brew/pull/597
bartonjs

2
"... коли я намагаюся зв’язати openssl, я продовжую стикатися з цією помилкою посилання: .." - Також див. Як встановити шлях виконання (-rpath) виконуваного файлу з gcc під Mac OSX? . Це може допомогти вам завжди завантажувати правильну бібліотеку під час виконання, якщо Brew не додає її.
jww

Відповіді:


63

Як свідчить оновлення іншої відповіді, вирішення проблеми встановлення старої варіння opensl101 більше не працюватиме. Для вирішення цього питання дивіться цей коментар на 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 знають про цю проблему і мають: а) дещо негайний план пом'якшення, а також 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

Якщо з будь-якої причини ви встановите заварку та зв’яжете її в іншому місці, то цей шлях слід використовувати як rpath.

Після оновлення rpath бібліотеки System.Security.Cryptography.Native.dylib вам потрібно буде перезапустити інтерактивний сеанс (тобто закрити консоль і запустити інший).


Де я повинен додати цей рядок? Я намагаюся змусити це працювати на КІ. Я отримую /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
З dotnet 1.1.0 мені довелося поступити: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
Bouke

60

Це для мене працювало:

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, перш ніж намагатися це зробити.


9
повний шлях до останнього посилання /usr/local/bin/openssl?
Мохаммед Хафез

Чому ця відповідь не прийнята, ти врятував мені життя людини. :: великий палець вгору ::
вівконг

2
Є вагома причина, що пивоварня відмовляється це робити. Дивіться також це: github.com/Homebrew/brew/pull/597 .
Буке

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, яку він вважає вищою, і як такий не любить підробляти.

Отже, я пішов дорогою і почав свіжим ...


Вручну встановіть і посилання

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's openssl до вашої нової та оновленої openssl:

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

Закрийте термінал, відкрийте новий сеанс і переконайтеся, що OS X використовує новий openssl:

openssl version -a

Якщо ви намагаєтесь встановити ядро ​​.NET на OS X, слід загорнути його в Docker.
mcgwier

6
Після цього: OpenSSL 0.9.8ж 14 січня 2016 року побудований на: 15 травня 2016 року платформа: darwin64-x86_64-llvm
AsimRazaKhan

5
Створення символічного посилання наступним чином працював для мене ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl. Після перезапуску термінального сеансу введіть, which opensslщоб переконатися, що ви використовуєте оновлену версію 1.0.2 ( /usr/local/bin/openssl) замість вбудованої ( /usr/bin/openssl).
Олів'є

1
Я дотримувався цих інструкцій, але коли я набираю, у якому openssl, я отримую (/ opt / local / bin / openssl). Як я можу це зробити / usr / local / bin / openssl?
Кріс

2
Я дотримувався цих інструкцій (велике спасибі за крок за кроком), і він все ще сказав 0,9.8. Дякую Олів’є за альтернативний метод зв’язування, який працював.
Оникороші

45

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

Якщо вам потрібно спочатку це програмне забезпечення під час запуску PATH: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile


3
brew info opensslдав таку ж корисну для мене інформацію. Виконання запропонованої команди вище, а потім запуск source ~/.bash_profileабо відкриття нового терміналу вирішило це для мене.
PanPipes

2
ОКОНЧНО. Це теж працювало для мене. Інших відповідей вище не було!
користувач124384

2
абоecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
B.Ma

16

Якщо міграція вашого mac порушує домашню версію:

Я перемістив свій mac, і він від’єднав усі мої встановлення домашніх програм - включаючи OpenSSL. Це зламалосяgem install , саме тому я вперше помітив проблему і почав намагатися це виправити.

Після мільйона рішень (при переході на OSX Sierra - 10.12.5) рішення в кінцевому підсумку було комічно простим:

brew reinstall ruby
brew reinstall openssl

А через рік це сталося зі мною міграцією мого Mac, і ваше виправлення працювало і для мене. Дуже дякую; Я доходив до того, щоб розглянути питання про те, як витерти свій новий Mac і зробити нову установку та налаштувати все знову вручну.
Девід

@David радий, що я міг утримати тебе від того, щоб перейти через край! Я майже так само зробив.
tobybot

1
Можливо, вам також потрібно буде видалити цю папку, перш ніж зробити вище. rm -rf /usr/local/opt/openssl
Гал Брача

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 / local / bin замість / usr / 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 Дивіться

Я зміг скористатися цим і змусив мене працювати. Дякую. У мене є версія 1.0.2q openssl.
Karthik NG

8

У мене схожий випадок. Мені потрібно встановити openssl через brew, а потім використовувати pip для встановлення mitmproxy. Я отримую таку ж скаргу від 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 і вимагає lins openssl.

Примітка: /usr/local/opt/openssl/libшляхи отримані за допомогоюbrew info openssl


Знайшов цей корисний для встановлення pysqlcipher
drtf

Корисно для встановлення cryptography. Я пропустив PKG_CONFIG_PATHзмінну
Сагар

7

Це працювало для мене:

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

Це працювало для мене, намагаючись зібрати PHP 7.2.1 з phpbrew на Mac OS High Sierra - Дякую!
Бруно де Олівейра

6

Розв’язання вище від Edwardthesecond працювало і для мене на Сьєррі

 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
    

Для мене добре працювали, просто пропустив частину './configure && make'
David 'mArm' Ansermot

1

Примітка. Це більше не працює завдяки https://github.com/Homebrew/brew/pull/612

У мене була така ж проблема і сьогодні. Я видалив (unbrewed ??) openssl 1.0.2 і встановив 1.0.1 також з homebrew. Тоді Dotnet new / відновити / запустити тоді добре працював.

Встановити openssl 101:
варити встановити домашню версію / версії / openssl101
Посилання:
варити посилання - force homebrew / версії / openssl101


2
Це зробили! Здається, що 1.0.2 не хотів зв’язуватися. Наступне питання - чому .netcore пропонує щось, що не рекомендується в громаді.
daviddeath

1.0.2 працював для мене на іншому mac кілька днів тому, тому, можливо, є нещодавнє заварювання або openssl зміни. У будь-якому випадку, для крапкового ядра ми хороші :)
користувач3488820

1
Посилання github, опубліковане @bartonjs, показує, що варили було оновлено лише кілька днів тому. Дивлячись на коміт, зміна є "якщо 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
dark_ruby

6
Ця відповідь більше не є правильною, враховуючи зміну, яку внесли доморощені розробники на сайті github.com/Homebrew/brew/pull/612
Joshka

1

У мене була така ж проблема під час спроби встановити новішу версію ruby ​​2.6.5 https://github.com/kelaberetiv/TagUI/isissue/86 допомагає мені вирішити проблему. Це якщо для macOS catalina Версія 10.15.1

В основному, я зробив update and upgradeдомашню мову та встановив openssl та встановив рубін.

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/

потім встановлено рубін 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 вказує на версію 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.