OpenSSL wird nicht mit Homebrew auf El Capitan 10.11.6 verknüpft

Ich versuche, in C unter OS X (El Capitan) zu codieren und muss OpenSSL verwenden. Das Betriebssystem wird mit Version 0.9.8zh 14 Jan 2016.

Ich habe Homebrew verwendet, um openssl zu aktualisieren und zu installieren (erhielt Version 1.0.2h), kann es aber nicht richtig verknüpfen, um es zu verwenden. Folgendes wurde getan:

brew update

brew install openssl

brew link --force openssl

was mir einen Fehler gab

Warning: Refusing to link: openssl.

Mein Pfad verweist /usr/local/binals erster.

Habe diesen Befehl ausgeführt:ln -s /usr/local/Cellar/openssl/1.0.2j/include/openssl /usr/local/include/openssl

(diese Lösung hier gefunden: Openssl mit El Capitan u.a.)

bekam keine Fehlerausgabe, also ging ich davon aus, dass dies funktionierte. Aber..

which opensslgibt mir diese Ausgabe:/usr/local/bin/openssl

openssl versiongibt mir diese Ausgabe:OpenSSL 0.9.8zh 14 Jan 2016

Alles, was ich versuche, ist, einige CLI-Befehle auszuführen / C-Code zu schreiben, der im einfachen viEditor bearbeitet und mit kompiliert wurde gcc. Ich schließe openssl in Header-Dateien mit ein

 #include <openssl/sha.h>
#include <openssl/ripemd.h>

Außerdem war der Befehl, den ich auf der CLI ausführe, der mich zu diesem Pfad geführt hat, dieser (falls das hilft):

openssl dgst -sha256 -sign ec-priv.pem ex-message.txt >ex-signature.der.

Gibt mir einen Fehler:

EVP_SignFinal:wrong public key type.

Das Googeln hat mich dazu gebracht, die Ursache für eine alte OpenSSL-Version zu verstehen, die ich aktualisieren muss.

Irgendwelche Ideen, wie man hier vorgehen kann?

Haben Sie eine neue Shell eingegeben, nachdem Sie die Datei gelötet haben, aber bevor Sie was ausgeführt haben? Für die C-Kompilierung müssen wir die C-Compiler- und Linker-Befehlszeilen sehen
Danke @Markus. Das Öffnen einer neuen Shell und das Ausführen openssl versionzeigte mir die richtige Version. SO wurde es richtig verlinkt und ich habe einfach nicht die richtige Version gesehen, da ich alles in der alten Shell ausgeführt habe. Ich stelle dies hier als Antwort, da ich nicht kommentieren darf. Konnte keine andere Möglichkeit finden, Ihnen zu antworten. Wenn Sie dies als Antwort geben, werde ich es akzeptieren.

Antworten (2)

Sie müssen sicherstellen, dass Sie eine neue Shell öffnen, nachdem Sie den Link ausgeführt haben. (Ich habe meinen Medium-Artikel, den Sie für zukünftige Referenzen verlinkt haben, aktualisiert: Openssl with El Capitan ).

Dies ändert die ausführbare Datei, ändert aber nicht die Include- oder Link-Pfade

Von Brew, der sich weigert, openssl auf Stack Overflow und Issue 3964, .Net GitHub zu verknüpfen (ich glaube, es wurde zuerst mit .Net gemeldet):

Ich habe mir die andere Option angesehen, die zum Festlegen des rpath in der Bibliothek vorgeschlagen wurde. Ich denke, das Folgende ist eine bessere Lösung, die sich nur auf diese bestimmte Bibliothek auswirkt.

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 das Betriebssystem anzuweisen, immer die Homebrew-Version von SSL zu verwenden und möglicherweise etwas zu beschädigen, sagen wir dotnet, wie es die richtige Bibliothek findet.


which opensslgibt mir diese Ausgabe:/usr/local/bin/openssl

openssl versiongibt mir diese Ausgabe:OpenSSL 0.9.8zh 14 Jan 2016

Fügen Sie der opensslausführbaren Datei einen rpath hinzu. Das Build-System von OpenSSL stellt keinen rpath bereit. Zur Laufzeit verknüpft Ihre neue ausführbare Datei mit den alten Bibliotheken.