Pretvornik ključev JWK ⇄ PEM
Pretvarjanje kriptografskih ključev med formatoma JWK in PEM z uporabo pravega API-ja Web Crypto, dekodiranje algoritma/krivulje/velikosti in izračun prstnega odtisa JWK po RFC 7638.
🔒 V celoti obdelano v vašem brskalniku – nič, kar tukaj vnesete, ni nikoli naloženo.
Rezultat
Ključi JSON Web Key (JWK) in ključi v formatu PEM se izmenično pojavljajo v knjižnicah JWT, orodjih TLS in konfiguracijah OAuth/OIDC, vendar ročno pretvarjanje med njima pomeni dekodiranje struktur DER iz base64 ali preoblikovanje JSON – zlahka pride do komaj opaznih napak. To orodje izvaja pretvorbo s pravim API-jem Web Crypto brskalnika, ne pa z manipulacijo besedila: prilepljen blok PEM se uvozi s crypto.subtle.importKey('spki'|'pkcs8', ...) in znova izvozi kot JWK z exportKey('jwk', ...); prilepljen JWK se uvozi z importKey('jwk', ...) in znova izvozi kot SPKI ali PKCS8 DER ter nato zavije v pravilno glavo PEM. Ker brskalnik sam potrjuje in dekodira material ključa, napačno oblikovan ključ ali neujemajoč se izbor algoritma sproži napako, namesto da bi tiho vrnil neuporabne podatke.
Podprti algoritmi so RSA (RSASSA-PKCS1-v1_5), EC na krivuljah P-256/P-384/P-521 ter – kjer jih brskalnik izvaja – Ed25519 in X25519. Podpora brskalnika za Ed25519/X25519 v Web Crypto je med pogoni še vedno neenotna, zato orodje namesto ugibanja iz niza uporabniškega agenta izvede dejansko preverjanje s crypto.subtle.generateKey() za izbrano krivuljo in vam jasno pove, če tukaj ni podprto, namesto da bi vrnilo izmišljen rezultat.
Vsaka pretvorba prav tako dekodira dejanske metapodatke ključa: za ključe RSA bitno dolžino modula in zgoščevalni algoritem neposredno iz objekta CryptoKey; za ključe EC in OKP imenovano krivuljo; za vsak ključ pa prstni odtis JWK po RFC 7638 – zgoščeno vrednost SHA-256 obveznih članov JWK, serializiranih v strogem leksikografskem vrstnem redu (e/kty/n za RSA, crv/kty/x/y za EC, crv/kty/x za OKP/Ed25519/X25519). Ta prstni odtis mnogi sistemi uporabljajo kot identifikator »kid« ključa, napačen vrstni red članov pa povzroči povsem drugačno zgoščeno vrednost, kar je natanko vrsta napake, ki se ji ročno napisana izvedba težko izogne.
Ker vse poteka prek crypto.subtle v vašem lastnem zavihku brskalnika, material zasebnega ključa nikoli ne zapusti vaše naprave – med pretvorbo ni vpleten noben strežnik, nalaganje ali zunanji klic API-ja.