Homebrew weigert sich, OpenSSL zu verlinken

140

Ich bin auf: OSX 10.11.6, Homebrew Version 0.9.9m OpenSSL 0.9.8zg 14. Juli 2015

Ich versuche mit Dotnetcore zu spielen und indem ich deren Anweisungen folge ,

Ich habe die neueste Version von openssl aktualisiert / installiert:

> 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

Aber wenn ich versuche, openssl zu verlinken, stoße ich weiterhin auf diesen Verknüpfungsfehler:

> 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

Die Option, Compiler-Flags einzuschließen, macht für mich keinen Sinn, da ich diese Bibliotheken, von denen ich abhängig bin, nicht kompiliere.

EDIT dotnetcore hat seine Anweisungen aktualisiert:

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
quelle
3
Für .NET Core benötigen Sie eine unterstützte Version von OpenSSL, nämlich eine Version 1.0.1 oder 1.0.2. Da Sie eine Version 0.9.8 melden, müssen Sie dies möglicherweise brew upgrade opensslzuerst tun ?
Bartonjs
2
Das habe ich schon gemacht. Ich hätte es klarstellen sollen, aber ich habe diese Schritte nicht zu der Frage hinzugefügt. Aber ich habe das brew updateund schon gemacht brew install openssl. Hiermit wird versucht, die unterstützte Version zu installieren.
Daviddeath
2
Es sieht so aus, als hätte Homebrew es explizit blockiert: github.com/Homebrew/brew/commit/… .
Bartonjs
4
Und ... um mein Streifzug weiter abzurunden, könnten Sie daran interessiert sein, was sich auf github.com/Homebrew/brew/pull/597
bartonjs
2
"... wenn ich versuche, openssl zu verknüpfen, tritt weiterhin dieser Verknüpfungsfehler auf: .." - Siehe auch So legen Sie den Laufzeitpfad (-rpath) einer ausführbaren Datei mit gcc unter Mac OSX fest? . Es kann Ihnen helfen, zur Laufzeit immer die richtige Bibliothek zu laden, wenn Brew sie nicht hinzufügt.
JWW

Antworten:

63

Wie aus der Aktualisierung der anderen Antwort hervorgeht, funktioniert die Problemumgehung bei der Installation des alten openssl101-Biers nicht mehr. Eine aktuelle Problemumgehung finden Sie in diesem Kommentar zu dotnet / cli # 3964 .

Der relevanteste Teil des hier kopierten Problems:

Ich habe mir die andere Option angesehen, die zum Festlegen des Pfads in der Bibliothek vorgeschlagen wurde. Ich denke, das Folgende ist eine bessere Lösung, die nur diese spezifische Bibliothek betrifft.

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

und / oder wenn Sie NETCore 1.0.1 installiert haben, führen Sie denselben Befehl auch für 1.0.1 aus:

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

Anstatt dem Betriebssystem anzuweisen, immer die Homebrew-Version von SSL zu verwenden und möglicherweise einen Fehler zu verursachen, teilen wir dotnet mit, wie die richtige Bibliothek gefunden werden soll.

Wichtig ist auch, dass Microsoft sich des Problems bewusst ist und sowohl a) einen etwas unmittelbaren Plan zur Minderung als auch b) eine langfristige Lösung hat (wahrscheinlich OpenSSL mit Dotnet bündeln).

Eine andere Sache zu beachten: /usr/local/opt/openssl/libist, wo das Gebräu standardmäßig verknüpft ist:

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

Wenn Sie aus irgendeinem Grund das Gebräu installieren und an einem anderen Ort verknüpfen, sollten Sie diesen Pfad als Pfad verwenden.

Sobald Sie den Pfad der System.Security.Cryptography.Native.dylib-Bibliothek aktualisiert haben, müssen Sie Ihre interaktive Sitzung neu starten (dh Ihre Konsole schließen und eine andere starten).

