Skontrolovať JWKS a extrahovať verejné kľúče PEM

kontroluje JWK Set (JSON Web Key Set) a extrahuje každý verejný kľúč vo formáte PEM, pripravený na použitie pre overenie JWT podpisov od poskytovateľa identity (OIDC, Auth0, Keycloak…)
Vložte celý obsah JWKS dokumentu, napríklad ten vystavený na /.well-known/jwks.json.

Čo je JWKS?

JWKS (JSON Web Key Set, RFC 7517) je JSON dokument zoskupujúci zoznam verejných kľúčov v štruktúrovanej forme. Slúži na publikovanie kľúčov, ktoré vydavateľ JWT používa na podpisovanie svojich tokenov, aby ich akýkoľvek konzument mohol získať a overiť podpis tokenov, ktoré prijíma. Formát sa vždy prezentuje takto:

{
  "keys": [
    { "kty": "RSA", "kid": "abc123", "use": "sig", "alg": "RS256", "n": "...", "e": "AQAB" },
    { "kty": "EC",  "kid": "def456", "use": "sig", "alg": "ES256", "crv": "P-256", "x": "...", "y": "..." }
  ]
}

Každý záznam v poli keys je JWK (JSON Web Key), ktorý popisuje verejný kľúč: typ kľúča (kty), identifikátor (kid), plánované použitie (use), cieľový algoritmus (alg) a kryptografické komponenty.

Kedy slúži JWKS?

JWKS je chrbtová kosť moderných OAuth2 a OpenID Connect architektúr. Stretnete sa s ním vo viacerých kontextoch:

  • OIDC discovery: každý OpenID Connect provider exponuje konfiguračný dokument na /.well-known/openid-configuration, ktorý obsahuje pole jwks_uri. Na tejto URL sa nachádza JWKS so zoznamom aktívnych verejných kľúčov.
  • Overenie JWT: keď vaše API prijíma token podpísaný v RS256 alebo ES256, číta kid z headera, sťahuje JWKS vydavateľa, nájde zodpovedajúci kľúč, derivuje z neho verejný kľúč vo formáte PEM, a overuje podpis.
  • Rotácia kľúčov: vydavateľ môže publikovať viaceré kľúče súčasne, čo umožňuje zaviesť nový kľúč na podpisovanie nových tokenov, pri zachovaní starého v prevádzke, kým tokeny v obehu expirujú.
  • Federations: SAML, SCIM, prepojené servisy, publikovanie JWKS sa vyhýba ručnej výmene X.509 certifikátov medzi partnermi.

Esenciálne polia JWK

Niekoľko polí sa systematicky vracia v JWK. Tento nástroj ich extrahuje a zobrazuje pre každý kľúč analyzovaného JWKS:

  • kid (key ID): unikátny identifikátor kľúča. Je to hodnota, ktorú header JWT vkladá do svojho kid poľa pre indikáciu, ktorý kľúč JWKS má slúžiť overeniu.
  • kty (key type): kryptografická rodina. Dve dominantné hodnoty sú RSA (klasické RSA kľúče, používané s RS256, RS384, RS512) a EC (eliptické krivky, používané s ES256, ES384, ES512).
  • alg (algorithm): podpisový algoritmus, pre ktorý je tento kľúč plánovaný. Voliteľné pole, ale často vyplnené. Umožňuje rýchlo filtrovať kľúče použiteľné pre daný JWT.
  • use: použitie kľúča. sig pre podpis (obvyklý prípad), enc pre šifrovanie (zriedkavé, používané s JWE).

Prečo konvertovať JWK na PEM?

Väčšina klasických kryptografických knižníc (OpenSSL, openssl_verify v PHP, crypto v Node.js, JCA v Jave) akceptuje verejné kľúče vo formáte PEM (Base64 obklopené -----BEGIN PUBLIC KEY-----), nie priamo vo formáte JWK. Konverzia JWK na PEM je teda nepostrádateľná pre:

  • Manuálne overenie podpisu JWT zo skriptu alebo command-line nástroja (jwt, jose, step crypto).
  • Import kľúča do debug nástroja ako JWT Verifier, ktorý očakáva PEM kľúč v poli "verejný kľúč".
  • Uložiť kľúč v lokálnej cache alebo konfiguračnom súbore v univerzálnej a čitateľnej forme.
  • Rýchlo porovnať dva kľúče (PEM formát uľahčuje vizuálne diffy).

Limity a upozornenia

