Homebrew se niega a vincular OpenSSL

141

Estoy en: OSX 10.11.6, Homebrew versión 0.9.9m OpenSSL 0.9.8zg 14 de julio de 2015

Estoy tratando de jugar con dotnetcore y siguiendo sus instrucciones ,

He actualizado / instalado la última versión de 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

Pero cuando intento vincular openssl, sigo encontrando este error de vinculación:

> 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

La opción de incluir indicadores del compilador no tiene sentido para mí, ya que no estoy compilando estas bibliotecas de las que soy dependiente.

EDITAR dotnetcore ha actualizado sus instrucciones:

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
fuente
3
Para .NET Core necesita una versión compatible de OpenSSL, que sería una versión 1.0.1 o 1.0.2. Ya que estás informando una versión 0.9.8, ¿quizás necesites brew upgrade opensslprimero?
bartonjs
2
Ya lo hice. Debería haber aclarado, pero no agregué esos pasos a la pregunta. Pero ya hice el brew updatey brew install openssl. Esto está tratando de instalar la versión compatible.
daviddeath
2
Parece que Homebrew lo ha bloqueado explícitamente: github.com/Homebrew/brew/commit/… .
bartonjs
44
Y ... para continuar completando mis divagaciones, es posible que te interese lo que se desarrolle en github.com/Homebrew/brew/pull/597
bartonjs
2
"... cuando intento vincular openssl, sigo teniendo este error de vinculación: .." - También vea ¿Cómo configurar la ruta de tiempo de ejecución (-rpath) de un ejecutable con gcc en Mac OSX? . Puede ayudarlo a cargar siempre la biblioteca correcta en tiempo de ejecución, si Brew no la agrega.
jww

Respuestas:

63

Como sugiere la actualización de la otra respuesta, la solución alternativa para instalar el viejo brew openssl101 ya no funcionará. Para una solución temporal en este momento, vea este comentario en dotnet / cli # 3964 .

La parte más relevante del problema copiado aquí:

Miré la otra opción que se sugirió para configurar el rpath en la biblioteca. Creo que la siguiente es una mejor solución que solo afectará a esta 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

y / o si tiene instalado NETCore 1.0.1, ejecute también el mismo comando para 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

En efecto, en lugar de decirle al sistema operativo que siempre use la versión homebrew de SSL y potencialmente causar que algo se rompa, le estamos diciendo a dotnet cómo encontrar la biblioteca correcta.

También es importante que parezca que Microsoft está al tanto del problema y tiene tanto a) un plan un tanto inmediato para mitigar como b) una solución a largo plazo (probaby agrupando OpenSSL con dotnet).

Otra cosa a tener en cuenta: /usr/local/opt/openssl/libes donde la cerveza está vinculada por defecto:

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

Si por alguna razón instala el brew y lo vincula en una ubicación diferente, entonces esa ruta es la que debe usar como rpath.

Una vez que haya actualizado el rpath de System.Security.Cryptography.Native.dylib libray, deberá reiniciar su sesión interactiva (es decir, cerrar la consola e iniciar otra).

Ben Collins
fuente
¿Dónde se supone que debo agregar esa línea? Estoy tratando de hacer que esto funcione en CI. Me estoy poniendo un /usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Security.Cryptography.Native.dylib (No such file or directory).
mrahhal
@mrahhal esa es la ruta de instalación de las dotnetherramientas. Es posible que no lo tenga instalado o que lo haya instalado o en otra ubicación. Si está instalado y de su parte, puede usarlo which dotnetpara encontrarlo.
Ben Collins el
Oh, acabo de darme cuenta de que estoy agregando esta línea antes de instalar dotnet. Volveré a intentarlo y volveré.
mrahhal
3
Funcionó para mí, en mi caso, el SDK se instaló en un directorio diferente, así que tuve que cambiar la ruta.
mrahhal
44
Con dotnet 1.1.0 tuve que hacer: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

Esto es lo que funcionó para mí:

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

Gracias a @dorlandode en este hilo https://github.com/Homebrew/brew/pull/597

NB: solo usé esto como una solución temporal hasta que pude pasar tiempo instalando correctamente Openssl nuevamente desde cero. Como recuerdo, pasé la mayor parte del día depurando y teniendo problemas antes de darme cuenta de que la mejor manera era instalar manualmente los certificados que necesitaba uno por uno. Lea el enlace en el comentario de @ bouke antes de intentar esto.

