node.js - 如何使用 CNG 密钥使用 JwtSecurityTokenHandler 签名的 Nodejs 工具使用 ES384 算法验证 JWT 令牌
问题描述
我正在尝试使用 CNG 生成的密钥使用JwtSecurityTokenHandler签名的 Node.js 工具验证 JWT 令牌
我尝试了许多 Nood.js 工具,例如jsonwebtoken
jwt.verify(token, publickey,{ algorithms: ['ES384'], ...
但是每次都会出现错误的标签错误
["error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error"],"library":"asn1 encoding routines","function":"asn1_check_tlen","reason":"wrong tag","code":"ERR_OSSL_ASN1_WRONG_TAG"
CNG 生成的公钥和私钥
var key = CngKey.Create(CngAlgorithm.ECDsaP384, "keyName",
new CngKeyCreationParameters
{
KeyCreationOptions = CngKeyCreationOptions.OverwriteExistingKey,
KeyUsage = CngKeyUsages.AllUsages,
ExportPolicy = CngExportPolicies.AllowPlaintextExport,
});
txtPrivateKey = Convert.ToBase64String(key.Export(CngKeyBlobFormat.EccPrivateBlob));
txtPublicKey = Convert.ToBase64String(key.Export(CngKeyBlobFormat.EccPublicBlob));
我尝试转换密钥,但仍然遇到相同的异常。如何使用 CNG 和 ES384 算法为 Node.js 工具生成有效的公钥?
解决方案
看来我找到了解决方案:
- 以pkcs8格式导出私钥
Convert.ToBase64String(key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob));
- 保存到 pem 并添加 BEGIN/END PRIVATE KEY
- 使用 openssl 生成公钥
openssl ec -in pkcs8.pem -pubout -out pkcs8genpubkey.pem
推荐阅读
- php - 使用 PHP 根据星期几从数组中选择数据
- javascript - TypeScript - 声明真正的全局变量以直接访问,没有窗口、全局或 globalThis
- python - Python Selenium 新标签 Microsoft Edge
- java - System.out.println() 正在打印 [S@123772c4 而不是实际的字符串
- linux - 在递归结构中查找特定的文件扩展名并提取它们直到没有剩余
- python - 错误分类成本取决于所涉及的特定类别
- blockchain - 如何通过 Nethereum 获取智能合约的 ABI?
- git - 在将裸仓库推送到具有维护者角色的 gitlab 时,预接收挂钩拒绝错误
- angular - 页面刷新后 Angular Azure AD 保持登录状态
- r - 将每列的唯一值传输到行中 - 每行最多 10 个值