Standardeinstellungen von ext/openssl geändert

Gepostet von usa am 27. Okt 2014

Wir haben die Standardeinstellungen von ext/openssl in Ruby 2.1.4, Ruby 2.0.0-p594 und Ruby 1.9.3-p550 geändert. Mit dieser Änderung sind unsichere SSL/TLS-Optionen standardmäßig deaktiviert. Durch diese Änderung besteht jedoch die Möglichkeit von Problemen bei der SSL-Verbindung.

Details

OpenSSL implementiert immer noch Protokolle und Verschlüsselungen, die heute aus historischen Gründen als unsicher gelten. Wie die POODLE-Schwachstelle (CVE-2014-3566) zeigt, wenn Sie OpenSSL weiterhin mit solchen unsicheren Funktionen verwenden, können Sie die Sicherheit der Netzwerkkommunikation möglicherweise nicht gewährleisten. Daher haben wir uns basierend auf der Diskussion in Bug #9424 entschieden, solche unsicheren SSL/TLS-Optionen standardmäßig zu deaktivieren. Wenn Sie diese Änderung rückgängig machen müssen (siehe unten), wenden Sie den umgekehrten Patch an, um sie aufzuheben.

2.1.4
r48098
2.0.0-p594
r48110
1.9.3-p550
r48121

Wenn Sie diese Änderung jedoch rückgängig machen, besteht das Risiko, dass Sie die Sicherheit der Netzwerkkommunikation nicht gewährleisten können. Sie sollten die Auswirkungen dieser Änderung verstehen, bevor Sie sie entfernen.

Bundled libraries of Ruby

Diese Änderung wirkt sich auf net/http, net/imap und net/pop aus. Da DRb und WEBrick die Einstellung separat empfangen, hat diese Änderung keine Auswirkungen auf sie.

Skripte, die ext/openssl direkt verwenden

Diese Änderung wird reflektiert, wenn ein OpenSSL::SSL::SSLContext -Objekt instanziiert und die Instanzmethode set_params aufgerufen wird.

Insbesondere Code wie

ctx = OpenSSL::SSL::SSLContext.new
ctx.set_params  # if you want to change some options, such as cert store, verify mode and so on, you can pass such parameters within a hash
ssl = OpenSSL::SSL::SSLSocket.new(socket, ctx)

Wenn ext/openssl auf der Client-Seite verwendet wird, gehen wir davon aus, dass diese Änderung wahrscheinlich keine Probleme verursachen wird. Wenn Sie ext/openssl jedoch auf der Server-Seite verwenden und diese Änderung übernehmen, können einige alte Clients (Internet Explorer 6 unter Windows XP, Browser in alten Mobiltelefonen usw.) möglicherweise keine Verbindung zum Server herstellen.

Es liegt in Ihrer Entscheidung, ob Sie diese Änderung aktivieren möchten oder nicht. Berücksichtigen Sie die Kompromisse.

Workaround

Wenn Sie Ruby nicht aktualisieren können, aber unsichere SSL/TLS-Optionen bewältigen müssen, wenden Sie den folgenden Monkey-Patch an

module OpenSSL
  module SSL
    class SSLContext
      remove_const(:DEFAULT_PARAMS)
      DEFAULT_PARAMS = {
        :ssl_version => "SSLv23",
        :verify_mode => OpenSSL::SSL::VERIFY_PEER,
        :ciphers => %w{
          ECDHE-ECDSA-AES128-GCM-SHA256
          ECDHE-RSA-AES128-GCM-SHA256
          ECDHE-ECDSA-AES256-GCM-SHA384
          ECDHE-RSA-AES256-GCM-SHA384
          DHE-RSA-AES128-GCM-SHA256
          DHE-DSS-AES128-GCM-SHA256
          DHE-RSA-AES256-GCM-SHA384
          DHE-DSS-AES256-GCM-SHA384
          ECDHE-ECDSA-AES128-SHA256
          ECDHE-RSA-AES128-SHA256
          ECDHE-ECDSA-AES128-SHA
          ECDHE-RSA-AES128-SHA
          ECDHE-ECDSA-AES256-SHA384
          ECDHE-RSA-AES256-SHA384
          ECDHE-ECDSA-AES256-SHA
          ECDHE-RSA-AES256-SHA
          DHE-RSA-AES128-SHA256
          DHE-RSA-AES256-SHA256
          DHE-RSA-AES128-SHA
          DHE-RSA-AES256-SHA
          DHE-DSS-AES128-SHA256
          DHE-DSS-AES256-SHA256
          DHE-DSS-AES128-SHA
          DHE-DSS-AES256-SHA
          AES128-GCM-SHA256
          AES256-GCM-SHA384
          AES128-SHA256
          AES256-SHA256
          AES128-SHA
          AES256-SHA
          ECDHE-ECDSA-RC4-SHA
          ECDHE-RSA-RC4-SHA
          RC4-SHA
        }.join(":"),
        :options => -> {
          opts = OpenSSL::SSL::OP_ALL
          opts &= ~OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS if defined?(OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS)
          opts |= OpenSSL::SSL::OP_NO_COMPRESSION if defined?(OpenSSL::SSL::OP_NO_COMPRESSION)
          opts |= OpenSSL::SSL::OP_NO_SSLv2 if defined?(OpenSSL::SSL::OP_NO_SSLv2)
          opts |= OpenSSL::SSL::OP_NO_SSLv3 if defined?(OpenSSL::SSL::OP_NO_SSLv3)
          opts
        }.call
      }
    end
  end
end

Betroffene Versionen dieser Änderung

  • Ruby 1.9.3 patchlevel 550 und höher
  • Ruby 2.0.0 patchlevel 594 und höher
  • Ruby 2.1.4 und höher
  • Revision 48097 und höher des Trunks

Verlauf

  • Ursprünglich veröffentlicht am 2014-10-27 12:00:00 (UTC)

Aktuelle Nachrichten

Ruby 4.0.0 veröffentlicht

Wir freuen uns, die Veröffentlichung von Ruby 4.0.0 bekannt zu geben. Ruby 4.0 führt „Ruby Box“ und „ZJIT“ ein und bringt viele Verbesserungen mit sich.

Veröffentlicht von naruse am 25. Dez 2025

Ein neuer Look für Rubys Dokumentation

Nach dem Redesign von ruby-lang.org gibt es weitere Neuigkeiten zur Feier des 30-jährigen Jubiläums von Ruby: docs.ruby-lang.org hat ein komplett neues Erscheinungsbild mit Aliki – dem neuen Standard-Theme von RDoc.

Veröffentlicht von Stan Lo am 23. Dez 2025

Neues Website-Erscheinungsbild

Wir freuen uns, ein umfassendes Redesign unserer Website bekannt zu geben. Das Design für dieses Update wurde von Taeko Akatsuka erstellt.

Veröffentlicht von Hiroshi SHIBATA am 22. Dez 2025

Ruby 4.0.0 preview3 veröffentlicht

Wir freuen uns, die Veröffentlichung von Ruby 4.0.0-preview3 bekannt zu geben. Ruby 4.0 führt Ruby::Box und „ZJIT“ ein und bringt viele Verbesserungen mit sich.

Veröffentlicht von naruse am 18. Dez 2025

Weitere Neuigkeiten...