Homebrew odmawia połączenia OpenSSL

141

Jestem na: OSX 10.11.6, Homebrew wersja 0.9.9m OpenSSL 0.9.8zg 14 lipca 2015

Próbuję zagrać z dotnetcore i postępując zgodnie z ich instrukcjami ,

Zaktualizowałem / zainstalowałem najnowszą wersję 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

Ale kiedy próbuję połączyć openssl, nadal napotykam ten błąd łączenia:

> 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

Opcja dołączania flag kompilatora nie ma dla mnie sensu, ponieważ nie kompiluję tych bibliotek, od których jestem zależny.

EDIT dotnetcore zaktualizował swoje instrukcje:

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/
daviddeath
źródło
3
W przypadku platformy .NET Core potrzebujesz obsługiwanej wersji OpenSSL, która byłaby wersją 1.0.1 lub 1.0.2. Skoro zgłaszasz wersję 0.9.8, może musisz brew upgrade opensslnajpierw to zrobić ?
bartonjs
2
Już to zrobiłem. Powinienem był to wyjaśnić, ale nie dodałem tych kroków do pytania. Ale już zrobiłem brew updatei brew install openssl. Próbuję zainstalować obsługiwaną wersję.
daviddeath
2
Wygląda na to, że Homebrew wyraźnie to zablokował: github.com/Homebrew/brew/commit/… .
bartonjs
4
I ... aby kontynuować moją wędrówkę, możesz być zainteresowany tym, co pojawi się
bartonjs
2
"... kiedy próbuję połączyć openssl, nadal napotykam ten błąd łączenia: .." - Zobacz także Jak ustawić ścieżkę wykonawczą (-rpath) pliku wykonywalnego za pomocą gcc w systemie Mac OSX? . Może to pomóc zawsze ładować właściwą bibliotekę w czasie wykonywania, jeśli Brew jej nie dodaje.
jww

Odpowiedzi:

63

Jak sugeruje aktualizacja drugiej odpowiedzi, obejście instalacji starego naparu openssl101 nie będzie już działać. Aby zapoznać się z rozwiązaniem w tej chwili, zobacz ten komentarz dotyczący dotnet / cli # 3964 .

Najważniejsza część problemu skopiowana tutaj:

Przyjrzałem się innej opcji, która była sugerowana do ustawienia ścieżki rpath w bibliotece. Myślę, że poniższe jest lepszym rozwiązaniem, które będzie miało wpływ tylko na tę konkretną bibliotekę.

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

i / lub jeśli masz zainstalowany NETCore 1.0.1, wykonaj to samo polecenie dla wersji 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

W efekcie, zamiast mówić systemowi operacyjnemu, aby zawsze korzystał z wersji Homebrew SSL i potencjalnie powodować awarię, mówimy dotnet, jak znaleźć właściwą bibliotekę.

Co również ważne, wygląda na to, że Microsoft zdaje sobie sprawę z tego problemu i ma zarówno a) dość natychmiastowy plan złagodzenia, jak i b) rozwiązanie długoterminowe (prawdopodobnie łączenie OpenSSL z dotnet).

Kolejna rzecz, na którą należy zwrócić uwagę: /usr/local/opt/openssl/libto miejsce, w którym napar jest domyślnie połączony:

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

Jeśli z jakiegoś powodu zainstalujesz napar i połączysz go w innym miejscu, to ta ścieżka jest tą, której powinieneś użyć jako rpath.

Po zaktualizowaniu rpath biblioteki System.Security.Cryptography.Native.dylib będziesz musiał zrestartować swoją sesję interaktywną (tj. Zamknij konsolę i uruchom kolejną).

Ben Collins
źródło
Gdzie mam dodać tę linię? Próbuję zmusić to do pracy w CI. Dostaję /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib (No such file or directory).
mrahhal
@mrahhal to ścieżka instalacji dotnetnarzędzi. Możliwe, że nie masz go zainstalowanego lub zainstalowałeś lub w innej lokalizacji. Jeśli jest zainstalowany i z Twojej strony, możesz which dotnetgo znaleźć.
Ben Collins
Och, właśnie sobie uświadomiłem, że przed instalacją dodaję tę linię dotnet. Spróbuję ponownie i wrócę.
mrahhal
3
U mnie zadziałało, w moim przypadku sdk został zainstalowany w innym katalogu, więc musiałem zmienić ścieżkę.
mrahhal
4
Z dotnet 1.1.0 musiałem zrobić: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

