Inspektirati JWKS i izvući javne ključeve PEM

inspektira JWK Set (JSON Web Key Set) i izvlači svaki javni ključ u PEM formatu, spreman za upotrebu za provjeru JWT potpisa od pružatelja identiteta (OIDC, Auth0, Keycloak…)
Zalijepite cijeli sadržaj JWKS dokumenta, na primjer onaj izložen na /.well-known/jwks.json.

Što je JWKS?

JWKS (JSON Web Key Set, RFC 7517) je JSON dokument koji grupira popis javnih ključeva u strukturiranom obliku. Koristi se za objavljivanje ključeva koje JWT izdavatelj koristi za potpisivanje svojih tokena, tako da ih svaki potrošač može preuzeti i provjeriti potpis tokena koje prima. Format uvijek izgleda ovako:

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

Svaki unos u tablici ključevi je JWK (JSON web ključ) koji opisuje javni ključ: tip ključa (kty), identifikator (kid), upotreba namijenjen (use), ciljni algoritam (alg) i kriptografske komponente.

Kada se koristi JWKS?

JWKS je okosnica modernih OAuth2 i OpenID Connect arhitektura. ti će se susresti u nekoliko konteksta:

  • OIDC Discovery: bilo koji pružatelj OpenID Connect izlaže dokument o konfiguracija na /.well-known/openid-configuration koja sadrži polje jwks_uri. Na ovom URL-u postoji JWKS popis aktivnih javnih ključeva.
  • JWT potvrda: kada vaš API primi token potpisan u RS256 ili ES256, čita kid zaglavlja, preuzima JWKS odašiljača, pronalazi ključ odgovarajući, izvodi javni ključ u PEM formatu i provjerava potpis.
  • Rotacija ključeva: izdavatelj može objaviti nekoliko ključeva istovremeno, ovo što vam omogućuje uvođenje novog ključa za potpisivanje novih tokena uz zadržavanje stari je u upotrebi dok tokeni u optjecaju istječu.
  • Federacije: SAML, SCIM, međusobno povezane usluge, objavljivanje JWKS-a izbjegava ručnu razmjenu X.509 certifikata između partnera.

Bitna polja JWK

Neka se polja sustavno pojavljuju u JWK-u. Ovaj ih alat izdvaja i prikazuje za svaki analizirani ključ JWKS-a:

  • kid (ID ključa): jedinstveni identifikator ključa. To je ova vrijednost koje zaglavlje JWT-a stavlja u polje kid kako bi naznačilo koji ključ JWKS-a mora se koristiti za provjeru.
  • kty (tip ključa): kriptografska obitelj. Dvije vrijednosti dominantni su RSA (klasični RSA ključevi, koji se koriste s RS256, RS384, RS512) i EC (eliptične krivulje, koriste se s ES256, ES384, ES512).
  • alg (algoritam): algoritam potpisa za koji je ovaj ključ planirano je. Neobavezno polje, ali se često ispunjava. Omogućuje brzo filtriranje ključeva upotrebljiv za određeni JWT.
  • use: upotreba ključa. sig za potpis (velika i mala slova uobičajeno), enc za šifriranje (rijetko, koristi se s JWE).

Zašto pretvoriti JWK u PEM?

Većina klasičnih kriptografskih biblioteka (OpenSSL, openssl_verify u PHP, crypto u Node.js, JCA u Javi) prihvaćaju javne ključeve u formatu PEM (Base64 uokviren -----BEGIN PUBLIC KEY-----), ne izravno u JWK formatu. Pretvaranje JWK u PEM stoga je neophodno za:

  • Ručno provjerite potpis JWT-a iz skripte ili alata naredbenog retka (jwt, jose, step crypto).
  • Uvezite ključ u alat za otklanjanje pogrešaka kao što je JWT Verifier koji očekuje PEM ključ u svom polju "javni ključ".
  • Pohranite ključ u lokalnu predmemoriju ili u konfiguracijsku datoteku u univerzalnom obliku i čitljiv.
  • Brzo usporedite dva ključa (PEM format olakšava vizualne razlike).

Ograničenja i upozorenja

