L'homebrew si rifiuta di collegare OpenSSL


141

Sono su: OSX 10.11.6, versione Homebrew 0.9.9m OpenSSL 0.9.8zg 14 luglio 2015

Sto provando a giocare con dotnetcore e seguendo le loro istruzioni ,

Ho aggiornato / installato l'ultima versione di 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

Ma quando provo a collegare openssl continuo a imbattermi in questo errore di collegamento:

> 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

L'opzione di includere flag di compilatore non ha senso per me, dal momento che non sto compilando queste librerie da cui dipendo.

EDIT dotnetcore ha aggiornato le loro istruzioni:

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
Per .NET Core è necessaria una versione supportata di OpenSSL, che sarebbe una versione 1.0.1 o 1.0.2. Dato che stai segnalando una versione 0.9.8, forse devi brew upgrade opensslprima farlo ?
Bartartjs il

2
L'ho già fatto. Avrei dovuto chiarire, ma non ho aggiunto questi passaggi alla domanda. Ma ho già fatto il brew updatee brew install openssl. Questo sta provando a installare la versione supportata.
daviddeath il

2
Sembra che Homebrew l'abbia esplicitamente bloccato: github.com/Homebrew/brew/commit/… .
bartonjs,

4
E .. per continuare a completare il mio divagare, potresti essere interessato a tutto ciò che si sviluppa su github.com/Homebrew/brew/pull/597
bartonjs,

2
"... quando provo a collegare openssl continuo a imbattermi in questo errore di collegamento: .." - Vedi anche Come impostare il percorso di runtime (-rpath) di un eseguibile con gcc in Mac OSX? . Può aiutarti a caricare sempre la libreria corretta in fase di esecuzione, se Brew non la sta aggiungendo.
JWW

Risposte:


63

Come suggerisce l'aggiornamento dell'altra risposta, la soluzione alternativa all'installazione del vecchio brew openssl101 non funzionerà più. Per una soluzione al momento, vedi questo commento su dotnet / cli # 3964 .

La parte più rilevante del problema copiata qui:

Ho esaminato l'altra opzione che è stata suggerita per impostare il percorso sulla libreria. Penso che la seguente sia una soluzione migliore che avrà effetto solo su questa libreria specifica.

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

e / o se hai NETCore 1.0.1 installato esegui lo stesso comando anche per 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

In effetti, anziché dire al sistema operativo di utilizzare sempre la versione homebrew di SSL e potenzialmente causare la rottura di qualcosa, stiamo dicendo a dotnet come trovare la libreria corretta.

Inoltre, sembra che Microsoft sia a conoscenza del problema e che abbia sia a) un piano piuttosto immediato per mitigare sia b) una soluzione a lungo termine (probaby che raggruppa OpenSSL con dotnet).

Un'altra cosa da notare: /usr/local/opt/openssl/libè dove la birra è collegata per impostazione predefinita:

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

Se per qualsiasi motivo installi la birra e la colleghi in una posizione diversa, quel percorso è quello che dovresti usare come rpath.