Oto, co zadziałało dla mnie:

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

Dzięki @dorlandode w tym wątku https://github.com/Homebrew/brew/pull/597

Uwaga: użyłem tego tylko jako tymczasowej poprawki, dopóki nie mogłem spędzić czasu na poprawnej instalacji Openssl od nowa. Jak pamiętam, większość dnia spędziłem na debugowaniu i rozwiązywaniu problemów, zanim zdałem sobie sprawę, że najlepszym sposobem jest ręczne zainstalowanie potrzebnych certyfikatów jeden po drugim. Przeczytaj link w komentarzu @ bouke, zanim spróbujesz.

rorykoehler
źródło
9
to pełna ścieżka do ostatniego łącza /usr/local/bin/openssl?
Mohamed Hafez
Dlaczego ta odpowiedź nie została przyjęta, uratowałeś mi życie. :: kciuk w górę ::
wukong
2
Jest dobry powód, dla którego napar odmawia tego. Zobacz także: github.com/Homebrew/brew/pull/597 .
Bouke
7
To rozwiązanie działało dla mnie, ale musiałem zmienić 1.0.2jna z 1.0.2kpowodu różnic w wersjach. Dlatego użytkownicy uważajcie, może być konieczne dostosowanie ścieżek dla bieżącej wersji
Jeff
Widziałem komentarz @ Jeffa trochę za późno. Jeśli ty też to zrobiłeś, myślę, że ln -s -f /usr/local/Cellar/openssl/1.0.2k/bin/openssl /usr/local/bin/opensslto naprawia
shaneparsons,
49

Żadne z tych rozwiązań nie działało dla mnie w systemie OS X El Capitan 10.11.6. Prawdopodobnie dlatego, że OS X ma natywną wersję openssl, która uważa, że ​​jest lepsza i jako taka nie lubi manipulować.

Więc wybrałem drogę i zacząłem od nowa ...


Zainstaluj ręcznie i łącze symboliczne

cd /usr/local/src  
  • Jeśli otrzymujesz komunikat „Nie ma takiego pliku lub katalogu”, zrób to:

    cd /usr/local && mkdir src && cd src

Pobierz openssl:

curl --remote-name https://www.openssl.org/source/openssl-1.0.2h.tar.gz

Wypakuj i cd w:

tar -xzvf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h

Skompiluj i zainstaluj:

./configure darwin64-x86_64-cc --prefix=/usr/local/openssl-1.0.2h shared
make depend
make
make install

Teraz łącze symboliczne openssl systemu OS X do nowego i zaktualizowanego pliku openssl:

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

Zamknij terminal, otwórz nową sesję i sprawdź, czy OS X używa nowego openssl:

openssl version -a
mcgwier
źródło
Jeśli próbujesz zainstalować .NET core na OS X, powinieneś owinąć go w Docker.
mcgwier
6
Po zrobieniu tego wszystkiego: OpenSSL 0.9.8zh 14 stycznia 2016 zbudowany na: 15 maja 2016 platforma: darwin64-x86_64-llvm
AsimRazaKhan
5
Utworzenie dowiązania symbolicznego w następujący sposób pracował dla mnie ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl. Po ponownym uruchomieniu sesji terminala wpisz, which opensslaby upewnić się, że używasz zaktualizowanej wersji 1.0.2 ( /usr/local/bin/openssl) zamiast wbudowanej ( /usr/bin/openssl).
Olivier
1
Postępowałem zgodnie z tymi instrukcjami, ale kiedy wpisuję, które openssl, otrzymuję (/ opt / local / bin / openssl). Jak sprawić, by był / usr / local / bin / openssl?
Chris,
2
Postępowałem zgodnie z tymi instrukcjami (bardzo dziękuję za krok po kroku) i nadal brzmiało to 0.9.8. Dziękuję Olivierowi za alternatywną metodę łączenia, która zadziałała.
Onikoroshi
45