Ovaj alat podržava RSA (kty=RSA) i EC javne ključeve (kty=EC na krivuljama P-256, P-384, P-521). Ostale vrste (OKP za Ed25519, oct za simetrični ključevi) se ne pretvaraju: prijavljuju ih porukom o pogrešci unos, ostatak JWKS ostaje čitljiv.

  • Konverzija se vrši u jednom smjeru: JWKS u PEM. The ponovna izrada JWK-a iz postojećeg PEM ključa nije obuhvaćena ovime verzija.
  • JWKS mora biti zalijepljen kakav jest kao JSON tekst. Oporavak automatski s URL-a jwks_uri ili OIDC krajnje točke nije učinjeno poslužitelj, kako biste izbjegli neočekivane odlazne pozive.
  • Privatni ključevi ne bi se trebali pojavljivati u javnom JWKS-u, a ovaj alat ne izdvaja nego javne komponente čak i ako je privatni ključ bio prisutan.

Kako ga koristiti

  1. Dohvatite JWKS odašiljača koji želite pregledati. Za davatelja OIDC, adresa je obično https://example.com/.well-known/jwks.json ili https://example.com/oauth2/jwks.
  2. Kopirajte cijeli JSON dokument (objekt koji sadrži ključ keys).
  3. Zalijepite ga u okvir za unos alata i pokrenite analizu.
  4. Za svaki JWKS ključ, alat prikazuje njegov kid, njegov kty, njegov alg, njegova uporaba i javni ključ pretvoren u PEM format.
  5. Kliknite na "kopiraj" da biste dohvatili PEM i upotrijebili ga u skripti za provjeru, u naš JWT Verifier ili u bilo kojem kompatibilnom alatu OpenSSL.

Često postavljana pitanja

Gdje mogu pronaći JWKS davatelja OIDC?

Velika većina pružatelja usluga OpenID Connect objavljuje dokument otkrića na https://example.com/.well-known/openid-configuration. Ovaj JSON sadrži polje jwks_uri koji ukazuje na stvarni JWKS. Neki dobavljači služe izravno JWKS na https://example.com/.well-known/jwks.json ili na OAuth2 krajnjoj točki posvećena. Preuzmite sadržaj i zalijepite ga ovdje kakav jest.

Zašto je dijete važno?

kid (ID ključa) je identifikator koji zaglavlje JWT-a stavlja u vlastito polje kid za označavanje koji JWKS ključ treba koristiti za provjeru. Bez ovoga identifikator, potrošač bi morao isprobati svaki ključ JWKS-a, što komplicira dijagnozu slučaj pogreške. Prisutnost djeteta po ključu se stoga smatra dobrom praktičan, a svi ozbiljni IdP-ovi objavljuju jedan.

Koja je razlika između kty=RSA i kty=EC?

RSA je povijesna obitelj asimetričnih potpisa, koja se koristi s RS256, RS384, RS512. The ključevi su opisani modulom n i eksponentom e. EC (Eliptični Curve) je noviji i daje kraće potpise za ekvivalentnu razinu sigurnosti. EC ključevi su opisani jednom krivuljom (crv = P-256, P-384 ili P-521) i dvije x i y koordinate. Ovaj alat pretvara obje obitelji u PEM.

Kako koristiti izdvojeni PEM za provjeru JWT-a?

Kopirajte PEM, zatim ga zalijepite u polje "javni ključ" našeg JWT Verifier s JWT-om za provjeru. Možete također koristite ga iz naredbenog retka s openssl dgst, iz Node.js s crypto.verify, iz Pythona s kriptografijom ili PyJWT, iz Jave s JCA, itd. PEM format je univerzalno prepoznat.

Moj JWKS sadrži ključ Ed25519 (OKP), zašto nije pretvoren?

Konverzija ključeva OKP (Ed25519, Ed448, X25519, X448) zahtijeva logiku specifično i DER kodiranje različito od RSA i EC ključeva. Ova verzija alata nema podržava samo RSA i EC. Prijavljeni su neupravljani ključevi pojedinačno s porukom o pogrešci, bez blokiranja analize drugih JWKS unosa.

Možemo li dohvatiti JWKS iz URL-a umjesto da ga zalijepimo?

Ne u ovoj verziji. Alat ne čini nikakve odlazne HTTP pozive kako bi ostao brz i izbjegao ih djelovati kao nenamjerni posrednik. Preuzmite JWKS iz svog preglednika ili s curl https://example.com/.well-known/jwks.json zatim zalijepite sadržaj u polje unos.

Primjer zahtjeva

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

Ulazna shema

Polje Tip Obavezno Zadano
jwks text

Krajnje točke

  • GET https://cdrn.fr/api/v1/tools - ispisuje sve dostupne alate
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - dohvaća shemu ovog alata
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - izvršava ovaj alat s JSON payloadom