Możliwe jest zainstalowanie w systemie wielu wersji OpenSSL. Te dwa testy podpowiedzą, która wersja byłaby powiązana z twoją Ruby, gdybyś zrobił kompilację, a także która wersja jest faktycznie połączona z Ruby, z której aktualnie korzystasz.
Jako przykład załóżmy, że nadal używasz Ruby 1.9.3 i zainstalowałeś/skompilowałeś go w zeszłym roku. Byłby powiązany z wersją OpenSSL zainstalowaną w tym czasie. W międzyczasie zaktualizowałeś swoją wersję OpenSSL (używając na przykład Homebrew), w odpowiedzi na problem Heartbleed.
Po pierwszym teście otrzymasz OpenSSL 1.0.1g, aktualną wersję, która właśnie została uaktualniona.
Jeśli przeprowadziłeś drugi test, okazałoby się, że twoja kopia Rubiego jest prawdopodobnie nadal powiązana ze starszą, wrażliwą kopią OpenSSL.
Tytułem przykładu użyję wyjście z własnego systemu (Mac OSX 10.9):
wyników na systemie Ruby (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
wyników na Ruby 2.1.1p76 (zarządzany przez rbenv, ale może być RVM lub inny):
[~] $ 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
Jak widać rubin System I s są połączone z OpenSSL
dołączonymi do OS X, a nie są jeszcze załatane przez Apple. Ruby 2.1.1 Zostałem ponownie zbudowany po użyciu Homebrew
w celu aktualizacji mojej instalacji OpenSSL
.
[~] $ 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)
Najpierw upewnij się, że masz najnowszą OpenSSL, jeśli używasz Homebrew, wystarczy użyć:
brew upgrade openssl
.
Ponadto, upewnij się, aby usunąć starsze wersje OpenSSL z brew cleanup openssl
Nie polecam łatanie systemu rubin, najlepiej użyć menedżera wersji Ruby, jak rbenv lub RVM.Po zaktualizowaniu protokołu SSL usuń i przebuduj wersje Rubiego, których używasz, postępując zgodnie z normalnymi instrukcjami dotyczącymi instalacji/instalacji menedżera wersji.
Zgaduję, że można skompilować OpenSSL do pliku binarnego Ruby lub pozwolić mu dotrzeć do biblioteki systemowej w czasie wykonywania? Jeśli to prawda, skąd mam wiedzieć, w jaki sposób konkretny plik binarny Ruby używa OpenSSL? –