gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:58:08 26 4
gpt4 key购买 nike

如何创建使用以下公钥字符串初始化的 OpenSSL::PKey 对象?最终目标是使用对象通过 ruby-jwt 解码 JWT token 。

我试过以下方法:

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, true, { algorithm: "RS256", verify_iat: true })

当然,这只有在使用该证书的相应私钥对 token 进行签名时才有效。 IE。对于这样创建的 token :

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'

关于ruby - 如何使用公钥字符串创建 OpenSSL::PKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com