Po prostu wykonaj brew info openssli przeczytaj informacje, w których jest napisane:

Jeśli musisz mieć to oprogramowanie jako pierwsze w swoim przebiegu PATH: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

Alex Maiburg
źródło
3
brew info opensslpodał mi te same pomocne informacje. Uruchomienie sugerowanego polecenia powyżej, a następnie uruchomienie source ~/.bash_profilelub otwarcie nowego terminala rozwiązało to za mnie.
PanPipes
2
WRESZCIE. To też zadziałało dla mnie. Inne odpowiedzi powyżej nie!
user124384
2
lubecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
B.Ma
16

Jeśli migracja Maca zepsuje Homebrew:

Przeprowadziłem migrację mojego Maca i rozłączyłem wszystkie moje instalacje homebrew - w tym OpenSSL. To się zepsuło gem install, więc pierwszy raz zauważyłem problem i zacząłem próbować go naprawić.

Po milionie rozwiązań (podczas migracji na OSX Sierra - 10.12.5), rozwiązanie okazało się komicznie proste:

brew reinstall ruby
brew reinstall openssl
tobybot
źródło
Rok później przydarzyło mi się to podczas migracji mojego Maca, a twoja poprawka również zadziałała. Dzięki wielkie; Właśnie zaczynałam rozważać wyczyszczenie mojego nowego Maca, wykonanie nowej instalacji i ręczną konfigurację wszystkiego od nowa.
David
@David cieszę się, że mogłem powstrzymać cię przed przekroczeniem krawędzi! Prawie zrobiłem to samo.
tobybot
1
Przed wykonaniem powyższych czynności może być również konieczne usunięcie tego folderu. rm -rf /usr/local/opt/openssl
Gal Bracha
9

Po wypróbowaniu wszystkiego, co mogłem znaleźć i nic nie działało, po prostu spróbowałem tego:

touch ~/.bash_profile; open ~/.bash_profile

Wewnątrz pliku dodano tę linię.

export PATH="$PATH:/usr/local/Cellar/openssl/1.0.2j/bin/openssl"

teraz działa :)

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
Jorn
źródło
1
To naprawdę proste rozwiązanie i miałem nadzieję, że zadziała, ale bez powodzenia. Nawet po zaktualizowaniu mojej PATH i ponownym uruchomieniu mojej sesji powłoki which opensslnadal wskazuje/usr/bin/openssl
Will Hitchcock
Aby to działało, musiałem również edytować mój .bash_profile. Ale jedyne, co zadziałało, to nakazanie mu szukania w / usr / local / bin zamiast / usr / bin. Zrobiłem to, dodającexport PATH=/usr/local/bin:$PATH
Alison
3
Aby to działało, trzeba dodać /usr/local/opt/openssl/bin, bez/openssl na końcu do przodu ścieżki, nie do końca: PATH=/usr/local/opt/openssl/bin:$PATH Korzystanie /usr/local/opt/opensslzamiast /usr/local/Cellar/openssl/$versionśrodków będziesz automatycznie zachować najbardziej up-to-date wersji w $ PATH bez konieczności zmieniać go przy każdym uaktualnieniu.
Mark Reed,
Po godzinach głupoty to załatwiło sprawę wraz z dodatkowymi notatkami @ MarkReed
Naomi Patrz
Udało mi się to wykorzystać i sprawić, by działało dla mnie. Dziękuję Ci. Mam openssl w wersji 1.0.2q.
Karthik NG
8

Mam podobny przypadek. Muszę zainstalować openssl przez brew, a następnie użyć pip, aby zainstalować mitmproxy. Otrzymuję tę samą skargę od brew link --force. Oto rozwiązanie, które osiągnąłem: (bez połączenia siły przez napar)

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

Nie rozwiązuje to bezpośrednio pytania. Zostawiam jedną linijkę na wypadek, gdyby ktoś użył pip i potrzebuje biblioteki openssl.

Uwaga: /usr/local/opt/openssl/libścieżki są uzyskiwane przezbrew info openssl