Dopo aver aggiornato il percorso del libray System.Security.Cryptography.Native.dylib, dovrai riavviare la sessione interattiva (ad esempio, chiudere la console e avviarne un'altra).


Dove dovrei aggiungere quella linea? Sto cercando di farlo funzionare in CI. Sto ottenendo un /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib (No such file or directory).
mrahhal,

@mrahhal è il percorso di installazione degli dotnetstrumenti. È possibile che tu non l'abbia installato o che tu sia installato o in un'altra posizione. Se è installato e da parte tua, potresti usarlo which dotnetper trovarlo.
Ben Collins,

Oh, ho appena realizzato che sto aggiungendo questa linea prima dell'installazione dotnet. Riproverò e tornerà.
mrahhal,

3
Ha funzionato per me, nel mio caso l'sk è stato installato in una directory diversa, quindi ho dovuto cambiare il percorso.
mrahhal,

4
Con dotnet 1.1.0 ho dovuto fare: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 il

60

Questo è ciò che ha funzionato per me:

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

Grazie a @dorlandode su questa discussione https://github.com/Homebrew/brew/pull/597

NB: L'ho usato solo come una soluzione temporanea fino a quando non ho potuto dedicare del tempo a installare di nuovo Opensl da zero. Come ricordo, ho trascorso gran parte della giornata a fare il debug e ad avere problemi prima di rendermi conto che il modo migliore era installare manualmente i certificati di cui avevo bisogno uno per uno. Si prega di leggere il link nel commento di @ bouke prima di provare questo.


9
è il percorso completo per l'ultimo link /usr/local/bin/openssl?
Mohamed Hafez,

Perché questa risposta non è stata accettata, mi hai salvato la vita amico. :: pollice in su ::
wukong,

2
C'è una buona ragione per cui la birra si rifiuta di farlo. Vedi anche questo: github.com/Homebrew/brew/pull/597 .
Bouke,

7
Questa soluzione ha funzionato per me, ma ho dovuto cambiare 1.0.2ja 1.0.2kcausa delle differenze di versione. Quindi gli utenti attenti, potrebbe essere necessario regolare i percorsi per la versione corrente
Jeff

Ho visto il commento di @ Jeff un po 'troppo tardi. Se lo hai fatto anche tu, credo che ln -s -f /usr/local/Cellar/openssl/1.0.2k/bin/openssl /usr/local/bin/openssllo
risolva

49

Nessuna di queste soluzioni ha funzionato per me su OS X El Capitan 10.11.6. Probabilmente perché OS X ha una versione nativa di openssl che ritiene sia superiore e, come tale, non ama la manomissione.

Quindi, ho preso la strada maestra e ho ricominciato da capo ...


Installa manualmente e collegamento simbolico

cd /usr/local/src  
  • Se ricevi "Nessun file o directory", fallo:

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

Scarica openssl:

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

Estrai e cd in:

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

Compila e installa:

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

Ora symlink OS X's openssl al tuo openssl nuovo e aggiornato:

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

Chiudi il terminale, apri una nuova sessione e verifica che OS X stia utilizzando il tuo nuovo openssl:

openssl version -a

Se stai cercando di installare .NET core su OS X, dovresti inserirlo in Docker.
McGwier,

6
Dopo aver fatto tutto questo: OpenSSL 0.9.8zh 14 gennaio 2016 costruito il: 15 maggio 2016 piattaforma: darwin64-x86_64-llvm
AsimRazaKhan

5
La creazione di un link simbolico nel seguente modo ha funzionato per me: ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl. Dopo aver riavviato la sessione Terminale, digitare which opensslper assicurarsi di utilizzare la versione 1.0.2 aggiornata ( /usr/local/bin/openssl) anziché quella incorporata ( /usr/bin/openssl).
Olivier il

1
Ho seguito queste istruzioni ma quando scrivo quale openssl, ottengo (/ opt / local / bin / openssl). Come ottengo che sia / usr / local / bin / openssl?
Chris,

2
Ho seguito queste istruzioni (grazie mille per la procedura passo-passo), e diceva ancora 0.9.8. Grazie a Olivier per il metodo di collegamento alternativo che ha funzionato.
Onikoroshi,

45

Esegui brew info openssle leggi le informazioni dove dice:

Se devi prima avere questo software nel tuo percorso PATH: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile


3
brew info opensslmi ha dato le stesse informazioni utili. L'esecuzione del comando suggerito sopra e quindi l'esecuzione source ~/.bash_profileo l'apertura di un nuovo terminale lo hanno risolto per me.
PanPipes,

2
FINALMENTE. Questo ha funzionato anche per me. Le altre risposte sopra non lo hanno fatto!
user124384

2
oppureecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
B.Ma,

16

Se la migrazione del Mac interrompe l'homebrew:

Ho migrato il mio mac e ha scollegato tutte le mie installazioni homebrew, incluso OpenSSL. Questo si gem installè rotto , ed è così che ho notato per la prima volta il problema e ho iniziato a provare a ripararlo.

Dopo un milione di soluzioni (durante la migrazione a OSX Sierra - 10.12.5), la soluzione è diventata comicamente semplice:

brew reinstall ruby
brew reinstall openssl

E un anno dopo, questo è successo a me durante la migrazione del mio Mac e la tua correzione ha funzionato anche per me. Grazie mille; Stavo arrivando al punto di considerare di cancellare il mio nuovo Mac e fare una nuova installazione e ripristinare tutto manualmente.
David,

@David felice di averti impedito di andare oltre il limite! Ho quasi fatto lo stesso.
tobybot,

1
Potrebbe anche essere necessario eliminare questa cartella prima di eseguire quanto sopra. rm -rf /usr/local/opt/openssl
Gal Bracha,

9

Dopo aver provato tutto ciò che sono riuscito a trovare e nulla ha funzionato, ho appena provato questo:

touch ~/.bash_profile; open ~/.bash_profile

All'interno del file è stata aggiunta questa riga.

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

ora funziona :)

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
Questa è una soluzione davvero semplice ed ero abbastanza fiducioso che avrebbe funzionato per me, ma senza fortuna qui. Anche dopo aver aggiornato il mio PERCORSO e aver riavviato la mia sessione di shell which opensslpunta ancora a/usr/bin/openssl
Will Hitchcock,