Ben Collins
quelle
Wo soll ich diese Zeile hinzufügen? Ich versuche, dies in CI zum Laufen zu bringen. Ich bekomme eine /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib (No such file or directory).
Mrahhal
@mrahhal das ist der Installationspfad des dotnetWerkzeugs. Es ist möglich, dass Sie es entweder nicht installiert haben oder installiert haben oder an einem anderen Ort. Wenn es installiert ist und von Ihrer Seite, können Sie es verwenden which dotnet, um es zu finden.
Ben Collins
Oh, ich habe gerade festgestellt, dass ich diese Zeile vor der Installation hinzufüge dotnet. Ich werde es erneut versuchen und zurückkommen.
Mrahhal
3
Hat bei mir funktioniert, in meinem Fall wurde der SDK in einem anderen Verzeichnis installiert, sodass ich den Pfad ändern musste.
Mrahhal
4
Mit dotnet 1.1.0 musste ich tun: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
59

Das hat bei mir funktioniert:

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

Vielen Dank an @dorlandode in diesem Thread https://github.com/Homebrew/brew/pull/597

NB: Ich habe dies nur als vorübergehende Korrektur verwendet, bis ich Zeit damit verbringen konnte, Openssl von Grund auf neu zu installieren. Wie ich mich erinnere, verbrachte ich den größten Teil eines Tages mit Debuggen und Problemen, bevor mir klar wurde, dass der beste Weg darin bestand, die benötigten Zertifikate einzeln manuell zu installieren. Bitte lesen Sie den Link in @ boukes Kommentar, bevor Sie dies versuchen.

rorykoehler
quelle
9
ist der vollständige Pfad für den letzten Link /usr/local/bin/openssl?
Mohamed Hafez
Warum diese Antwort nicht akzeptiert wird, hast du mein Leben gerettet, Mann. :: Daumen hoch ::
Wukong
2
Es gibt einen guten Grund, warum Brew dies ablehnt. Siehe auch dies: github.com/Homebrew/brew/pull/597 .
Bouke
7
Diese Lösung funktionierte für mich, aber ich hatte zu ändern , 1.0.2jum 1.0.2kwegen der Versionsunterschiede. Benutzer sollten also aufpassen, dass Sie möglicherweise die Pfade für die aktuelle Version anpassen müssen
Jeff
Ich habe @ Jeffs Kommentar etwas zu spät gesehen. Wenn Sie auch getan haben, glaube ich, ln -s -f /usr/local/Cellar/openssl/1.0.2k/bin/openssl /usr/local/bin/opensslbehebt es
shaneparsons
49

Keine dieser Lösungen funktionierte für mich unter OS X El Capitan 10.11.6. Wahrscheinlich, weil OS X eine native Version von openssl hat, die es für überlegen hält und als solche keine Manipulationen mag.

Also nahm ich die Landstraße und fing neu an ...


Manuell installieren und symlink

cd /usr/local/src  
  • Wenn Sie "Keine solche Datei oder kein solches Verzeichnis" erhalten, machen Sie es:

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

Download openssl:

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

Auszug und CD in:

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

Kompilieren und installieren:

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

Jetzt verknüpft syms OS X's openssl mit Ihrem neuen und aktualisierten openssl:

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

Schließen Sie das Terminal, öffnen Sie eine neue Sitzung und stellen Sie sicher, dass OS X Ihr neues openssl verwendet:

openssl version -a
mcgwier
quelle
Wenn Sie versuchen, .NET Core unter OS X zu installieren, sollten Sie es in Docker einbinden.
Mcgwier
6
Nach all dem: OpenSSL 0.9.8zh 14. Januar 2016 gebaut am: 15. Mai 2016 Plattform: darwin64-x86_64-llvm
AsimRazaKhan
5
Das Erstellen eines Symlinks auf folgende Weise hat bei mir funktioniert : ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl. Geben Sie nach dem Neustart Ihrer Terminalsitzung ein, which opensslum sicherzustellen, dass Sie die aktualisierte Version 1.0.2 ( /usr/local/bin/openssl) anstelle der integrierten Version ( ) verwenden /usr/bin/openssl.
Olivier
1
Ich habe diese Anweisungen befolgt, aber wenn ich eintreibe, was openssl ist, bekomme ich (/ opt / local / bin / openssl). Wie bekomme ich es zu / usr / local / bin / openssl?
Chris
2
Ich habe diese Anweisungen befolgt (vielen Dank für die Schritt-für-Schritt-Anleitung) und es stand immer noch 0.9.8. Vielen Dank an Olivier für die alternative Verknüpfungsmethode, die funktioniert hat.
Onikoroshi
44

