22

Heartbleed バグに続いて、ruby-lang.org のこの投稿では、脆弱性とアップグレードを確認する方法について説明しています。

これには次のアドバイスが含まれます。


Ruby にリンクする OpenSSL ライブラリのバージョンを確認するには、次を使用します。

ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'

現在 Ruby にインストールされている OpenSSL のバージョンを確認するには、次のコマンドを使用します。

ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'

これら 2 つのチェックの違いは何ですか? また、どちらかのコマンドから不適切なバージョンが返された場合に推奨されるアクションは何ですか?

4

2 に答える 2

20

他の場所でいくつか質問した後、私の現在の理解は次のとおりです。

  • OpenSSL が Ruby とともにコンパイルされることはありません。Ruby は、コンパイル時に OpenSSL を検索する場所を単純に通知されます。
  • ruby -r rbconfig -e 'puts RbConfig::CONFIG["configure_args"]'RubyがOpenSSLを含むさまざまな実行可能ファイルを探す場所を教えてくれるはずです
  • 重要なのは、その場所にある OpenSSL のコピーが最新であることです。そこに cd し、使用./openssl versionして調べます。
  • ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'openssl version実際には、Ruby がバージョン番号を報告するために使用している OpenSSL のコピーを要求するため、直接実行した場合と同じ応答が返されるはずです。
  • OpenSSL::OPENSSL_VERSION古い可能性があります。コンパイル時に見つかったバージョンを報告します。
于 2014-04-18T19:48:19.487 に答える