如何为 JWT ES384 创建私钥
How to create private key for JWT ES384
我正在尝试使用 ES384 算法在 JWT.io 上创建 JWT 令牌。
我尝试通过几种方式创建私钥(主要是在网上找到的):
openssl ecparam -name secp384r1 -genkey -noout -out privatekey
ssh-keygen -t ecdsa -b 384 -f privatekey
我也试过格式化 pkcs8 中的密钥:
openssl pkcs8 -topk8 -in privatekey -out private.pem
我创建的 public 密钥:
openssl ec -in privatekey -pubout -out publickey
但最后,在 JWT.io 上,它总是 returns 'invalid signature'。
我想我缺少对 jwt.io 中 'private key' 字段预期内容的一些基本理解,但无法弄清楚。知道我做错了什么吗?
举个例子:
openssl ecparam -name secp384r1 -genkey -noout -out testprivatekey
openssl ec -in testprivatekey -pubout -out testpublickey
给我以下键:
-----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDBkjWOV0LAn2iaHna4uSIY5yoaA5KOvAoGqr9sUNabrbfMuQXDnSUng
xsfTymDJGICgBwYFK4EEACKhZANiAAQySjyVeqVk20TQ8mw0vKZU9jDd0C27virc
BcqHKH+iAYOP76814HxFhC+K5v4eV9uIowUAXi/mdKM5UQq5YW1f21ETM6i9lg31
+SKMx6to499aJe5LJVxTbbuVKADrrgY=
-----END EC PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMko8lXqlZNtE0PJsNLymVPYw3dAtu74q
3AXKhyh/ogGDj++vNeB8RYQviub+HlfbiKMFAF4v5nSjOVEKuWFtX9tREzOovZYN
9fkijMeraOPfWiXuSyVcU227lSgA664G
-----END PUBLIC KEY-----
在 jwt.io 中同时添加时:'invalid signature'.
您使用的曲线适用于 ES384 JWS 算法。唯一的障碍是关键 encoding/format.
由于 Web 密码学的限制 API jwt.io 仅支持 EC 私钥的 PKCS#8 和 EC public 密钥的 SPKI。
以下是用作输入的示例 ES384 键
-----BEGIN PRIVATE KEY-----
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCuAVir5v+2gZv7A3dR
EKT977pKPY+1S+h58Xbzir2gqdUKLuyCUCYJmQ6/7ac4B4ShZANiAASndkjwMCbG
fwEnf3fpjkwdEtdMCDpLEI2G4fokES6J66JxRj3CpmTwLrdJkiPiG0B6pKO+zVft
4j1XajyxhSmyuPpZQo7KaoW2QLEzBZC4M+1ko4cLd9JaSNC9//vcYf4=
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEp3ZI8DAmxn8BJ3936Y5MHRLXTAg6SxCN
huH6JBEuieuicUY9wqZk8C63SZIj4htAeqSjvs1X7eI9V2o8sYUpsrj6WUKOymqF
tkCxMwWQuDPtZKOHC3fSWkjQvf/73GH+
-----END PUBLIC KEY-----
以上是用
生成的
openssl ecparam -name secp384r1 -genkey -noout -out sec1_ec_p384_private.pem
openssl pkcs8 -topk8 -nocrypt -in sec1_ec_p384_private.pem -out ec_p384_private.pem
rm sec1_ec_p384_private.pem
openssl ec -in ec_p384_private.pem -pubout -out ec_p384_public.pem
它也支持 JWK 作为输入。
(私人)
{
"kty": "EC",
"x": "p3ZI8DAmxn8BJ3936Y5MHRLXTAg6SxCNhuH6JBEuieuicUY9wqZk8C63SZIj4htA",
"y": "eqSjvs1X7eI9V2o8sYUpsrj6WUKOymqFtkCxMwWQuDPtZKOHC3fSWkjQvf_73GH-",
"crv": "P-384",
"d": "rgFYq-b_toGb-wN3URCk_e-6Sj2PtUvoefF284q9oKnVCi7sglAmCZkOv-2nOAeE"
}
和(public)
{
"kty": "EC",
"x": "p3ZI8DAmxn8BJ3936Y5MHRLXTAg6SxCNhuH6JBEuieuicUY9wqZk8C63SZIj4htA",
"y": "eqSjvs1X7eI9V2o8sYUpsrj6WUKOymqFtkCxMwWQuDPtZKOHC3fSWkjQvf_73GH-",
"crv": "P-384"
}
我正在尝试使用 ES384 算法在 JWT.io 上创建 JWT 令牌。
我尝试通过几种方式创建私钥(主要是在网上找到的):
openssl ecparam -name secp384r1 -genkey -noout -out privatekey
ssh-keygen -t ecdsa -b 384 -f privatekey
我也试过格式化 pkcs8 中的密钥:
openssl pkcs8 -topk8 -in privatekey -out private.pem
我创建的 public 密钥:
openssl ec -in privatekey -pubout -out publickey
但最后,在 JWT.io 上,它总是 returns 'invalid signature'。 我想我缺少对 jwt.io 中 'private key' 字段预期内容的一些基本理解,但无法弄清楚。知道我做错了什么吗?
举个例子:
openssl ecparam -name secp384r1 -genkey -noout -out testprivatekey
openssl ec -in testprivatekey -pubout -out testpublickey
给我以下键:
-----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDBkjWOV0LAn2iaHna4uSIY5yoaA5KOvAoGqr9sUNabrbfMuQXDnSUng
xsfTymDJGICgBwYFK4EEACKhZANiAAQySjyVeqVk20TQ8mw0vKZU9jDd0C27virc
BcqHKH+iAYOP76814HxFhC+K5v4eV9uIowUAXi/mdKM5UQq5YW1f21ETM6i9lg31
+SKMx6to499aJe5LJVxTbbuVKADrrgY=
-----END EC PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMko8lXqlZNtE0PJsNLymVPYw3dAtu74q
3AXKhyh/ogGDj++vNeB8RYQviub+HlfbiKMFAF4v5nSjOVEKuWFtX9tREzOovZYN
9fkijMeraOPfWiXuSyVcU227lSgA664G
-----END PUBLIC KEY-----
在 jwt.io 中同时添加时:'invalid signature'.
您使用的曲线适用于 ES384 JWS 算法。唯一的障碍是关键 encoding/format.
由于 Web 密码学的限制 API jwt.io 仅支持 EC 私钥的 PKCS#8 和 EC public 密钥的 SPKI。
以下是用作输入的示例 ES384 键
-----BEGIN PRIVATE KEY-----
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDCuAVir5v+2gZv7A3dR
EKT977pKPY+1S+h58Xbzir2gqdUKLuyCUCYJmQ6/7ac4B4ShZANiAASndkjwMCbG
fwEnf3fpjkwdEtdMCDpLEI2G4fokES6J66JxRj3CpmTwLrdJkiPiG0B6pKO+zVft
4j1XajyxhSmyuPpZQo7KaoW2QLEzBZC4M+1ko4cLd9JaSNC9//vcYf4=
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEp3ZI8DAmxn8BJ3936Y5MHRLXTAg6SxCN
huH6JBEuieuicUY9wqZk8C63SZIj4htAeqSjvs1X7eI9V2o8sYUpsrj6WUKOymqF
tkCxMwWQuDPtZKOHC3fSWkjQvf/73GH+
-----END PUBLIC KEY-----
以上是用
生成的openssl ecparam -name secp384r1 -genkey -noout -out sec1_ec_p384_private.pem
openssl pkcs8 -topk8 -nocrypt -in sec1_ec_p384_private.pem -out ec_p384_private.pem
rm sec1_ec_p384_private.pem
openssl ec -in ec_p384_private.pem -pubout -out ec_p384_public.pem
它也支持 JWK 作为输入。
(私人)
{
"kty": "EC",
"x": "p3ZI8DAmxn8BJ3936Y5MHRLXTAg6SxCNhuH6JBEuieuicUY9wqZk8C63SZIj4htA",
"y": "eqSjvs1X7eI9V2o8sYUpsrj6WUKOymqFtkCxMwWQuDPtZKOHC3fSWkjQvf_73GH-",
"crv": "P-384",
"d": "rgFYq-b_toGb-wN3URCk_e-6Sj2PtUvoefF284q9oKnVCi7sglAmCZkOv-2nOAeE"
}
和(public)
{
"kty": "EC",
"x": "p3ZI8DAmxn8BJ3936Y5MHRLXTAg6SxCNhuH6JBEuieuicUY9wqZk8C63SZIj4htA",
"y": "eqSjvs1X7eI9V2o8sYUpsrj6WUKOymqFtkCxMwWQuDPtZKOHC3fSWkjQvf_73GH-",
"crv": "P-384"
}