Homebrew recusando-se a vincular o OpenSSL

141

Estou no: OSX 10.11.6, Homebrew versão 0.9.9m OpenSSL 0.9.8zg 14 de julho de 2015

Estou tentando brincar com o dotnetcore e seguindo os instruções ,

Atualizei / instalei a versão mais recente do 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

Mas quando tento vincular o openssl, continuo com esse erro de vinculação:

> 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

A opção de incluir sinalizadores de compilador não faz sentido para mim, pois não estou compilando essas bibliotecas das quais dependo.

EDIT dotnetcore atualizou suas instruções:

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
fonte
3
Para o .NET Core, você precisa de uma versão suportada do OpenSSL, que seria uma versão 1.0.1 ou 1.0.2. Como você está relatando uma versão 0.9.8, talvez seja necessário brew upgrade opensslprimeiro?
bartonjs
2
Eu já fiz isso. Eu deveria ter esclarecido, mas não adicionei essas etapas à pergunta. Mas eu já fiz o brew updatee brew install openssl. Isso está tentando instalar a versão suportada.
Daviddeath
2
Parece que o Homebrew o bloqueou explicitamente: github.com/Homebrew/brew/commit/… .
bartonjs
4
E .. para continuar arredondando para fora minhas divagações, você poderia estar interessado em tudo o que se desenvolve em github.com/Homebrew/brew/pull/597
bartonjs
2
"... quando tento vincular o openssl, continuo com este erro de vinculação: .." - Veja também Como definir o caminho de tempo de execução (-rpath) de um executável com o gcc no Mac OSX? . Pode ajudá-lo a carregar sempre a biblioteca correta no tempo de execução, se o Brew não a adicionar.
JWW

Respostas:

63

Como sugere a atualização para a outra resposta, a solução alternativa para instalar o antigo openssl101 brew não funcionará mais. Para uma solução alternativa agora, consulte este comentário no dotnet / cli # 3964 .

A parte mais relevante do problema foi copiada aqui:

Examinei a outra opção sugerida para definir o rpath na biblioteca. Eu acho que a seguinte é uma solução melhor que afetará apenas essa biblioteca específica.

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 / ou se você tiver o NETCore 1.0.1 instalado, execute o mesmo comando para a 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

De fato, em vez de dizer ao sistema operacional para sempre usar a versão homebrew do SSL e potencialmente causar a quebra de algo, estamos dizendo à dotnet como encontrar a biblioteca correta.

Também importante, parece que a Microsoft está ciente do problema e possui a) um plano um tanto imediato para mitigar, bem como b) uma solução de longo prazo (probaby agrupando OpenSSL com dotnet).

Outra coisa a ser observada: /usr/local/opt/openssl/libé onde o brew está vinculado por padrão:

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, por qualquer motivo, você instalar o brew e vinculá-lo em um local diferente, esse caminho será o caminho que você deverá usar como rpath.

Depois de atualizar o rpath da biblioteca System.Security.Cryptography.Native.dylib, você precisará reiniciar sua sessão interativa (por exemplo, feche o console e inicie outro).

Ben Collins
fonte
Onde devo adicionar essa linha? Estou tentando fazer isso funcionar no CI. Estou recebendo um /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib (No such file or directory).
mrahhal
@mrahhal esse é o caminho de instalação das dotnetferramentas. É possível que você não o tenha instalado ou instalado ou em outro local. Se estiver instalado e da sua parte, você poderá which dotnetencontrá-lo.
Ben Collins
Ah, acabei de perceber que estou adicionando esta linha antes de instalar dotnet. Irá tentar novamente e voltar.
precisa saber é o seguinte
3
Funcionou para mim, no meu caso, o sdk foi instalado em um diretório diferente, então tive que mudar o caminho.
mrahhal
4
Com o dotnet 1.1.0, eu tinha que fazer: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

Isto é o que funcionou para mim:

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

Obrigado a @dorlandode neste tópico https://github.com/Homebrew/brew/pull/597

Nota: usei isso apenas como uma correção temporária até poder gastar o tempo corretamente instalando o Openssl novamente do zero. Lembro-me de que passei a maior parte do dia depurando e tendo problemas antes de perceber que a melhor maneira era instalar manualmente os certificados necessários, um por um. Leia o link no comentário de @ bouke antes de tentar isso.

