JWK ↔ PEM 変換ツール
ID プロバイダは署名鍵を JWKS として公開します。base64url の数値が並ぶ JSON 文書です。ところがトークンを検証するライブラリの多くは PEM を求めます。同じ鍵をまったく違う形で記述する二つの形式なので、必要以上に手作業で橋渡しすることになります。 このツールは双方向に変換します。JWK、JWKS 全体、あるいは 1 つ以上の PEM 公開鍵を貼り付けると、各鍵がもう一方の形式で返り、その鍵が実際に何であるかも示されます。鍵種別、RSA の鍵長または楕円曲線、鍵が宣言していればアルゴリズムと用途、そして RFC 7638 サムプリント——どのフィールドが一緒に運ばれているかに関係なく鍵そのものを識別する正規化された指紋です。 変換自体は ASN.1 を手で組み立てるのではなく、ブラウザ自身の WebCrypto 実装が行います。ブラウザで署名を検証しているのと同じコードが生成したバイト列だということです。アップロードされるものはなく、貼り付けた JWK に秘密鍵の要素が含まれていれば、他の処理の前に取り除いたうえでその旨を表示します。
公開鍵のみです。秘密鍵の要素は読み込み前に取り除かれ、アップロードはされません。
JWK・JWKS・PEM 公開鍵を貼り付けると変換します。
使い方
- JWK、JWKS 文書、または PEM 公開鍵を貼り付けます。
- 鍵種別、鍵長または曲線、宣言されたアルゴリズムを確認します。
- PEM を求めるライブラリには PEM を、JWKS には JWK をコピーします。
- 2 つの写しが本当に同じ鍵かはサムプリントで確かめます。
- PEM ブロックを複数貼り付ければまとめて変換できます。
よくある質問
- RFC 7638 のサムプリントとは何ですか
- 鍵を定義する必須メンバーだけを含む正規化 JSON に SHA-256 をかけた値です。RSA なら e、kty、n をその順で、空白なしに並べます。それ以外がすべて除かれるため、一方に kid や alg や use があってもなくても、同じ鍵なら同じサムプリントになります。
- サムプリントと kid は同じですか
- 必ずしも同じではありません。kid は発行者がその鍵をどう呼ぶかを決めただけの名前で、何でもかまいません。多くの発行者が RFC 7638 のサムプリントを kid に使うのでよく一致しますが、そう決まっているわけではありません。
- 秘密鍵も変換できますか
- いいえ。貼り付けた JWK に秘密鍵の要素があれば、鍵を読む前に取り除き、公開鍵だけを変換します。いずれにせよアップロードはされませんが、秘密鍵はウェブページに入れるものではありません。
- 対応する鍵種別は
- RSA と NIST 曲線 P-256・P-384・P-521、そしてブラウザが対応していれば Ed25519 です。WebCrypto が実装していない曲線(たとえば secp256k1)はここでは変換できません。
- 変換後の JWK に alg がないのはなぜですか
- PEM が alg を持たないからです。鍵を読むにはインポート時にアルゴリズムを指定する必要があり、結果に alg を残せばそれは鍵が述べた値ではなくこのツールの仮定になります。そのため取り除いています。
- 鍵はアップロードされますか
- いいえ。変換はブラウザ内蔵の WebCrypto で行われ、サーバーに送信されるものはありません。
関連ツール
Base64 ↔ 16進数 変換
Base64 文字列を16進数バイトに、16進数を Base64 に戻します。URL セーフ対応、ブラウザ上で動作します。
JWT デコーダー
JWT のヘッダー・クレーム・有効期限を即座に確認。
JWT ジェネレーター
ヘッダーとペイロードから HS256 / HS384 / HS512 の JWT を生成・署名 — JWT デコーダーと対。
Punycode 変換器
国際化ドメインを Unicode(`münchen.de`)と Punycode ASCII(`xn--mnchen-3ya.de`)間で変換。
Base45 エンコーダー & デコーダー
RFC 9285 に従ってテキストを Base45 にエンコードし、Base45 をテキストに戻します。ブラウザ上で動作します。
Quoted-Printable エンコーダー & デコーダー
テキストを MIME Quoted-Printable(RFC 2045)にエンコード、または復号 — =XX エスケープ・ソフト改行・UTF-8 に対応、エンコード時は 76 文字で折り返し — ブラウザ内で。