0

JWK ⇄ PEM kulcs konverter

Konvertálja a kriptográfiai kulcsokat JWK és PEM formátum között a valódi Web Crypto API használatával, dekódolja az algoritmust/görbét/méretet, és számítsa ki az RFC 7638 JWK ujjlenyomatot.

Buy Me a Coffee at ko-fi.com
Feldolgozás... 0%
Elemző kulcs
Formátum konvertálása
Számítástechnikai ujjlenyomat
Kész

Eredmény

A JSON webkulcsok (JWK) és a PEM-kódolt kulcsok felcserélhetően jelennek meg a JWT-könyvtárak, a TLS-eszközök és az OAuth/OIDC-konfiguráció között, de a kettő közötti kézi konvertálás a DER-struktúrák base64-dekódolását vagy a JSON újraformázását jelenti – könnyű tévedni. Ez az eszköz a böngésző valódi Web Crypto API-jával hajtja végre a konvertálást a szövegkezelés helyett: a beillesztett PEM-blokkot a crypto.subtle.importKey('spki'|'pkcs8', ...) segítségével importálja, majd JWK-ként az exportKey('jwk', ...) segítségével újraexportálja; egy beillesztett JWK-t az importKey('jwk', ...) segítségével importálunk, és SPKI vagy PKCS8 DER néven újraexportáljuk, majd a megfelelő PEM-fejlécbe csomagoljuk. Mivel a böngésző maga ellenőrzi és dekódolja a kulcsanyagot, a rosszul formázott kulcs vagy a nem megfelelő algoritmus kiválasztása hangosan meghiúsul, ahelyett, hogy csendben szemetet termelne.

A támogatott algoritmusok az RSA (RSASSA-PKCS1-v1_5), az EC a P-256/P-384/P-521 görbéken, és – ahol a böngésző megvalósítja őket – az Ed25519 és az X25519. A Web Crypto Ed25519/X25519 böngészőjének támogatása továbbra is inkonzisztens a motorok között, ezért ahelyett, hogy a felhasználói ügynök karakterláncából tippelne, az eszköz egy tényleges crypto.subtle.generateKey() próbát futtat a kiválasztott görbére, és világosan közli, ha itt nem támogatott, ahelyett, hogy kitalált eredményt adna vissza.

Minden konverzió dekódolja a kulcs valódi metaadatait is: RSA kulcsok esetén a modulus bithossz és a hash algoritmus közvetlenül a CryptoKey objektumból; EC és OKP kulcsok esetén a megnevezett görbe; és minden kulcshoz az RFC 7638 JWK hüvelykujjlenyomat – a JWK szükséges tagjainak SHA-256 kivonata szigorú lexikográfiai sorrendben sorba rendezve (e/kty/n az RSA-nál, crv/kty/x/y az EC-nél, crv/kty/x az OKP/Ed25519/X25-nél). Sok rendszer ezt az ujjlenyomatot használja a kulcs „gyerek” azonosítójaként, és a tagsorrend hibás megadása teljesen más hash-t eredményez, ami pontosan az a fajta hiba, amelyre egy kézzel görgetett implementáció hajlamos.

Mivel minden a crypto.subtle-n keresztül fut a saját böngészőlapján, a privát kulcs anyaga soha nem hagyja el az eszközt – nincs szerver, nincs feltöltés, és nincs külső API-hívás sem az átalakítás egyetlen pontján sem.