ToolConvoyToolConvoyv2.6
DEV

PEM 转 JWK — 将 PEM 密钥转为 JWK 格式

将 PEM 编码的加密密钥转为 JWK 格式。支持 RSA、EC 和 Ed25519 密钥 — 完全在浏览器中运行,无需上传。

● 本地运行 · 在您的标签页中生成页面加载以来工具发出的网络请求:0 次

PEM to JWK

Convert PEM-encoded public or private keys to JWK format. Works entirely in your browser.

PEM 是自 1993 年 Privacy Enhanced Mail 提案以来一直伴随我们的密钥格式。它是 id_rsa 的格式,是 cert.pem 的格式,是被粘贴进服务器配置的每一个 BEGIN PUBLIC KEY 块的格式。JWK 是 JSON 优先世界的密钥格式 —— OAuth 2.0 提供商要求的格式、OpenID Connect 发现文档返回的格式、每种语言的 JWT 签名库都接受其作为输入的格式。两者之间的转换不是语义层面的变换(密钥材料是相同的),而是句法层面的:解析 base64 编码的 PEM 装甲内的 ASN.1 DER 结构,提取密钥参数,再按 RFC 7517 的定义将其重新组装成 JSON 结构。

ASN.1 解析是难点。PEM 文件是 base64 编码的 DER,而 DER 是 ASN.1 结构的二进制编码。一份 RSA 私钥 PEM 包含版本号、模数 n、公钥指数 e、私钥指数 d,以及 CRT 参数(p、q、dp、dq、qinv)。一份 EC 私钥 PEM 包含曲线 OID 和私钥标量。工具会从 ASN.1 容器中解开这些字段,并映射到对应的 JWK 成员名 —— RSA 对应 ned,EC 对应 crvxyd —— 同时相应地设置密钥类型 kty

最常见的实际用例是 OAuth 2.0 客户端注册。当你注册一个使用 private-key JWT 认证(RFC 7523)的 OAuth 客户端时,授权服务器会要求你以 JWK 形式提供公钥。而密钥本身以 PEM 文件的形式躺在你磁盘上。转换器用一次粘贴把两种格式衔接起来,自动生成的密钥 ID(RFC 7638 摘要)就是你放进 JWT 头里的 kid 值。

广告

使用方法

  1. 粘贴 PEM 密钥

    把 PEM 编码的公钥或私钥(RSA、EC 或 Ed25519)粘贴到输入区。工具会解析 PEM 包装层内部的 ASN.1 DER 结构,并提取密钥参数。

  2. 查看 JWK 输出

    JWK 以格式化 JSON 的形式展示,包含标准的密钥类型成员:RSA 对应 kty、n、e;EC 对应 kty、crv、x、y;Ed25519 对应 kty、crv、x。密钥 ID(kid)由密钥材料自动生成。

  3. 复制 JWK

    把 JWK 复制到剪贴板,用于 JWT 签名库、OAuth 2.0 客户端配置,或 OpenID Connect 服务提供方元数据。输出符合 RFC 7517。

常见问题

支持哪些密钥类型?

支持 RSA(2048 位和 4096 位的公钥和私钥)、EC(P-256、P-384、P-521 曲线,对应 secp256r1/secp384r1/secp521r1),以及 Ed25519(公钥和私钥,RFC 8037)。不支持传统的 DSA 密钥以及加密的 PEM 文件。

工具会把私钥暴露在 JWK 输出中吗?

如果粘贴的是 PEM 私钥,输出的 JWK 会包含私钥组件(RSA/EC 的 d,Ed25519 的 d)。私钥仅在你的浏览器中显示,绝不会离开你的设备。如需仅输出公钥,请粘贴 PEM 公钥。

密钥 ID(kid)是如何生成的?

kid 是依据 RFC 7638 对公钥组件计算的 SHA-256 摘要。这会产生一个确定性、抗碰撞的标识符,同一密钥的反复转换结果保持一致。输入是私钥时,kid 仍然只由公钥组件计算得出。

能把证书 PEM 转成 JWK 吗?

不能 — 本工具转换的是裸密钥 PEM,不是 X.509 证书 PEM。要把证书中的公钥转为 JWK,请先用 SSL 证书解码器工具从证书中提取密钥,再把提取出的密钥 PEM 粘贴到此处。

为什么需要 JWK 格式而不用 PEM?

JWK 是基于 JSON 的协议的原生密钥格式:JWT 签名库、OAuth 2.0 客户端注册、OpenID Connect 发现文档,以及 AWS KMS 密钥策略。PEM 是文件系统格式;JWK 是 API 格式。绝大多数接受加密密钥的云服务都接受 JWK。

限制说明

  • 不支持加密 PEM不支持带口令保护的 PEM 文件(带有 Proc-Type: 4,ENCRYPTED 头部)。请先用 OpenSSL 解密 PEM,再粘贴解密后的密钥。
  • 不支持 DSA 或经典 Diffie-Hellman仅支持 RSA、EC、Ed25519 三种密钥类型。DSA、DH 以及其他传统密钥类型会被拒绝,并提示该密钥算法不受支持。
  • 不输出 JWK Set(JWKS)工具输出的是单个 JWK,不是包含多个密钥的 JWK Set。需要 JWKS 输出(OIDC 发现要求)时,把各个 JWK 拼成一个带 `keys` 包装的 JSON 数组。

平台说明

macOS
命令行场景下,可通过 npm 上的 `pem-jwk` 把 PEM 转为 JWK。对于从聊天或文档里粘贴过来的密钥做一次性转换,浏览器工具是更合适的选择。
Linux
用 OpenSSL 的 `-pubout` 加上手动提取能拿到参数,但 JWK JSON 的拼装仍需手工完成。浏览器工具一步完成整个 PEM 到 JWK 的转换。
Web
完全在客户端运行。私钥绝不会被上传 —— 转换只发生在你浏览器的内存中。
广告
广告