JWKコンバーター
PEMとJSON Web Keyの間でキーを変換します。PKCS #8、PKCS #1、SEC1形式のPEM秘密鍵、公開鍵、または証明書を貼り付けるとJWKを取得できます。また、JWKまたは最大20個のキーを含む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を入力すると、RSAのd、p、q、dp、dq、qiなどのメンバーをすべて含む秘密JWKと、対応する公開JWKが生成されます。秘密鍵の情報が含まれるため、共有するのは公開JWKのみにしてください。
JWKS全体を変換できますか?
はい。たとえばjwks_uriエンドポイントから取得した、最大20個のキーを含むkeys配列のドキュメントを貼り付けると、すべてのキーがインデックスとkid付きでPEMに変換されます。dメンバーを持つ秘密JWKの場合、PKCS #8秘密鍵とSPKI公開鍵の両方が返されます。
対称鍵を変換できないのはなぜですか?
ktyがoctのキーはHMACまたはAES用のプレーンな秘密バイト列であり、PEM形式がありません。たとえばJWT Generatorで直接使用できます。ここではoct JWKをHMACシークレットとして受け付けます。
kidオプションは何をしますか?
有効にすると、キーのRFC 7638サムプリントが生成されたJWKのkidメンバーとして追加されます。これにより、検証側が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、およびEd25519、Ed448、X25519、X448のOKPタイプに対応しています。DSAとDiffie-HellmanのキーにはJWK形式がないため、説明とともに拒否されます。
秘密鍵は保存されますか?
いいえ。このリクエストの処理中にメモリ上で変換され、ログに記録されたり保存されたりすることはありません。公開鍵はオンラインで変換し、本番環境の秘密鍵はご自身が管理するシステムでのみ扱うことをおすすめします。