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/bin
als 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 openssl
gibt mir diese Ausgabe:/usr/local/bin/openssl
openssl version
gibt 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 vi
Editor 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?
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 ).
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.dylibAnstatt 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 openssl
gibt mir diese Ausgabe:/usr/local/bin/openssl
openssl version
gibt mir diese Ausgabe:OpenSSL 0.9.8zh 14 Jan 2016
Fügen Sie der openssl
ausfü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.
mmmmmm
Tuhina Singh
openssl version
zeigte 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.