Zkontrolovat JWKS a extrahovat veřejné klíče PEM

kontroluje JWK Set (JSON Web Key Set) a extrahuje každý veřejný klíč ve formátu PEM, připravený k použití pro ověření JWT podpisů z poskytovatele identity (OIDC, Auth0, Keycloak…)
Vložte celý obsah JWKS dokumentu, například ten vystavený na /.well-known/jwks.json.

Co je JWKS?

JWKS (JSON Web Key Set, RFC 7517) je JSON dokument, který seskupuje seznam veřejných klíčů ve strukturované formě. Slouží k publikování klíčů, které vydavatel JWT používá pro podpis svých tokenů, aby je kterýkoli konzument mohl získat a ověřit podpis tokenů, které přijímá. Formát se 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á položka pole keys je JWK (JSON Web Key), která popisuje veřejný klíč: typ klíče (kty), identifikátor (kid), zamýšlené použití (use), cílový algoritmus (alg) a kryptografické komponenty.

Kdy slouží JWKS?

JWKS je páteř moderních OAuth2 a OpenID Connect architektur. Setkáte se s ním v několika kontextech:

  • OIDC discovery: každý OpenID Connect provider vystavuje konfigurační dokument na /.well-known/openid-configuration, který obsahuje pole jwks_uri. Na této URL je JWKS uvádějící aktivní veřejné klíče.
  • JWT verifikace: když vaše API přijme token podepsaný v RS256 nebo ES256, čte kid z headeru, stáhne JWKS vydavatele, najde odpovídající klíč, odvodí z něj veřejný klíč ve formátu PEM, a ověří podpis.
  • Rotace klíčů: vydavatel může současně publikovat více klíčů, což umožňuje zavést nový klíč pro podepisování nových tokenů a zároveň zachovat starý v provozu po dobu, kdy expirují cirkulující tokeny.
  • Federace: SAML, SCIM, propojené služby, publikace JWKS se vyhne ručnímu výměně X.509 certifikátů mezi partnery.

Klíčová pole JWK

Některá pole se systematicky vrací v JWK. Tento nástroj je extrahuje a zobrazuje pro každý klíč analyzovaného JWKS:

  • kid (key ID): unikátní identifikátor klíče. Tuto hodnotu header JWT umisťuje do svého pole kid pro indikaci, který klíč JWKS má sloužit k verifikaci.
  • kty (key type): kryptografická rodina. Dvě dominantní hodnoty jsou RSA (klasické RSA klíče, používané s RS256, RS384, RS512) a EC (eliptické křivky, používané s ES256, ES384, ES512).
  • alg (algorithm): podpisový algoritmus, pro který je tento klíč určen. Volitelné pole, ale často vyplněné. Umožňuje rychle filtrovat klíče použitelné pro daný JWT.
  • use: použití klíče. sig pro podpis (obvyklý případ), enc pro šifrování (vzácné, používané s JWE).

Proč převést JWK na PEM?

Většina klasických kryptografických knihoven (OpenSSL, openssl_verify v PHP, crypto v Node.js, JCA v Javě) přijímá veřejné klíče ve formátu PEM (Base64 ohraničený -----BEGIN PUBLIC KEY-----), ne přímo ve formátu JWK. Konverze JWK na PEM je tedy nezbytná pro:

  • Manuální ověření podpisu JWT ze skriptu nebo nástroje příkazové řádky (jwt, jose, step crypto).
  • Import klíče do debug nástroje jako JWT Verifier, který očekává PEM klíč ve svém poli "veřejný klíč".
  • Uložení klíče do lokální cache nebo konfiguračního souboru v univerzální a čitelné formě.
  • Rychlé porovnání dvou klíčů (PEM formát usnadňuje vizuální diff).

Limity a upozornění

