我有一个RSA公钥模数和指数字符串。我想在Ruby on Rails中使用它们创建一个OpenSSL::PKey::RSA。我试了三种不同的方法,我觉得我的记忆有些混乱,但是,我不能发现它。你知道吗?
版本号:
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [arm64-darwin22]
Rails 7.0.8
OpenSSL 3.1.2 1 Aug 2023
首次尝试
我这样做:
modulus = k['n']
exponent= k['e']
rsa = OpenSSL::PKey::RSA.new
rsa.set_key_rsa(k['n'], k['e'], 2)
我得到错误:
undefined method `set_key_rsa' for #<OpenSSL::PKey::RSA:0x000000010a1468a0 oid=rsaEncryption>
第二次尝试
我这样做:
modulus = k['n']
exponent= k['e']
rsa = OpenSSL::PKey::RSA.new
rsa.set_key(k['n'], k['e'], 2) # <---- used set_key
我收到错误:
rsa#set_key= is incompatible with OpenSSL 3.0
三
rsa = OpenSSL::PKey::RSA.new
rsa.n = OpenSSL::BN.new(Base64.urlsafe_decode64(k['n']), 2)
rsa.e = OpenSSL::BN.new(Base64.urlsafe_decode64(k['e']), 2)
我收到错误:
undefined method `n=' for #<OpenSSL::PKey::RSA:0x000000010ab56e08 oid=rsaEncryption>
啊,怎么回事?
1条答案
按热度按时间new9mtju1#
跳到解决方案的一部分,如果你不感兴趣,我正在尝试。
上下文:
我正在创建一个LTI工具,它有一个URL来获取密钥集,用于验证从LTI平台发送的JWT令牌。密钥集中的密钥具有模数(
n
)和指数(e
)值,以创建将解码JWT的RSA密钥。有两个问题
n
和e
方法不再起作用。n
)和指数(e
)值,以便在某些方法中使用解决方案:
我发现第一个Gist在 * OpenSSL v3之前 * 工作,但是它在OpenSSL v3中不工作。值得庆幸的是,这位伟大的家伙在评论中分享了如何在OpenSSL v3中实现这一点。查看第二个链接以获得Gist或下面的代码以获得解决方案。
在第二个链接中分享这里提供的Gist代码(以防万一):
希望这对你有帮助!