Jwt 错误:EVP_PKEY_sign_init:此密钥类型不支持操作
使用Jwt 错误:EVP_PKEY_sign_init:此密钥类型不支持操作,jwt,Jwt,使用jsonwebtoken 8.2.0,以下代码使用RS256对有效负载进行签名: const jwt = require('jsonwebtoken'); const token = jwt.sign( //<<==sign throw error below { uid: this.id, //<<==payload }, key, //<<==RSA private key of 2048bit {
jsonwebtoken 8.2.0
,以下代码使用RS256对有效负载进行签名:
const jwt = require('jsonwebtoken');
const token = jwt.sign( //<<==sign throw error below
{
uid: this.id, //<<==payload
},
key, //<<==RSA private key of 2048bit
{
expiresIn: (parseInt(process.env.jwt_token_expire_days) * 24).toString() + 'h',
algorithm: 'RS256'
}
);
RSA私钥(2048bit)如下所示:
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAtBwLxqZEirr0uhtMTThmVDu3XKFVgE+qQqQ6oi6P/cvnTBHc
zlnmgqYNpufUbnIgGSZ9RzL29gVq6o/Dc4Sf1C0sEdkU1A5weFEegpeQTfEU1XI9
.....
0q6yoDXSl7JC+y5BWaz75xFX+tb4hKVTD27BvNDYRuvRsFeiKnn7vDmVS1/CoSnd
bv9Y1DrudRU2PkgAUPqbxDzuCNY9VW8IAP/DCw0oJBJP+wzdH9uvhg==
-----END RSA PRIVATE KEY-----
这里出了什么问题?这可能是因为您的RSA密钥实际上是一个RSA-PSS密钥,对使用的填充、用法、算法、摘要或它们的任何组合都有限制。你可以通过执行
const{createPrivateKey}=require('crypto'))
const pk=createPrivateKey(pem)
console.log(pk.asymmetricKeyType)
如果记录了
rsa pss
,则您的密钥限制了可以使用它执行的操作。返回Ed25519
。很奇怪。一定是把代码搞砸了。非常感谢。
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAtBwLxqZEirr0uhtMTThmVDu3XKFVgE+qQqQ6oi6P/cvnTBHc
zlnmgqYNpufUbnIgGSZ9RzL29gVq6o/Dc4Sf1C0sEdkU1A5weFEegpeQTfEU1XI9
.....
0q6yoDXSl7JC+y5BWaz75xFX+tb4hKVTD27BvNDYRuvRsFeiKnn7vDmVS1/CoSnd
bv9Y1DrudRU2PkgAUPqbxDzuCNY9VW8IAP/DCw0oJBJP+wzdH9uvhg==
-----END RSA PRIVATE KEY-----