JWK 转换器
在 PEM 和 JSON Web Key 之间转换密钥。粘贴 PKCS #8、PKCS #1 或 SEC1 格式的 PEM 私钥、公钥或证书,即可获得对应的 JWK;也可以粘贴最多包含 20 把密钥的 JWK 或 JWKS,获取 PKCS #8 和 SPKI PEM。支持 RSA、EC(P-256、P-384、P-521、secp256k1)、Ed25519、Ed448、X25519 和 X448 密钥;每把密钥都会显示其类型和 RFC 7638 指纹。
常见问题
转换器如何判断转换方向?
以 { 开头的输入会被识别为 JWK 或 JWKS,并转换为 PEM。包含 -----BEGIN 行的输入会被识别为 PEM,并转换为 JWK。其他输入都会被拒绝,并提示所需的格式。
支持哪些 PEM 输入?
支持未加密的 PKCS #8(BEGIN PRIVATE KEY)、PKCS #1(BEGIN RSA PRIVATE KEY)和 SEC1(BEGIN EC PRIVATE KEY)格式私钥;SPKI(BEGIN PUBLIC KEY)或 PKCS #1(BEGIN RSA PUBLIC KEY)格式公钥;以及 X.509 证书(会转换其中的公钥)。粘贴多个 PEM 块时,优先采用第一个私钥;如果没有私钥,则采用第一个公钥或证书。
私钥会生成什么结果?
PEM 私钥会生成包含所有成员的私有 JWK,例如 RSA 密钥的 d、p、q、dp、dq 和 qi,并同时生成对应的公有 JWK。请只分享公有 JWK,因为私有 JWK 包含密钥秘密材料。
可以转换整个 JWKS 吗?
可以。粘贴包含 keys 数组且最多有 20 把密钥的文档,例如来自 jwks_uri 端点的文档,即可将每把密钥转换为 PEM,并显示其索引和 kid。通过 d 成员识别出的私有 JWK 会同时返回 PKCS #8 私钥和 SPKI 公钥。
为什么无法转换对称密钥?
kty 为 oct 的密钥是供 HMAC 或 AES 使用的纯密钥字节,没有 PEM 表示形式。请直接使用它们,例如在 JWT 生成器中,oct JWK 可用作 HMAC 密钥。
kid 选项有什么作用?
启用后,密钥的 RFC 7638 指纹会作为 kid 成员添加到生成的 JWK 中。这样密钥就有了稳定标识符,验证方可以将它与 JWT 的 kid 标头进行匹配。
RFC 7638 指纹是什么?
它是对密钥必需的公开成员按固定顺序排列后计算出的 base64url SHA-256 哈希值,例如 RSA 密钥的 e、kty 和 n,或 EC 密钥的 crv、kty、x 和 y。无论以 PEM 还是 JWK 格式存储,同一密钥的指纹始终相同。
支持加密密钥或 OpenSSH 密钥吗?
不支持。加密的 PEM 密钥必须先移除口令,例如使用 openssl pkey -in encrypted.pem -out key.pem。OpenSSH 私钥必须先用 ssh-keygen 转换为 PEM,才能在此处读取。
支持哪些密钥类型?
支持 RSA、使用 P-256、P-384、P-521 或 secp256k1 曲线的 EC,以及 OKP 类型 Ed25519、Ed448、X25519 和 X448。DSA 和 Diffie-Hellman 密钥没有 JWK 格式,因此系统会拒绝并说明原因。
我的私钥会被保留吗?
不会。密钥只会在处理此请求时于内存中转换,不会被记录或保存。建议在线转换公钥;生产环境中的私钥仅在你控制的系统上处理。