Tento nástroj podporuje veřejné klíče RSA (kty=RSA) a EC (kty=EC na křivkách P-256, P-384, P-521). Ostatní typy (OKP pro Ed25519, oct pro symetrické klíče) nejsou převedeny: jsou signalizovány s chybovou zprávou per položka, zbytek JWKS zůstává čitelný.

  • Konverze probíhá v jednom směru: JWKS na PEM. Rekonstrukce JWK z existujícího PEM klíče není pokryta touto verzí.
  • JWKS musí být vložen jak je ve formě JSON textu. Automatické získání z jwks_uri URL nebo OIDC endpointu se na straně serveru neprovádí, aby se zabránilo neočekávaným outbound voláním.
  • Privátní klíče by se neměly objevit v veřejném JWKS, a tento nástroj extrahuje pouze veřejné komponenty, i kdyby byl přítomen privátní klíč.

Jak ho používat

  1. Získejte JWKS vydavatele, kterého chcete inspekovat. Pro OIDC poskytovatele je adresa obvykle https://priklad.com/.well-known/jwks.json nebo https://priklad.com/oauth2/jwks.
  2. Zkopírujte celý JSON dokument (objekt obsahující keys klíč).
  3. Vložte ho do vstupního pole nástroje a spusťte analýzu.
  4. Pro každý klíč JWKS nástroj zobrazí jeho kid, kty, alg, use a veřejný klíč převedený do PEM formátu.
  5. Klikněte na "kopírovat" pro získání PEM a použití ve verifikačním skriptu, v našem JWT Verifieru, nebo v jakémkoli OpenSSL kompatibilním nástroji.

Často kladené otázky

Kde najít JWKS OIDC poskytovatele?

Velká většina OpenID Connect poskytovatelů publikuje discovery dokument na https://priklad.com/.well-known/openid-configuration. Tento JSON obsahuje pole jwks_uri, které ukazuje na efektivní JWKS. Někteří poskytovatelé servírují přímo JWKS na https://priklad.com/.well-known/jwks.json nebo na dedikovaném OAuth2 endpointu. Stáhněte obsah a vložte ho sem jak je.

Proč je kid důležitý?

kid (key ID) je identifikátor, který header JWT umisťuje do svého vlastního pole kid pro indikaci, který klíč JWKS má sloužit k verifikaci. Bez tohoto identifikátoru by musel konzument zkoušet každý klíč JWKS, což komplikuje diagnostiku v případě chyby. Přítomnost kid per klíč je tedy považována za dobrou praxi, a všichni seriózní IdP ho publikují.

Jaký je rozdíl mezi kty=RSA a kty=EC?

RSA je historická rodina asymetrických podpisů, používaná s RS256, RS384, RS512. Klíče jsou popsány modulem n a exponentem e. EC (Elliptic Curve) je novější a dává kratší podpisy pro ekvivalentní úroveň zabezpečení. EC klíče jsou popsány křivkou (crv = P-256, P-384 nebo P-521) a dvěma souřadnicemi x a y. Tento nástroj převádí obě rodiny do PEM.

Jak použít extrahovaný PEM pro verifikaci JWT?

Zkopírujte PEM, pak ho vložte do pole "veřejný klíč" našeho JWT Verifieru s JWT k validaci. Můžete ho také použít z příkazové řádky s openssl dgst, z Node.js s crypto.verify, z Pythonu s cryptography nebo PyJWT, z Javy s JCA, atd. PEM formát je univerzálně rozpoznán.

Můj JWKS obsahuje Ed25519 klíč (OKP), proč není převeden?

Konverze OKP klíčů (Ed25519, Ed448, X25519, X448) vyžaduje specifickou logiku a odlišné DER kódování od RSA a EC klíčů. Tato verze nástroje podporuje pouze RSA a EC. Nepodporované klíče jsou signalizovány individuálně s chybovou zprávou, bez blokování analýzy ostatních položek JWKS.

Lze získat JWKS z URL místo vložení?

Ne v této verzi. Nástroj neprovádí žádné outbound HTTP volání pro zachování rychlosti a vyhnutí se tomu, aby se choval jako nedobrovolný proxy. Stáhněte JWKS z vašeho prohlížeče nebo s curl https://priklad.com/.well-known/jwks.json a pak vložte obsah do vstupního pole.

Ukázka požadavku

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é Výchozí
jwks text

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všechny dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - získá schéma tohoto nástroje
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - spustí tento nástroj s JSON payloadem