Per farlo funzionare ho dovuto modificare anche il mio .bash_profile. Ma l'unica cosa che ha funzionato è stato dirgli di cercare in / usr / local / bin anziché / usr / bin. L'ho fatto aggiungendoexport PATH=/usr/local/bin:$PATH
Alison il

3
Per questo al lavoro, è necessario aggiungere /usr/local/opt/openssl/bin, senza il /opensslalla fine, alla parte anteriore del PATH, non la fine: PATH=/usr/local/opt/openssl/bin:$PATH Usando /usr/local/opt/opensslinvece di /usr/local/Cellar/openssl/$versionmezzi che manterrai automaticamente la versione più up-to-date nel $ PATH, senza dover per cambiarlo ogni volta che si aggiorna.
Mark Reed,

Dopo ore di stupidità questo mi ha aiutato insieme alle note aggiuntive di @ MarkReed
Naomi Vedi il

Sono stato in grado di utilizzare questo e farlo funzionare per me. Grazie. Ho la versione 1.0.2q di openssl.
Karthik NG,

8

Ho un caso simile. Devo installare openssl tramite brew e quindi usare pip per installare mitmproxy. Ricevo lo stesso reclamo da brew link --force. Di seguito è la soluzione che ho raggiunto: (senza collegamento di forza dalla birra)

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

Questo non affronta la domanda in modo diretto. Lascio il one-liner nel caso in cui qualcuno usi pip e richieda la libreria openssl.

Nota: i /usr/local/opt/openssl/libpercorsi sono ottenuti dabrew info openssl


Trovato questo utile per l'installazione di pysqlcipher
drtf

Utile per l'installazione cryptography. Mi mancava la PKG_CONFIG_PATHvariabile
Sagar il

7

Questo ha funzionato per me:

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

Questo ha funzionato per me, cercando di compilare PHP 7.2.1 con phpbrew su Mac OS High Sierra - Grazie!
Bruno de Oliveira,

6

La soluzione precedente di edwardthesecond ha funzionato anche per me su Sierra

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

Altri passaggi che ho fatto prima sono stati:

  • l'installazione di openssl tramite brew

    brew install openssl
    
  • aggiungendo openssl al percorso come suggerito da homebrew

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

Ha funzionato bene per me, ho appena saltato la parte './configure && make'
David 'mArm' Ansermot

2

Per impostazione predefinita, homebrew mi ha dato OpenSSL versione 1.1 e stavo cercando invece la versione 1.0. Questo ha funzionato per me.

Per installare la versione 1.0:

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

Quindi ho provato a collegarmi in modo semplice ma mi ha dato il seguente errore:

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

Finalmente collegato openssl per puntare alla versione 1.0 usando il comando brew switch:

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

1

Nota: questo non funziona più a causa di https://github.com/Homebrew/brew/pull/612

Ho avuto lo stesso problema oggi. Ho disinstallato (unbreved ??) openssl 1.0.2 e installato 1.0.1 anche con homebrew. Dotnet new / restore / run ha funzionato bene.

Installa openssl 101:
brew install homebrew / version / openssl101
Collegamento:
brew link --force homebrew / version / openssl101


2
Questo l'ha fatto! Sembra che 1.0.2 non volesse collegarsi. La prossima domanda è perché .netcore suggerisce qualcosa che non è raccomandato nella comunità.
daviddeath,

1.0.2 ha funzionato per me su un altro mac qualche giorno fa, quindi forse c'è una recente modifica di brew o openssl. Comunque, per dot net core, siamo bravi :)
user3488820

1
Il link github pubblicato da @bartonjs mostra che la birra è stata aggiornata pochi giorni fa. Guardando il commit, la modifica è `se HOMEBREW_PREFIX.to_s ==" / usr / local "&& keg.name ==" openssl "` quindi suppongo che la versione 1.0.1 usi un HOMEBREW_PREFIX diverso.
daviddeath,

11
non ha funzionato per me, dà ancora erroreRefusing 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
Questa risposta non è più corretta dato il cambiamento fatto dagli sviluppatori homebrew su github.com/Homebrew/brew/pull/612
Joshka

1

Ho avuto lo stesso problema durante il tentativo di installare la versione più recente di ruby ​​2.6.5 https://github.com/kelaberetiv/TagUI/issues/86 mi aiuta a risolvere il problema. Questo se per macOS catalina versione 10.15.1

Fondamentalmente, ho fatto update and upgradehomebrew e ho installato openssl e installato ruby.

brew update && brew upgrade
brew install openssl

Quindi creare questi 2 collegamenti simbolici

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/

quindi installato ruby ​​2.6.5


0

per me questo è ciò che ha funzionato ...

Ho modificato il file ./bash_profile e aggiunto sotto il comando

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

per me va bene

e penso che possa risolvere tutti i problemi come Failed to connect to raw.githubusercontent.com port 443: Connection refused

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.