Tento nástroj podporuje verejné kľúče RSA (kty=RSA) a EC (kty=EC na krivkách P-256, P-384, P-521). Ostatné typy (OKP pre Ed25519, oct pre symetrické kľúče) nie sú konvertované: sú signalizované s chybovou správou per záznam, zvyšok JWKS zostáva čitateľný.

  • Konverzia sa vykonáva v jedinom smere: JWKS na PEM. Rekonštrukcia JWK z existujúceho PEM kľúča nie je pokrytá touto verziou.
  • JWKS musí byť vložené tak, ako je, vo forme JSON textu. Automatické získanie z URL jwks_uri alebo OIDC endpointu nie je urobené na strane servera, pre vyhnutie sa nepredvídaným odchádzajúcim volaniam.
  • Privátne kľúče sa nemajú objavovať vo verejnom JWKS a tento nástroj extrahuje iba verejné komponenty, aj keby bol privátny kľúč prítomný.

Ako ho používať

  1. Získajte JWKS vydavateľa, ktorého chcete inšpektovať. Pre OIDC providera je adresa zvyčajne https://priklad.com/.well-known/jwks.json alebo https://priklad.com/oauth2/jwks.
  2. Skopírujte celý JSON dokument (objekt obsahujúci kľúč keys).
  3. Vložte ho do vstupnej zóny nástroja a spustite analýzu.
  4. Pre každý kľúč JWKS nástroj zobrazuje jeho kid, kty, alg, use a verejný kľúč konvertovaný na PEM formát.
  5. Kliknite na "kopírovať" pre získanie PEM a jeho použitie v overovacom skripte, v našom JWT Verifier, alebo v akomkoľvek OpenSSL kompatibilnom nástroji.

Často kladené otázky

Kde nájsť JWKS OIDC providera?

Veľká väčšina OpenID Connect providerov publikuje discovery dokument na https://priklad.com/.well-known/openid-configuration. Tento JSON obsahuje pole jwks_uri, ktoré ukazuje na efektívne JWKS. Niektorí provideri servujú priamo JWKS na https://priklad.com/.well-known/jwks.json alebo na dedikovanom OAuth2 endpointe. Stiahnite obsah a vložte ho tu tak, ako je.

Prečo je kid dôležitý?

kid (key ID) je identifikátor, ktorý header JWT vkladá do svojho vlastného poľa kid pre indikáciu, ktorý kľúč JWKS má slúžiť overeniu. Bez tohto identifikátora by konzument musel skúšať každý kľúč JWKS, čo komplikuje diagnostiku v prípade chyby. Prítomnosť kid per kľúč je teda považovaná za dobrú prax a všetci serióznejší IdP ho publikujú.

Aký je rozdiel medzi kty=RSA a kty=EC?

RSA je historická rodina asymetrických podpisov, používaná s RS256, RS384, RS512. Kľúče sú opísané modulom n a exponentom e. EC (Elliptic Curve) je novšia a dáva kratšie podpisy pre ekvivalentnú úroveň bezpečnosti. EC kľúče sú opísané krivkou (crv = P-256, P-384 alebo P-521) a dvomi súradnicami x a y. Tento nástroj konvertuje obe rodiny na PEM.

Ako použiť extrahovaný PEM na overenie JWT?

Skopírujte PEM, potom ho vložte do poľa "verejný kľúč" nášho JWT Verifier s JWT na validáciu. Môžete ho tiež použiť z command-line s openssl dgst, z Node.js s crypto.verify, z Pythonu s cryptography alebo PyJWT, z Javy s JCA, atď. PEM formát je univerzálne uznávaný.

Môj JWKS obsahuje Ed25519 (OKP) kľúč, prečo nie je konvertovaný?

Konverzia OKP kľúčov (Ed25519, Ed448, X25519, X448) vyžaduje špecifickú logiku a odlišné DER kódovanie od RSA a EC kľúčov. Táto verzia nástroja podporuje iba RSA a EC. Nepodporované kľúče sú signalizované individuálne s chybovou správou, bez blokovania analýzy ostatných záznamov JWKS.

Možno získať JWKS z URL namiesto jeho vloženia?

Nie v tejto verzii. Nástroj nerealizuje žiadne odchádzajúce HTTP volanie pre zachovanie rýchlosti a vyhnutie sa konaniu ako neúmyselný proxy. Stiahnite JWKS z vášho prehliadača alebo s curl https://priklad.com/.well-known/jwks.json, potom vložte obsah do vstupného poľa.

Ukážka požiadavky

curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
  -H "Content-Type: application/json" \
  -d '{"jwks":"..."}'

Vstupná schéma

Pole Typ Povinné Predvolené
jwks text

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všetky dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - získa schému tohto nástroja
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - spustí tento nástroj s JSON payloadom