OpenSSL::HMACError:EVP_PKEY_new_mac_key:rails应用程序中的malloc故障



我正在开发一个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以使用opensssl@3版本,因为该版本与ruby 3兼容,但没有成功。

如果有人知道如何解决这个问题,我将不胜感激。

  • MAC OS Monterrey 12.6.1
  • Ruby 3.1.1
  • Rails 7

我认为这是OpenSSL 1.1和现在的OpenSSL 3(Ruby 3已经迁移到OpenSSL 3(之间的兼容性问题。像ruby-jwt这样的宝石正在解决这些兼容性问题: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中得到了修复,但仅在大约两周前,所以到目前为止还没有新的版本。

--在我们等待修复的时候

同时,如果你不直接需要OpenSSL 3,你可以使用OpenSSL 1.1 重建你的ruby

假设你已经通过自制软件安装了openssl@1.1,并使用asdf来管理你的Ruby版本(尽管这个env选项适用于任何使用Ruby构建的东西(:

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

我也遇到了同样的问题。这是两者之间的兼容性问题OpenSSL@1.1和OpenSSL@3.0.7在ruby 3.1.0及以上版本上。所以我通过以下步骤修复:

  1. 卸载ruby 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

现在,将第1行更改为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文件中的行。使用中的以下安装说明安装ruby 3.1.1版https://github.com/rbenv/rbenv#installing-ruby版本。用途:

rbenv install 3.1.1 --verbose

你会看到openssl@1.1正在安装,并将解决此问题。

更多信息,请关注我的媒体文章:ruby 上的openssl hmaceror

最新更新