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

Rails 7中如何将RSA 2048密钥对存入环境凭证?

Rails凭证存储RSA密钥后JWE解密失败的原因与解决方法

问题原因

你从Rails多环境凭证中取出的是纯字符串格式的RSA密钥,但ruby-jwe的JWE.decrypt方法要求传入的是OpenSSL::PKey::RSA实例对象,而非普通字符串。

控制台测试时你应该是直接通过OpenSSL::PKey::RSA.new加载了密钥对象,所以能正常加密解密;但将密钥字符串存入凭证后,取出的内容只是原始文本,不具备RSA密钥对象的方法(比如private_decrypt),因此触发错误。

解决方法

取出密钥字符串后,需要手动将其转换为OpenSSL::PKey::RSA对象:

# 从凭证取出密钥字符串
private_key_str = Rails.application.credentials.rsa_key
# 转换为RSA密钥对象
private_key = OpenSSL::PKey::RSA.new(private_key_str)
# 正常调用解密方法
JWE.decrypt(your_encrypted_data, private_key)

如果你的RSA密钥设置了密码,转换时需要传入密码参数:

private_key = OpenSSL::PKey::RSA.new(private_key_str, "your_key_password")

优化建议

可以把密钥转换逻辑封装成全局辅助方法,避免重复代码。比如在config/initializers/jwe.rb中添加:

def jwe_private_key
  @jwe_private_key ||= OpenSSL::PKey::RSA.new(Rails.application.credentials.rsa_key)
end

之后在代码中直接调用jwe_private_key即可获取可用的RSA密钥对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:50:38