You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails应用执行JWT.encode触发OpenSSL::HMACError内存分配失败求助

Rails应用JWT.encode抛出OpenSSL::HMACError的解决思路

问题描述

执行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
  • 切换至Ruby 3兼容的OpenSSL@3版本
    问题仍未解决。

环境信息

  • MAC OS Monterrey 12.6.1
  • Ruby 3.1.1
  • Rails 7

可能的解决方向

  1. 检查JWT密钥合法性
    确认签名用的密钥格式、长度符合算法要求。比如HMAC类算法(如HS256)要求密钥非空,HS256至少需要32字节(256位)的密钥,若密钥过短、为空或格式错误,可能触发底层OpenSSL的内存分配异常。

  2. 验证Ruby与OpenSSL绑定一致性
    运行ruby -r openssl -e 'puts OpenSSL::OPENSSL_VERSION'确认Ruby实际调用的OpenSSL版本,对比系统安装的版本是否匹配。若存在差异,重新通过rbenv编译Ruby并指定正确的OpenSSL路径:

    RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)" rbenv install 3.1.1
    
  3. 排查测试用例特殊场景
    针对部分测试失败的情况,检查失败用例的JWT生成逻辑:是否存在循环批量生成JWT、动态生成异常密钥、并发测试导致资源竞争等场景。单独运行失败用例,添加日志输出密钥内容,确认输入参数是否异常。

  4. 更新JWT gem版本
    旧版jwt gem可能存在与Ruby 3.1/OpenSSL 3的兼容bug,尝试更新至最新稳定版:

    bundle update jwt
    
  5. 检查系统资源与OpenSSL配置
    错误提示malloc失败,可能是测试运行时系统内存不足,或是OpenSSL配置存在限制。关闭其他高内存占用应用后重新运行测试,也可检查OpenSSL配置文件(如/usr/local/etc/openssl@3/openssl.cnf)是否有异常设置。

内容的提问来源于stack exchange,提问作者Denis Omerovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:50:31