本文へスキップ
AZ Tools

JWK ↔ PEM 変換ツール

ID プロバイダは署名鍵を JWKS として公開します。base64url の数値が並ぶ JSON 文書です。ところがトークンを検証するライブラリの多くは PEM を求めます。同じ鍵をまったく違う形で記述する二つの形式なので、必要以上に手作業で橋渡しすることになります。 このツールは双方向に変換します。JWK、JWKS 全体、あるいは 1 つ以上の PEM 公開鍵を貼り付けると、各鍵がもう一方の形式で返り、その鍵が実際に何であるかも示されます。鍵種別、RSA の鍵長または楕円曲線、鍵が宣言していればアルゴリズムと用途、そして RFC 7638 サムプリント——どのフィールドが一緒に運ばれているかに関係なく鍵そのものを識別する正規化された指紋です。 変換自体は ASN.1 を手で組み立てるのではなく、ブラウザ自身の WebCrypto 実装が行います。ブラウザで署名を検証しているのと同じコードが生成したバイト列だということです。アップロードされるものはなく、貼り付けた JWK に秘密鍵の要素が含まれていれば、他の処理の前に取り除いたうえでその旨を表示します。

公開鍵のみです。秘密鍵の要素は読み込み前に取り除かれ、アップロードはされません。

JWK・JWKS・PEM 公開鍵を貼り付けると変換します。

使い方

  1. JWK、JWKS 文書、または PEM 公開鍵を貼り付けます。
  2. 鍵種別、鍵長または曲線、宣言されたアルゴリズムを確認します。
  3. PEM を求めるライブラリには PEM を、JWKS には JWK をコピーします。
  4. 2 つの写しが本当に同じ鍵かはサムプリントで確かめます。
  5. 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 で行われ、サーバーに送信されるものはありません。

関連ツール