JWT 签名算法 HS256、RS256 及 ES256 及密钥生成 (2)

ES256 使用 ECDSA 进行签名,它的安全性和运算速度目前和 RS256 差距不大,但是拥有更短的签名长度。
对于需要频繁发送的 JWT 而言,更短的长度长期下来可以节约大量流量。

因此更推荐使用 ES256 算法。

使用 OpenSSL 生成 RSA/ECC 公私钥

RS256 使用 RSA 算法进行签名,可通过如下命令生成 RSA 密钥:

# 1. 生成 2048 位(不是 256 位)的 RSA 密钥 openssl genrsa -out rsa-private-key.pem 2048 # 2. 通过密钥生成公钥 openssl rsa -in rsa-private-key.pem -pubout -out rsa-public-key.pem

ES256 使用 ECDSA 算法进行签名,该算法使用 ECC 密钥,生成命令如下:

# 1. 生成 ec 算法的私钥,使用 prime256v1 算法,密钥长度 256 位。(强度大于 2048 位的 RSA 密钥) openssl ecparam -genkey -name prime256v1 -out ecc-private-key.pem # 2. 通过密钥生成公钥 openssl ec -in ecc-private-key.pem -pubout -out ecc-public-key.pem

密钥的使用应该就不需要介绍了,各类语言都有对应 JWT 库处理这些,请自行查看文档。

如果是调试/学习 JWT,需要手动签名与验证的话,推荐使用 jwt 工具网站 - jwt.io

参考

RFC 7518 - JSON Web Algorithms (JWA)

什么是 JWT -- JSON WEB TOKEN

jwt 工具网站 - jwt.io

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdzpy.html