Pretvornik ključev JWK ⇄ PEM
Pretvorite kriptografske ključe med formatom JWK in PEM z uporabo dejanskega Web Crypto API, dekodirajte algoritem/krivuljo/velikost in izračunajte odtis RFC 7638 JWK.
Rezultat
Spletni ključi JSON (JWK) in ključi, kodirani s PEM, se izmenično prikazujejo v knjižnicah JWT, orodjih TLS in konfiguraciji OAuth/OIDC, vendar ročna pretvorba med tema dvema pomeni strukture DER za dekodiranje base64 ali preoblikovanje JSON – enostavno se je subtilno zmotiti. To orodje izvede pretvorbo s pravim spletnim kripto API-jem brskalnika namesto z manipulacijo besedila: prilepljeni blok PEM je uvožen s crypto.subtle.importKey('spki'|'pkcs8', ...) in ponovno izvožen kot JWK z exportKey('jwk', ...); prilepljeni JWK je uvožen z importKey('jwk', ...) in ponovno izvožen kot SPKI ali PKCS8 DER, nato pa zavit v pravilno glavo PEM. Ker brskalnik sam potrdi in dekodira ključno gradivo, napačno oblikovan ključ ali neusklajena izbira algoritma glasno odpove, namesto da bi tiho proizvedla smeti.
Podprti algoritmi so RSA (RSASSA-PKCS1-v1_5), EC na krivuljah P-256/P-384/P-521 in — kjer jih izvaja brskalnik — Ed25519 in X25519. Podpora brskalnika za Ed25519/X25519 v Web Crypto je še vedno nedosledna med motorji, tako da orodje namesto ugibanja iz niza uporabniškega agenta zažene dejansko sondo crypto.subtle.generateKey() za izbrano krivuljo in vam jasno pove, če tukaj ni podprta, namesto da vrne izmišljen rezultat.
Vsaka pretvorba dekodira tudi dejanske metapodatke ključa: za ključe RSA dolžino bitov modula in algoritem zgoščevanja neposredno iz objekta CryptoKey; za ključe EC in OKP imenovana krivulja; in za vsak ključ odtis RFC 7638 JWK — zgoščena vrednost SHA-256 zahtevanih č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 odtis prsta je tisto, kar mnogi sistemi uporabljajo kot "otroški" identifikator ključa, in napačno vrstni red članov proizvede popolnoma drugačno zgoščeno vrednost, kar je točno takšna napaka, h kateri je nagnjena ročno zvita implementacija.
Ker vse teče prek crypto.subtle na zavihku vašega brskalnika, material zasebnega ključa nikoli ne zapusti vaše naprave – na kateri koli točki pretvorbe ni vključen strežnik, nalaganje in zunanji klic API-ja.