rorykoehler
fonte
9
é o caminho completo para o último link /usr/local/bin/openssl?
Mohamed Hafez
Por que essa resposta não é aceita, você salvou minha vida, cara. :: thumb up ::
wukong
2
Há uma boa razão pela qual a cerveja está se recusando a fazer isso. Veja também: github.com/Homebrew/brew/pull/597 .
Bouke
7
Essa solução funcionou para mim, mas tive que mudar 1.0.2jpara 1.0.2kdevido a diferenças de versão. Assim, os usuários cuidado, você pode precisar de ajustar os locais para a versão atual
Jeff
Vi o comentário de @ Jeff um pouco tarde demais. Se você fez também, acredito ln -s -f /usr/local/Cellar/openssl/1.0.2k/bin/openssl /usr/local/bin/opensslcorreções que ele
shaneparsons
49

Nenhuma dessas soluções funcionou para mim no OS X El Capitan 10.11.6. Provavelmente porque o OS X tem uma versão nativa do openssl que acredita ser superior e, como tal, não gosta de adulteração.

Então, eu peguei a estrada e comecei de novo ...


Instalar manualmente e link simbólico

cd /usr/local/src  
  • Se você estiver recebendo "Nenhum arquivo ou diretório", escolha:

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

Faça o download do openssl:

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

Extrato e cd em:

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

Compile e instale:

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

Agora faça o link simbólico do openssl do OS X para o seu openssl novo e atualizado:

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

Feche o terminal, abra uma nova sessão e verifique se o OS X está usando seu novo openssl:

openssl version -a
McGwier
fonte
Se você estiver tentando instalar o .NET core no OS X, envolva-o no Docker.
Mcgwier 2/08
6
Depois de fazer tudo isso: OpenSSL 0.9.8zh 14 de janeiro de 2016 construído em: 15 de maio, 2016 plataforma: darwin64-x86_64-llvm
AsimRazaKhan
5
Criando um link simbólico da seguinte maneira trabalhou para mim: ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl. Após reiniciar a sessão do Terminal, digite which opensslpara certificar-se de que você está usando a versão 1.0.2 atualizada ( /usr/local/bin/openssl) em vez da interna ( /usr/bin/openssl).
Olivier
1
Eu segui essas instruções, mas quando digito o openssl, recebo (/ opt / local / bin / openssl). Como faço para que seja / usr / local / bin / openssl?
22416 Chris
2
Eu segui estas instruções (muito obrigado pelo passo a passo), e ainda dizia 0.9.8. Obrigado a Olivier pelo método alternativo de vinculação que funcionou.
Onikoroshi 12/01
44

Basta executar brew info openssle ler as informações onde diz:

Se você precisar primeiro deste software em sua execução no PATH: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

Alex Maiburg
fonte
3
brew info openssldeu a mesma informação útil para mim. A execução do comando sugerido acima e a execução source ~/.bash_profileou abertura de um novo terminal o resolveram para mim.
PanPipes
2
FINALMENTE. Isso também funcionou para mim. As outras respostas acima não!
user124384
2
ouecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
B.Ma 30/09
16

Se a migração do seu Mac quebrar o homebrew:

Migrei meu mac e ele desvinculou todas as minhas instalações de homebrew - incluindo o OpenSSL. Isso quebrou gem install, e foi assim que notei o problema e comecei a tentar consertar isso.

Após um milhão de soluções (ao migrar para o OSX Sierra - 10.12.5), a solução acabou sendo comicamente simples:

brew reinstall ruby
brew reinstall openssl
tobybot
fonte
E um ano depois, isso aconteceu comigo ao migrar meu Mac, e sua correção funcionou para mim também. Muito obrigado; Eu estava chegando ao ponto de considerar limpar meu novo Mac e fazer uma nova instalação e configurar tudo de novo manualmente.
David
@ David feliz que eu poderia impedi-lo de ir ao limite! Eu quase fiz o mesmo.
tobybot
1
Você também pode precisar excluir esta pasta antes de fazer o acima. rm -rf /usr/local/opt/openssl
Gal Bracha
9

Depois de tentar tudo o que pude encontrar e nada funcionou, tentei o seguinte:

touch ~/.bash_profile; open ~/.bash_profile

Dentro do arquivo adicionado esta linha.

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

agora funciona :)

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
fonte
1
Esta é uma solução muito simples e eu tinha muita esperança de que funcionasse para mim, mas sem sorte aqui. Mesmo depois de atualizar o meu caminho e reiniciar a minha sessão de shell which opensslainda aponta para/usr/bin/openssl
Will Hitchcock
Para fazer isso funcionar, eu tive que editar meu .bash_profile também. Mas a única coisa que funcionou foi dizer para procurar em / usr / local / bin em vez de / usr / bin. Eu fiz isso adicionandoexport PATH=/usr/local/bin:$PATH
Alison
3
Para que isso funcione, você precisa adicionar /usr/local/opt/openssl/bin, sem o /opensslfinal, à frente do PATH, e não o fim: PATH=/usr/local/opt/openssl/bin:$PATH usar em /usr/local/opt/opensslvez de /usr/local/Cellar/openssl/$versionsignifica que você manterá automaticamente a versão mais atualizada do seu $ PATH sem ter para alterá-lo toda vez que você atualizar.
Mark Reed
Depois de horas de burrice, isso fez o truque para mim, juntamente com as anotações adicionais de @ MarkReed
Naomi Veja
Eu era capaz de usar isso e fazê-lo funcionar para mim. Obrigado. Eu tenho a versão 1.0.2q do openssl.
Karthik NG
8

