加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何使用公钥字符串创建OpenSSL :: PKey?

发布时间:2020-12-16 23:26:26 所属栏目:百科 来源:网络整理
导读:如何创建使用以下公钥字符串初始化的OpenSSL :: PKey对象?最终目标是使用该对象使用 ruby-jwt解码JWT令牌. 我尝试过以下方法: public_key = ""-----BEGIN CERTIFICATE-----n ...many characters... n-----END CERTIFICATE-----n" # I only have the pub
如何创建使用以下公钥字符串初始化的OpenSSL :: PKey对象?最终目标是使用该对象使用 ruby-jwt解码JWT令牌.

我尝试过以下方法:

public_key = ""-----BEGIN CERTIFICATE-----n ...many characters... n-----END CERTIFICATE-----n" # I only have the public key

OpenSSL::PKey.read(key) # Gives ArgumentError: Could not parse PKey: no start line
OpenSSL::PKey.read(key.gsub("CERTIFICATE","PUBLIC KEY")) # Gives ArgumentError: Could not parse PKey: ASN1 lib

最终目标是使用它解码JWT:

# example from docs
require 'jwt'

rsa_public => OpenSSL::PKey.read(File.read(File.join(CERT_PATH,'rsa-2048-public.pem')))
JWT.decode(token,rsa_public,true,{ algorithm: "RS256",verify_iat: true })

有关使用公钥字符串初始化OpenSSL :: PKey的任何想法吗?

解决方法

如评论中所述,您没有直接使用RSA公钥,而是使用包含公钥的RSA证书,并且很容易提取:
require 'openssl'
require 'jwt'

cert = "-----BEGIN CERTIFICATE-----n .... n-----END CERTIFICATE-----"
x509 = OpenSSL::X509::Certificate.new(cert)

payload = JWT.decode(token,x509.public_key,verify_iat: true })

当然,这仅在令牌使用该证书的相应私钥签名时才有效.即对于像这样创建的令牌:

payload = { data: 'test' }

priv = "-----BEGIN RSA PRIVATE KEY----- .....-----END RSA PRIVATE KEY-----"
rsa_private = OpenSSL::PKey::RSA.new(priv)
token = JWT.encode payload,rsa_private,'RS256'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读