Pili Hu
źródło
Znalazłem ten przydatny do instalacji pysqlcipher
drtf
Przydatne do instalacji cryptography. Brakowało mi PKG_CONFIG_PATHzmiennej
Sagara
7

To zadziałało dla mnie:

 brew install openssl
 cd /usr/local/include 
 ln -s ../opt/openssl/include/openssl .
edwardthesecond
źródło
To zadziałało dla mnie, próbując skompilować PHP 7.2.1 z phpbrew na Mac OS High Sierra - dzięki!
Bruno de Oliveira,
6

Powyższe rozwiązanie z Edwardthesecond działało również dla mnie na Sierra

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

Inne kroki, które zrobiłem wcześniej, to:

  • instalowanie openssl przez brew

    brew install openssl
    
  • dodanie openssl do ścieżki zgodnie z sugestią homebrew

    brew info openssl
    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    
Lili
źródło
Działało miło, po prostu pominąłem la part './configure && make'
David 'mArm' Ansermot
1

Uwaga: to już nie działa z powodu https://github.com/Homebrew/brew/pull/612

Miałem dzisiaj ten sam problem. Odinstalowałem (unbrewed ??) openssl 1.0.2 i zainstalowałem 1.0.1 także z homebrew. Dotnet new / restore / run, a następnie działało dobrze.

Zainstaluj openssl 101:
brew zainstaluj homebrew / wersje / openssl101
Linking:
brew link --force homebrew / wersje / openssl101

user3488820
źródło
2
Zrobiło to! Wygląda na to, że 1.0.2 nie chciał łączyć. Następne pytanie brzmi: dlaczego .netcore sugeruje coś, co nie jest zalecane w społeczności.
daviddeath
1.0.2 działał u mnie na innym Macu kilka dni temu, więc może ostatnio nastąpiła zmiana naparu lub openssl. W każdym razie, jeśli chodzi o rdzeń dot net, jesteśmy dobrzy :)
user3488820
1
Link do github opublikowany przez @bartonjs pokazuje, że napar został zaktualizowany zaledwie kilka dni temu. Patrząc na zatwierdzenie, zmiana to `if HOMEBREW_PREFIX.to_s ==" / usr / local "&& keg.name ==" openssl "`, więc domyślam się, że wersja 1.0.1 używa innego HOMEBREW_PREFIX.
daviddeath
11
u mnie nie działa, nadal daje błądRefusing 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
Ta odpowiedź nie jest już poprawna, biorąc pod uwagę zmianę wprowadzoną przez deweloperów homebrew na github.com/Homebrew/brew/pull/612
Joshka
1

Miałem ten sam problem podczas próby instalacji nowszej wersji Ruby 2.6.5 https://github.com/kelaberetiv/TagUI/issues/86 pomaga mi rozwiązać problem. Dotyczy to systemu macOS Catalina w wersji 10.15.1

Zasadniczo zrobiłem update and upgradehomebrew, zainstalowałem openssl i zainstalowałem ruby.

brew update && brew upgrade
brew install openssl

Następnie utwórz te 2 linki symboliczne

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/

następnie zainstalowałem Ruby 2.6.5

gsumk
źródło
1

Domyślnie homebrew dał mi OpenSSL w wersji 1.1 i zamiast tego szukałem wersji 1.0. To zadziałało dla mnie.

Aby zainstalować wersję 1.0:

brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

Następnie próbowałem utworzyć przez to łącze symboliczne, ale spowodowało to następujący błąd:

ln -s /usr/local/Cellar/openssl/1.0.2t/include/openssl /usr/bin/openssl
ln: /usr/bin/openssl: Operation not permitted

Wreszcie połączono openssl, aby wskazać wersję 1.0 za pomocą polecenia przełącznika zaparzania:

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
Mayank
źródło
0

dla mnie to zadziałało ...

Edytowałem ./bash_profile i dodałem poniższe polecenie

export PATH = "/ usr / local / opt / openssl / bin: $ PATH"

deweloper
źródło
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

pracuje dla mnie

i myślę, że może rozwiązać wszystkie problemy, takie jak Failed to connect to raw.githubusercontent.com port 443: Connection refused

John Jim
źródło