go - 如何生成正确的 RSA key 来签署 JWT?

标签 go openssl jwt asn.1

我正在使用 this example ,但是它有点过时了。因此,例如 SignedString(key) ,我猜,收到 *rsa.PublicKey而不是 []byte如果是 RS256 签名方法。我使用

生成了我的私钥
openssl genrsa -out key.rsa 1024

现在尝试解析它:

package main

import (
    "fmt"
    "github.com/dgrijalva/jwt-go"
)

func main() {
    pem := []byte(`-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCycI9LZT8qM/zCGH0CNxAi7gy7w1YjqZN1N8yFfbmv9toVC82S
bZDv8NVYVlFNhUbtUFg77TYhHmyPpr4hKqvPrVc0rqVFe4ggQYdXovDgLZhO1MxB
i4vw9tLRlAK8TYNFqaFiX6lFgRp8trd01GFhkBJMzZCMmBQFkcEgWqT6MQIDAQAB
AoGBAKSru5GYnfIUh+2XK8YfioSxqo6cdaHznGFQXS3UGMiKxjcl7VB0TI0hc8FR
5zXjCNF4k/S5tHpb2VO4TT3OYz55/JEOGAXvIMW2UYtL4TwR3+46TRJ95KKowq+c
3JndjmGjUbvWawtbNklkmgoEkLI8wYu9yss9293GBnff14ABAkEA1scxu0svrIZ1
R5YmpXOfrtGwsjbdowGNxZTedWlbJukBSNPSIpuUvkzF2PXlPBS80p5yxbYlp1gg
UhsfXWJwIQJBANSv7lEuHV0QnVVoYVtNijwEHIi7iG7xu7hDQ7bK/kwWV6wqnvfP
PZopZPDXCRlnxbubo0/RJz4LsaJflDJKiBECQC/3FFgrll4FOTPfiInypHq6QafL
MPwyYKL7eCLogH7UEoFdLNSlwjYtlxG4+JTOXMz8rc0RvJ7+w1kSzZJhZYECQHMU
DhqWnQSx7K89nw/L0LPQda/16Eg/O5bjrkvFYfrBTAa3uPPUijxTkW5Oq3m3kGGG
QML7JASKRz7YAFOFyEECQQCUBNONRYMMzzr4llGOcKISXJtewlOPTHGP++OiHWMB
rPzZDyi5ONNgySF8t/QnJMTRpRQ5axi0UhojL/OzUt/w
-----END RSA PRIVATE KEY-----`)

    key, err := jwt.ParseRSAPublicKeyFromPEM(pem)
    fmt.Println(key, err)
}

但我得到 asn1: structure error: tags don't match (16 vs {class:0 tag:2 length:1 isCompound:false}) {optional:false explicit:false application:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} tbsCertificate @2作为回应。

我的 key 生成命令有什么问题吗?我应该阅读什么才能调试它? asn1 与它有什么关系? Key 有一些特殊的语法?

最佳答案

您正在传递 RSA PRIVATE KEY 但调用 jwt.ParseRSAPublicKeyFromPEM。您应该改为调用 jwt.ParseRSAPrivateKeyFromPEM

关于go - 如何生成正确的 RSA key 来签署 JWT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47693365/

相关文章:

go - 获取登录用户信息以供显示

c++ - C++ 中的 Winsock2 + OpenSSL : How can I catch their exceptions?

ssl - phpmailer、requre() 和 include_path 合并

jwt - 找不到模块 : Error: Can't resolve 'crypto' in '/opt/lampp/htdocs/angular-testing-app/node_modules/jwa'

c# - 如何在特定的 jwt 上下文下发出 post 请求 webclient

laravel - 如何在 Laravel 5.7 中生成 JWT 刷新 token

go - 无法修改数组内的结构?

testing - 如何测试 panic ?

pointers - 如何返回自定义错误而不导致 nil 值出现问题

google-chrome - X509 主题备用名称 (subjectAltName) IP 地址字段