如何在Ruby(或Rails)中将OpenSSH公钥转换为OpenSSL



我在数据库中有公钥,需要它们来验证JWT令牌。 密钥采用 OpenSSH 公钥格式,因此我需要将它们转换为 PEM 格式,如下所示:

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAx9jNrkPwjH12qVhmpKs/MLfvsYy5uob+jx68Mdsv5tmZG5HVq6nm
sYKkcDdwLseShWREIOmB0lC/bhaaihuAvs4ZZcDRKnrq2FX+WQz9/mHScr1kQTgB
adRdQWzG3KXeOJJiKSBfNHVn3Iixdba/IX5rYhARbDMqPQfwz08gKHbFLuNogNN0
hm5yTFQU1z0bhR87dHFJgfwQSVloeNKTsXleoGZqGBNbjMdF0HOEvQaWzenQHJde
dTaF39Ok6q0k4QsSHyuzmoXy30O3oe31D7mu4QQOk/Lj61zVZrR25YvGYpn0ym+d
cWxKFyeVX/McstRhu7wD1iu0kj74A2VhrwIDAQAB
-----END RSA PUBLIC KEY-----

有没有办法用Ruby(而不是openssl(将OpenSSH公钥转换为OpenSSL公钥?

我已经找到了这个: https://gist.github.com/tombh/f66de84fd3a63e670ad9 但不幸的是,它在最近的 Ruby 版本中抛出了一个错误。 请参阅我也得到的最后一条评论:

undefined method `e=' for #<OpenSSL::PKey::RSA:0x00007ff593ba87c8>

我在 Ruby 2.4.9 中得到这个

我还找到了 SSHKey 宝石,但这似乎不提供该功能。

通过使用 gem:

gem 'net-ssh'

您可以执行以下操作:

converted_key = Net::SSH::KeyFactory.load_public_key('~/.ssh/id_rsa.pub')

或者如果从内存中:

converted_key = Net::SSH::KeyFactory.load_data_public_key(public_key)

最新更新