rorykoehler
fuente
9
Cuál es la ruta completa para el último enlace /usr/local/bin/openssl?
Mohamed Hafez
Por qué no se acepta esta respuesta, me salvaste la vida, hombre. :: pulgar arriba ::
wukong
2
Hay una buena razón por la cual Brew se niega a hacer esto. Vea también esto: github.com/Homebrew/brew/pull/597 .
Bouke
77
Esta solución trabajado para mí, pero tuve que cambiar 1.0.2ja 1.0.2kcausa de las diferencias de versión. Para que los usuarios tengan cuidado, es posible que deba ajustar las rutas para la versión actual
Jeff
Vi el comentario de @ Jeff demasiado tarde. Si tú también lo hiciste, creo que lo ln -s -f /usr/local/Cellar/openssl/1.0.2k/bin/openssl /usr/local/bin/opensslarregla
shaneparsons
49

Ninguna de estas soluciones me funcionó en OS X El Capitan 10.11.6. Probablemente porque OS X tiene una versión nativa de openssl que cree que es superior y, como tal, no le gusta la manipulación.

Entonces, tomé el camino alto y comencé de nuevo ...


Instalar manualmente y enlace simbólico

cd /usr/local/src  
  • Si obtiene "No existe tal archivo o directorio", hágalo:

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

Descargar openssl:

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

Extracto y cd en:

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

Compilar e instalar:

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

Ahora enlace simbólico OS X's openssl a su openssl nuevo y actualizado:

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

Cierre la terminal, abra una nueva sesión y verifique que OS X esté utilizando su nuevo openssl:

openssl version -a
mcgwier
fuente
Si está intentando instalar .NET core en OS X, debe envolverlo en Docker.
mcgwier
66
Después de hacer todo esto: OpenSSL 0.9.8zh 14 de enero de 2016 construido en: 15 de mayo de 2016 plataforma: darwin64-x86_64-llvm
AsimRazaKhan
55
La creación de un enlace simbólico de la siguiente manera funcionó para mí: ln -s /usr/local/openssl-1.0.2h/bin/openssl /usr/local/bin/openssl. Después de reiniciar su sesión de Terminal, escriba which opensslpara asegurarse de que está utilizando la versión actualizada 1.0.2 ( /usr/local/bin/openssl) en lugar de la versión incorporada ( /usr/bin/openssl).
Olivier
1
Seguí estas instrucciones pero cuando escribo cuál openssl, obtengo (/ opt / local / bin / openssl). ¿Cómo consigo que sea / usr / local / bin / openssl?
Chris
2
Seguí estas instrucciones (muchas gracias por el paso a paso), y todavía decía 0.9.8. Gracias a Olivier por el método de enlace alternativo que funcionó.
Onikoroshi el
45

Simplemente ejecute brew info openssly lea la información donde dice:

Si necesita tener este software primero en su ejecución PATH: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

Alex Maiburg
fuente
3
brew info opensslme dio la misma información útil. Ejecutar el comando sugerido arriba y luego ejecutar source ~/.bash_profileo abrir un nuevo terminal lo resolvió para mí.
PanPipes
2
FINALMENTE. Esto también funcionó para mí. ¡Las otras respuestas anteriores no lo hicieron!
user124384
2
oecho 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
B.Ma
16

Si migrar tu Mac rompe homebrew:

Migré mi Mac y desvinculó todas mis instalaciones de homebrew, incluido OpenSSL. Esto se rompió gem install, y así es como noté el problema por primera vez y comencé a intentar repararlo.

Después de un millón de soluciones (al migrar a OSX Sierra - 10.12.5), la solución terminó siendo cómicamente simple:

brew reinstall ruby
brew reinstall openssl
tobybot
fuente
Y un año después, esto me sucedió migrando mi Mac, y su solución también funcionó para mí. Muchas gracias; Estaba llegando al punto de considerar limpiar mi nueva Mac y hacer una nueva instalación y configurar todo de nuevo manualmente.
David
@David me alegro de poder evitar que te vayas al límite. Casi hice lo mismo.
tobybot
1
Es posible que también deba eliminar esta carpeta antes de hacer lo anterior. rm -rf /usr/local/opt/openssl
Gal Bracha
9

Después de probar todo lo que pude encontrar y nada funcionó, simplemente intenté esto:

touch ~/.bash_profile; open ~/.bash_profile

Dentro del archivo agregado esta línea.

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