Führen Sie einfach brew info openssldie Informationen aus und lesen Sie sie dort, wo sie stehen:

Wenn Sie diese Software zuerst in Ihrem PATH ausführen müssen: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

Alex Maiburg
quelle
3
brew info opensslgab die gleichen hilfreichen Informationen für mich. Das Ausführen des oben vorgeschlagenen Befehls und das anschließende Ausführen source ~/.bash_profileoder Öffnen eines neuen Terminals hat das Problem für mich gelöst.
PanPipes
2
ENDLICH. Das hat auch bei mir funktioniert. Die anderen Antworten oben haben nicht!
user124384
2
oderecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
B.Ma
16

Wenn die Migration Ihres Mac Homebrew bricht:

Ich habe meinen Mac migriert und alle meine Homebrew-Installationen - einschließlich OpenSSL - getrennt. Dies ist kaputt gem installgegangen. So habe ich das Problem zum ersten Mal bemerkt und versucht, es zu reparieren.

Nach einer Million Lösungen (bei der Migration auf OSX Sierra - 10.12.5) war die Lösung komisch einfach:

brew reinstall ruby
brew reinstall openssl
Tobbybot
quelle
Und ein Jahr später passierte mir die Migration meines Mac, und Ihr Fix funktionierte auch für mich. Vielen Dank; Ich war gerade dabei, darüber nachzudenken, meinen neuen Mac zu löschen, eine Neuinstallation durchzuführen und alles manuell neu einzurichten.
David
@ David froh, dass ich dich davon abhalten konnte, über den Rand zu gehen! Ich habe fast das Gleiche getan.
Tobbybot
1
Möglicherweise müssen Sie diesen Ordner auch löschen, bevor Sie die oben genannten Schritte ausführen können. rm -rf /usr/local/opt/openssl
Gal Bracha
9

Nachdem ich alles ausprobiert hatte, was ich finden konnte und nichts funktionierte, versuchte ich Folgendes:

touch ~/.bash_profile; open ~/.bash_profile

Innerhalb der Datei wurde diese Zeile hinzugefügt.

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

jetzt gehts :)

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
quelle
1
Dies ist eine wirklich einfache Lösung und ich war ziemlich hoffnungsvoll, dass es für mich funktionieren würde, aber hier kein Glück. Auch nach dem Aktualisieren meines PATH und dem Neustart meiner Shell-Sitzung zeigt which opensslimmer noch auf/usr/bin/openssl
Will Hitchcock
Damit dies funktioniert, musste ich auch mein .bash_profile bearbeiten. Aber das einzige, was funktionierte, war zu sagen, dass es in / usr / local / bin anstelle von / usr / bin suchen soll. Ich tat dies, indem ich hinzufügteexport PATH=/usr/local/bin:$PATH
Alison
3
Damit dies funktioniert, müssen Sie hinzufügen /usr/local/opt/openssl/bin, ohne die /opensslam Ende mit dem vorderen des PATH, nicht das Ende: PATH=/usr/local/opt/openssl/bin:$PATH Mit /usr/local/opt/opensslstatt /usr/local/Cellar/openssl/$versionMittel werden Sie automatisch halten die meisten up-to-date - Version in Ihrem $ PATH ohne um es bei jedem Upgrade zu ändern.
Mark Reed
Nach stundenlanger Dummheit tat dies den Trick für mich zusammen mit @ MarkReeds zusätzlichen Notizen
Naomi Siehe
Ich konnte das nutzen und es für mich zum Laufen bringen. Danke dir. Ich habe 1.0.2q Version von openssl.
Karthik NG
8

Ich habe einen ähnlichen Fall. Ich muss openssl über Brew installieren und dann pip verwenden, um mitmproxy zu installieren. Ich bekomme die gleiche Beschwerde von brew link --force. Folgendes ist die Lösung, die ich erreicht habe: (ohne Kraftverbindung durch Gebräu)

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

Dies spricht die Frage nicht direkt an. Ich lasse den Einzeiler für den Fall, dass jemand pip verwendet und die openssl lib benötigt.

