【问题标题】:OpenSSL::HMACError: EVP_PKEY_new_mac_key: malloc failure in rails appOpenSSL::HMACError: EVP_PKEY_new_mac_key: Rails 应用程序中的 malloc 失败
【发布时间】:2022-12-11 03:29:53
【问题描述】:

我正在开发一个 Rails 应用程序,我遇到了这个奇怪的错误,我不知道如何修复它。我的一些测试在运行 JWT.encode 时失败了,错误消息是:

/Users/chille/.rbenv/versions/3.1.1/lib/ruby/3.1.0/openssl/hmac.rb:36:in `initialize': EVP_PKEY_new_mac_key: malloc failure (OpenSSL::HMACError)

我重新安装了 ruby​​ 3.1.1 并安装了 OpenSSL 以使用 openssl@3 版本,因为该版本与 ruby​​ 3 兼容但没有成功。

如果有人对如何解决此问题有任何线索,我将不胜感激。

  • MAC OS Monterrey 12.6.1
  • Ruby 3.1.1
  • Rails 7

【问题讨论】:

  • 我的问题是在 ubuntu 22 上使用 EC2 实例。在 Ubuntu 20 上使用实例有 OpenSSL 1.1 而不是导致错误的 v3。 OpenSSL 1.1 也应该与 ruby​​ 3 兼容,因为它现在为我工作

标签: ruby-on-rails ruby openssl


【解决方案1】:

我相信这是 OpenSSL 1.1 和现在的 OpenSSL 3(Ruby 3 已移至其中)之间的兼容性问题。像 ruby-jwt 这样的 Gem 正在解决这些兼容性问题: https://github.com/jwt/ruby-jwt/issues/495

据推测,JWT 的版本 v2.5.0 添加了对 OpenSSL >= 3.0 的支持,JWT 的全新安装(如果您不在该版本上,则升级)应该如果他们正确支持 OpenSSL 3.0,请解决此问题。

- 编辑 -

更新:实际上看起来他们承认这是https://github.com/jwt/ruby-jwt/issues/526 中的一个错误,此后它已在 Ruby 的 OpenSSL 和 JWT 中修复,但仅在大约 2 周前,因此到目前为止还没有为它削减新版本。

-- 在我们等待修复时...... --

同时,如果您不直接需要 OpenSSL 3,您可以使用 OpenSSL 1.1 重建您的红宝石

假设你已经通过自制软件安装了 openssl@1.1 并使用 asdf 来管理你的 Ruby 版本(虽然这个 env 选项适用于任何使用 ruby​​-build 的东西):

RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)" asdf install ruby 3.1.1

【讨论】:

    【解决方案2】:

    我有同样的问题,所以我通过以下步骤修复:

    1. 卸载红宝石 3​​.1.1
    2. 转到.rbenv/plugins/ruby-build/share/ruby-build/3.1.1

      在这个文件中,你有安装包 openssl@3.0.7 和 ruby​​@3.1.1

      install_package "openssl-3.0.7" "https://www.openssl.org/source/openssl-3.0.7.tar.gz#83049d042a260e696f62406ac5c08bf706fd84383f945cf21bd61e9ed95c396e" openssl --if needs_openssl_102_300
      install_package "ruby-3.1.1" "https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.1.tar.gz#fe6e4782de97443978ddba8ba4be38d222aa24dc3e3f02a6a8e7701c0eeb619d" ldflags_dirs enable_shared standard verify_openssl
      

      现在,将第一行更改为 openssl@1.1 包:

      install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" openssl --if needs_openssl_101_111
      

      之后,换行里面.rbenv/plugins/ruby-build/share/ruby-build/3.1.1文件。安装红宝石版本 3.1.1使用来自 https://github.com/rbenv/rbenv#installing-ruby-versions 的安装说明。

      更多内容,关注我的中贴:openssl-hmacerror-on-ruby

    【讨论】:

      猜你喜欢
      • 2014-11-15
      • 1970-01-01
      • 2016-05-27
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 2018-03-07
      相关资源
      最近更新 更多