ahora 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
fuente
1
Esta es una solución realmente simple y tenía muchas esperanzas de que me funcionara, pero no tuve suerte aquí. Incluso después de actualizar mi RUTA y reiniciar mi sesión de shell which openssltodavía apunta a/usr/bin/openssl
Will Hitchcock,
Para que esto funcione, tuve que editar mi .bash_profile también. Pero lo único que funcionó fue decirle que buscara en / usr / local / bin en lugar de / usr / bin. Hice esto agregandoexport PATH=/usr/local/bin:$PATH
Alison
3
Para que esto funcione, debe agregar /usr/local/opt/openssl/bin, sin el /opensslfinal, al frente de la RUTA, no el final: PATH=/usr/local/opt/openssl/bin:$PATH Al usar en /usr/local/opt/openssllugar de /usr/local/Cellar/openssl/$versionmedios, automáticamente mantendrá la versión más actualizada en su $ PATH sin tener para cambiarlo cada vez que actualice.
Mark Reed
Después de horas de tontería, esto me funcionó junto con las notas adicionales de @ MarkReed
Naomi See
Pude usar esto y hacerlo funcionar para mí. Gracias. Tengo la versión 1.0.2q de openssl.
Karthik NG
8

Tengo un caso similar Necesito instalar openssl a través de brew y luego usar pip para instalar mitmproxy. Recibo la misma queja de brew link --force. La siguiente es la solución a la que llegué: (sin forzar el enlace por brew)

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

Esto no aborda la pregunta directamente. Dejo el one-liner en caso de que alguien use pip y requiera el openssl lib.

Nota: las /usr/local/opt/openssl/librutas se obtienen porbrew info openssl

Pili Hu
fuente
Encontré este útil para instalar pysqlcipher
drtf
Útil para la instalación cryptography. Me faltaba la PKG_CONFIG_PATHvariable
Sagar
7

Esto funcionó para mí:

 brew install openssl
 cd /usr/local/include 
 ln -s ../opt/openssl/include/openssl .
edwardthesecond
fuente
Esto funcionó para mí, tratando de compilar PHP 7.2.1 con phpbrew en Mac OS High Sierra - ¡Gracias!
Bruno de Oliveira
6

La solución anterior de edwardthesecond también funcionó para mí en Sierra

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

Otros pasos que hice antes fueron:

  • instalación de openssl a través de brew

    brew install openssl
    
  • agregando openssl a la ruta como lo sugiere homebrew

    brew info openssl
    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    
Lili
fuente
Funcionó bien para mí, solo salté la parte './configure && make'
David 'mArm' Ansermot
2

Por defecto, homebrew me dio la versión 1.1 de OpenSSL y estaba buscando la versión 1.0. Esto funcionó para mí.

Para instalar la versión 1.0:

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

Luego traté de hacer un enlace simbólico, pero me dio el siguiente error:

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

Finalmente vinculado openssl para apuntar a la versión 1.0 usando el 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
fuente
1

Nota: esto ya no funciona debido a https://github.com/Homebrew/brew/pull/612

Tuve el mismo problema hoy. Desinstalé (desbloqueado ??) openssl 1.0.2 e instalé 1.0.1 también con homebrew. Dotnet new / restore / run luego funcionó bien.

Instalar openssl 101:
brew install homebrew / versiones / openssl101
Vinculación:
brew link --force homebrew / versiones / openssl101

usuario3488820
fuente
2
Esto lo hizo! Parece que 1.0.2 no quería vincular. La siguiente pregunta es por qué .netcore sugiere algo que no se recomienda en la comunidad.
daviddeath
1.0.2 funcionó para mí en otra Mac hace unos días, por lo que tal vez haya un cambio reciente en brew o openssl. De todos modos, para dot net core, estamos bien :)
user3488820
1
El enlace de github publicado por @bartonjs muestra que brew se actualizó hace solo unos días. Mirando el commit, el cambio es `if HOMEBREW_PREFIX.to_s ==" / usr / local "&& keg.name ==" openssl "`, así que supongo que la versión 1.0.1 usa un HOMEBREW_PREFIX diferente.
daviddeath
11
no funcionó para mí, todavía da errorRefusing 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
66
Esta respuesta ya no es correcto dado el cambio realizado por los desarrolladores de homebrew en github.com/Homebrew/brew/pull/612
Joshka
1

Tuve el mismo problema al intentar instalar la versión más nueva de ruby ​​2.6.5 https://github.com/kelaberetiv/TagUI/issues/86 me ayuda a resolver el problema. Esto si para macOS catalina Versión 10.15.1

Básicamente, hice update and upgradehomebrew e instalé openssl e instalé ruby.

brew update && brew upgrade
brew install openssl

Luego crea estos 2 enlaces 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/

luego instaló ruby ​​2.6.5

gsumk
fuente
0

para mí esto es lo que funcionó ...

Edité el ./bash_profile y agregué el siguiente comando

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

desarrollador
fuente
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 mi

y creo que puede resolver todos los problemas como Failed to connect to raw.githubusercontent.com port 443: Connection refused

John Jim
fuente