Homebrew se niega a vincular OpenSSL


Estoy en: OSX 10.11.6, Homebrew versión 0.9.9 m OpenSSL 0.9.8 zg 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 enlazar openssl continúo encontrándome con este error de enlace:

> 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 de compilador no tiene sentido para mí, ya que no estoy compilando estas bibliotecas de las que dependo.

EDIT 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/
Author: jww, 2016-07-30

11 answers

Como sugiere la actualización a la otra respuesta, la solución alternativa de instalar el antiguo openssl101 brew ya no funcionará. Para una solución inmediata, consulte este comentario en dotnet/cli#3964.

La parte más relevante de la cuestión copiada aquí:

Miré en la otra opción que se sugirió para establecer 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 realice el mismo comando para 1.0.1 también:

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, parece que Microsoft son conscientes del problema y tienen tanto a) un plan algo inmediato para mitigar, así como b) una solución a largo plazo (probaby liando OpenSSL con dotnet).

Otra cosa a tener en cuenta: /usr/local/opt/openssl/lib es donde el brebaje está vinculado 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 enlaza en una ubicación diferente, entonces esa ruta es la que debe usar como ruta de acceso.

Una vez que haya actualizado el rpath del Sistema.Seguridad.Criptografía.Nativo.dylib libray, necesitará reiniciar su sesión interactiva (es decir, cerrar su consola e iniciar otra).

 55
Author: Ben Collins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-21 16:31:59

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 pudiera pasar tiempo correctamente instalando Openssl de nuevo desde cero. Según 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. Por favor, lee el enlace en el comentario de @bouke antes de intentar esto.

 45
Author: rorykoehler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-20 08:32:55

Ninguna de estas soluciones funcionó para mí 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.

Así que, tomé el camino alto y comencé de nuevo...


Instalar manualmente y enlace simbólico

cd /usr/local/src  
  • Si usted está recibiendo "Ningún 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 enlaza el openssl de OS X a tu 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é usando su nuevo openssl:

openssl version -a
 42
Author: mcgwier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-02 20:27:19

Simplemente ejecuta brew info openssl y lee la información donde dice:

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

 34
Author: Alex Maiburg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-22 07:50:02

Solo para dejar una nota sobre esto, había migrado mi mac y desvinculó todas mis instalaciones de homebrew, incluida esta. Esto se rompió gem install, que es cómo empecé a tratar de reparar esto.

Probé un millón de soluciones (estoy en OSX Sierra - 10.12.5) y la solución terminó siendo cómicamente simple:

brew reinstall ruby
brew reinstall openssl
 9
Author: tobybot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-26 20:56:37

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

touch ~/.bash_profile; open ~/.bash_profile

Dentro del archivo se agregó 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
 8
Author: Jorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-04 11:03:41

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 que alcancé: (sin enlace de fuerza 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 cuestión directamente. Dejo el one-liner en caso de que alguien use pip y requiera el openssl lib.

Nota: las rutas /usr/local/opt/openssl/lib se obtienen por brew info openssl

 8
Author: Pili Hu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-24 13:18:40

Esto funcionó para mí:

 brew install openssl
 cd /usr/local/include 
 ln -s ../opt/openssl/include/openssl .
 6
Author: edwardthesecond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-23 05:30:04

La solución anterior de edwardel segundo funcionó para mí también 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
    
  • Añadiendo openssl a la ruta como sugiere homebrew

    brew info openssl
    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    
 4
Author: Lili,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-13 10:08:48

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

Hoy tuve el mismo problema. He desinstalado (sin elaborar??) openssl 1.0.2 e instalado 1.0.1 también con homebrew. Dotnet new / restore / run funcionó bien.

Instalar openssl 101:
brew instalar homebrew / versiones / openssl101
Enlaces:
brew link force force homebrew/versions / openssl101

 1
Author: user3488820,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-01 03:21:25

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

Edité el ./ bash_profile y añadido debajo del comando

Export PATH = "/usr/local/opt/openssl / bin: PATH PATH "

 0
Author: sanviri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-12 08:14:26