Hinweis: Die /usr/local/opt/openssl/libPfade werden von erhaltenbrew info openssl

Pili Hu
quelle
Fand dieses nützlich für die Installation von pysqlcipher
drtf
Nützlich für die Installation cryptography. Mir fehlte die PKG_CONFIG_PATHVariable
Sagar
7

Das hat bei mir funktioniert:

 brew install openssl
 cd /usr/local/include 
 ln -s ../opt/openssl/include/openssl .
edwardthesecond
quelle
Dies funktionierte für mich, als ich versuchte, PHP 7.2.1 mit phpbrew unter Mac OS High Sierra zu kompilieren - Danke!
Bruno de Oliveira
6

Die obige Lösung von edwardthesecond hat auch für mich in Sierra funktioniert

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

Andere Schritte, die ich zuvor gemacht habe, waren:

  • Installation von openssl über Brew

    brew install openssl
    
  • Hinzufügen von openssl zum Pfad, wie von Homebrew vorgeschlagen

    brew info openssl
    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    
Lili
quelle
Hat gut für mich funktioniert, habe nur den Teil './configure && make' übersprungen
David 'mArm' Ansermot
1

Hinweis: Dies funktioniert aufgrund von https://github.com/Homebrew/brew/pull/612 nicht mehr

Ich hatte heute das gleiche Problem. Ich habe deinstalliert (ungebraut ??) openssl 1.0.2 und 1.0.1 auch mit homebrew installiert. Dotnet new / restore / run funktionierte dann einwandfrei.

Installiere openssl 101:
Brew installiere Homebrew / Versionen / openssl101
Verknüpfung:
Brew Link - Force Homebrew / Versionen / openssl101

user3488820
quelle
2
Das hat es geschafft! Scheint, dass 1.0.2 nicht verlinken wollte. Die nächste Frage ist, warum .netcore etwas vorschlägt, das in der Community nicht empfohlen wird.
Daviddeath
1.0.2 hat vor ein paar Tagen auf einem anderen Mac für mich funktioniert. Vielleicht gibt es kürzlich ein Gebräu oder eine OpenSL-Änderung. Wie auch immer, für Dot Net Core sind wir gut :)
user3488820
1
Der von @bartonjs gepostete Github-Link zeigt, dass Brew erst vor wenigen Tagen aktualisiert wurde. In Bezug auf das Commit lautet die Änderung "if HOMEBREW_PREFIX.to_s ==" / usr / local "&& keg.name ==" openssl "". Ich vermute also, dass die Version 1.0.1 ein anderes HOMEBREW_PREFIX verwendet.
Daviddeath
11
hat bei mir nicht funktioniert, gibt immer noch FehlerRefusing 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
Diese Antwort nicht mehr korrekt ist angesichts der von Homebrew Devs bei vorgenommene Änderung github.com/Homebrew/brew/pull/612
Joschka
1

Ich hatte das gleiche Problem beim Versuch, eine neuere Version von Ruby 2.6.5 zu installieren. Https://github.com/kelaberetiv/TagUI/issues/86 hilft mir, das Problem zu lösen. Dies gilt für macOS Catalina Version 10.15.1

Grundsätzlich habe ich update and upgradeHomebrew gemacht und openssl installiert und Ruby installiert.

brew update && brew upgrade
brew install openssl

Dann erstellen Sie diese 2 Symlinks

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/

dann installiert Ruby 2.6.5

gsumk
quelle
1

Standardmäßig gab mir Homebrew OpenSSL Version 1.1 und ich suchte stattdessen nach Version 1.0. Das hat bei mir funktioniert.

So installieren Sie Version 1.0:

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

Dann habe ich versucht, mich durch das Bild zu verbinden, aber es gab mir den folgenden Fehler:

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

Schließlich verknüpft openssl, um mit dem Befehl Brew Switch auf die Version 1.0 zu verweisen:

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
quelle
0

Für mich hat das funktioniert ...

Ich habe das ./bash_profile bearbeitet und den folgenden Befehl hinzugefügt

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

Entwickler
quelle
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

funktioniert bei mir

und ich denke, es kann alle Probleme wie lösen Failed to connect to raw.githubusercontent.com port 443: Connection refused

John Jim
quelle