Eu tenho um caso semelhante. Preciso instalar o openssl via brew e usar o pip para instalar o mitmproxy. Recebo a mesma reclamação brew link --force. A seguir, a solução que cheguei: (sem ligação de força por infusão)

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

Isso não aborda a questão diretamente. Deixo o one-liner no caso de alguém usar pip e exigir a lib openssl.

Nota: os /usr/local/opt/openssl/libcaminhos são obtidos porbrew info openssl

Pili Hu
fonte
Achei este útil para instalar o pysqlcipher
drtf
Útil para instalação cryptography. Eu estava com a PKG_CONFIG_PATHvariável ausente #
Sagar
7

Isso funcionou para mim:

 brew install openssl
 cd /usr/local/include 
 ln -s ../opt/openssl/include/openssl .
edwardthesecond
fonte
Isso funcionou para mim, tentando compilar o PHP 7.2.1 com phpbrew no Mac OS High Sierra - Obrigado!
Bruno de Oliveira
6

A solução acima de edwardthesecond também funcionou para mim na Sierra

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

Outras etapas que eu fiz antes foram:

  • instalando o openssl via brew

    brew install openssl
    
  • adicionando openssl ao caminho, conforme sugerido pelo homebrew

    brew info openssl
    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    
Lili
fonte
Funcionou bem para mim, apenas pulei a parte './configure && make'
David 'mArm' Ansermot
1

Nota: isso não funciona mais devido a https://github.com/Homebrew/brew/pull/612

Eu tive o mesmo problema hoje. Eu desinstalei (desaparafusou ??) o openssl 1.0.2 e instalei o 1.0.1 também com o homebrew. Dotnet new / restore / run funcionou bem.

Instalar openssl 101:
brew install homebrew / versões / openssl101
Vinculando:
brew link --force homebrew / versões / openssl101

user3488820
fonte
2
Isso foi feito! Parece que 1.0.2 não queria vincular. A próxima pergunta é por que o .netcore sugere algo que não é recomendado na comunidade.
Daviddeath
A versão 1.0.2 funcionou para mim em outro Mac há alguns dias, então talvez haja uma alteração recente no sistema ou no openssl. De qualquer forma, para o dot net core, somos bons :) #
314888820
1
O link do github publicado por @bartonjs mostra que o brew foi atualizado há apenas alguns dias. Observando o commit, a mudança é `if HOMEBREW_PREFIX.to_s ==" / usr / local "&& keg.name ==" openssl "` então estou supondo que a versão 1.0.1 use um HOMEBREW_PREFIX diferente.
daviddeath
11
não funcionou para mim, ainda dá erro #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 31/07
6
Essa resposta não é mais correto dada a mudança feita por devs homebrew no github.com/Homebrew/brew/pull/612
Joshka
1

Eu tive o mesmo problema ao tentar instalar a versão mais recente do ruby ​​2.6.5 Https://github.com/kelaberetiv/TagUI/issues/86 me ajuda a resolver o problema. Isso se para o macOS catalina Versão 10.15.1

Basicamente, eu fiz update and upgradehomebrew e instalei o openssl e instalei o ruby.

brew update && brew upgrade
brew install openssl

Em seguida, crie esses 2 links simbólicos

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/

então instalei o ruby ​​2.6.5

gsumk
fonte
1

Por padrão, o homebrew me deu a versão 1.1 do OpenSSL e eu estava procurando a versão 1.0. Isso funcionou para mim.

Para instalar a versão 1.0:

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

Em seguida, tentei desvendar o caminho, mas ele me deu o seguinte erro:

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

Finalmente, o openssl vinculado para apontar para a versão 1.0 usando o 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
Mayank
fonte
0

para mim é isso que funcionou ...

Editei o ./bash_profile e adicionei o comando abaixo

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

desenvolvedor
fonte
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

funciona para mim

e acho que pode resolver todos os problemas como Failed to connect to raw.githubusercontent.com port 443: Connection refused

John Jim
fonte