Es ist möglich, dass mehrere Versionen von OpenSSL auf Ihrem System installiert sind. Diese beiden Tests sagen Ihnen, welche Version mit Ihrem Ruby verknüpft werden würde, wenn Sie einen Build erstellen würden und welche Version tatsächlich in dem Ruby verlinkt ist, den Sie gerade verwenden.
Nehmen wir als Beispiel an, dass Sie immer noch Ruby 1.9.3 verwenden und es letztes Jahr installiert/kompiliert haben. Es wäre mit der Version von OpenSSL verknüpft gewesen, die Sie zu der Zeit installiert hatten. In der Zwischenzeit haben Sie Ihre Version von OpenSSL (z. B. mit Homebrew) als Reaktion auf das Heartbleed-Problem aktualisiert.
Wenn Sie den ersten Test ausgeführt haben, erhalten Sie OpenSSL 1.0.1g, die aktuelle Version, die Sie gerade aktualisiert haben.
Wenn Sie den zweiten Test ausführen, würde es zeigen, dass Ihre Kopie von Ruby wahrscheinlich immer noch mit der älteren, anfälligen Kopie von OpenSSL verknüpft ist.
Als Beispiel, ich Ausgabe von meinem eigenen System verwenden werden (Mac OSX 10.9):
Ergebnisse auf dem System Rubin (2.0.0):
[~] $ ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil ["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'`
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/openssl/ssl.rb:10 1: warning: assigned but unused variable - id
OpenSSL 0.9.8y 5 Feb 2013
[~] $ ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'
OpenSSL 0.9.8y 5 Feb 2013
Ergebnisse ruby 2.1.1p76 (von rbenv verwaltet, konnte aber RVM oder andere sein):
[~] $ ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]
OpenSSL 1.0.1g 7 Apr 2014
[~] $ ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'
OpenSSL 1.0.1g 7 Apr 2014
Wie Sie das System Rubin sehen i s verbunden mit der OpenSSL
im Lieferumfang von OS X, und noch nicht von Apple gepatcht. Ruby 2.1.1 habe ich nach der Verwendung von Homebrew
neu erstellt, um meine Installation von OpenSSL
zu aktualisieren.
[~] $ brew list openssl
/usr/local/Cellar/openssl/1.0.1g/bin/openssl
/usr/local/Cellar/openssl/1.0.1g/bin/c_rehash
/usr/local/Cellar/openssl/1.0.1g/include/openssl/ (75 files)
/usr/local/Cellar/openssl/1.0.1g/lib/libcrypto.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.1g/lib/libssl.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.1g/lib/engines/ (12 files)
/usr/local/Cellar/openssl/1.0.1g/lib/pkgconfig/ (3 files)
/usr/local/Cellar/openssl/1.0.1g/lib/ (4 other files)
/usr/local/Cellar/openssl/1.0.1g/share/man/ (1126 files)
Zuerst stellen Sie sicher, dass Sie die aktuellste OpenSSL haben, wenn Sie Homebrew verwenden, benutzen Sie einfach:
brew upgrade openssl
.
Stellen Sie außerdem sicher, dass die älteren Versionen von OpenSSL mit brew cleanup openssl
ich das System Ruby beste Patchen ist nicht empfehlenswert zu entfernen, um eine Ruby-Version-Manager zu verwenden, wie rbenv oder RVM.Nachdem Sie Ihr SSL aktualisiert haben, entfernen Sie die Ruby-Versionen, die Sie verwenden, und erstellen Sie sie neu, indem Sie die normalen Build-/Installationsanweisungen für Ihren Versionsmanager befolgen.
Ich vermute, dass man OpenSSL entweder in die Ruby-Binärdatei kompilieren oder es zur Laufzeit auf die Systembibliothek zugreifen kann? Wenn das korrekt ist, woher weiß ich, wie eine bestimmte Ruby-Binärdatei OpenSSL verwendet? –