Tarkasta JWKS ja poimi julkiset PEM-avaimet

tarkastaa JWK Set:n (JSON Web Key Set) ja poimii jokaisen julkisen avaimen PEM-muodossa, valmiina käytettäväksi JWT-allekirjoitusten varmentamiseen identiteetin tarjoajalta (OIDC, Auth0, Keycloak…)
Liitä JWKS-dokumentin koko sisältö, esimerkiksi se, joka on saatavilla osoitteessa /.well-known/jwks.json.

Mikä on JWKS ?

JWKS (JSON Web Key Set, RFC 7517) on JSON-dokumentti, joka sisältää luettelon julkisista avaimista jäsennellyssä muodossa. Sitä käytetään JWT-myöntäjän käyttämien allekirjoitusavainten julkaisemiseen, jotta kuka tahansa vastaanottaja voi noutaa ne ja varmistaa saamansa tunnuksen allekirjoituksen. Muoto näyttää aina tältä :

{
  "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": "..." }
  ]
}

Jokainen keys-taulukon merkintä on JWK (JSON Web Key), joka kuvaa julkisen avaimen : avaintyyppi (kty), tunniste (kid), suunniteltu käyttö (use), kohdealgoritmi (alg) ja kryptografiset komponentit.

Milloin JWKS-avainta käytetään ?

JWKS on nykyaikaisten OAuth2- ja OpenID Connect -arkkitehtuurien selkäranka. Törmäät siihen useissa yhteyksissä :

  • OIDC-haku : jokainen OpenID Connect -toimittaja tarjoaa määritysdokumentin osoitteessa /.well-known/openid-configuration, joka sisältää jwks_uri-kentän. Tässä URL-osoitteessa on JWKS, joka luettelee aktiiviset julkiset avaimet.
  • JWT-varmennus : kun API vastaanottaa RS256- tai ES256-allekirjoitetun tunnuksen, se lukee otsikon kid-kentän, lataa myöntäjän JWKS:n, etsii vastaavan avaimen, johtaa siitä julkisen avaimen PEM-muodossa ja varmistaa allekirjoituksen.
  • Avainten kierto : myöntäjä voi julkaista useita avaimia samanaikaisesti, mikä mahdollistaa uuden avaimen käyttöönoton uusien tunnusten allekirjoittamiseen samalla, kun vanha avain pidetään käytössä, kunnes liikkeellä olevat tunnukset vanhenevat.
  • Federaatiot : SAML, SCIM, toisiinsa kytketyt palvelut; JWKS:n julkaiseminen poistaa tarpeen vaihtaa manuaalisesti X.509-sertifikaatteja kumppaneiden välillä.

JWK-avaimen olennaiset kentät

Jotkut kentät toistuvat säännöllisesti JWK-avaimessa. Tämä työkalu poimii ja näyttää ne jokaiselle analysoidun JWKS:n avaimelle :

  • kid (key ID) : avaimen yksilöllinen tunniste. Tämä on arvo, jonka JWT-otsikko asettaa kid-kenttäänsä ilmoittaakseen, mitä JWKS:n avainta tulee käyttää varmentamiseen.
  • kty (key type) : kryptografinen perhe. Kaksi hallitsevaa arvoa ovat RSA (perinteiset RSA-avaimet, käytetään RS256:n, RS384:n, RS512:n kanssa) ja EC (elliptiset käyrät, käytetään ES256:n, ES384:n, ES512:n kanssa).
  • alg (algorithm) : allekirjoitusalgoritmi, jolle tämä avain on tarkoitettu. Valinnainen kenttä, mutta usein täytetty. Mahdollistaa tietylle JWT:lle käyttökelpoisten avainten nopean suodattamisen.
  • use : avaimen käyttö. sig allekirjoitukseen (tavallinen tapaus), enc salaamiseen (harvinainen, käytetään JWE:n kanssa).

Miksi muuntaa JWK PEM-muotoon ?

Suurin osa klassisista kryptografisista kirjastoista (OpenSSL, openssl_verify PHP:ssä, crypto Node.js:ssä, JCA Javassa) hyväksyy julkiset avaimet PEM-muodossa (Base64-koodattu -----BEGIN PUBLIC KEY----- -kehyksessä), ei suoraan JWK-muodossa. JWK:n muuntaminen PEM-muotoon on siis välttämätöntä seuraaviin tarkoituksiin :

  • Varmista manuaalisesti JWT-allekirjoitus skriptistä tai komentorivityökalusta (jwt, jose, step crypto).
  • Tuo avain virheenkorjaustyökaluun, kuten JWT Verifieriin, joka odottaa PEM-avainta "julkinen avain" -kenttäänsä.
  • Tallenna avain paikalliseen välimuistiin tai määritystiedostoon yleispätevässä ja luettavassa muodossa.
  • Vertaa nopeasti kahta avainta (PEM-muoto helpottaa visuaalista vertailua).

Rajoitukset ja varoitukset

Tämä työkalu tukee julkisia avaimia RSA (kty=RSA) ja EC (kty=EC käyrillä P-256, P-384, P-521). Muita tyyppejä (OKP Ed25519:lle, oct symmetrisille avaimille) ei muunneta : niistä ilmoitetaan virhesanomalla kunkin merkinnän kohdalla, muu osa JWKS:stä pysyy luettavana.

  • Muunnos tapahtuu vain yhteen suuntaan : JWKS:stä PEM-muotoon. JWK:n muodostamista olemassa olevasta PEM-avaimesta ei tueta tässä versiossa.
  • JWKS on liitettävä sellaisenaan JSON-tekstimuodossa. Automaattista noutoa jwks_uri-URL-osoitteesta tai OIDC-päätepisteestä ei tehdä palvelinpuolella odottamattomien ulkoisten kutsujen välttämiseksi.
  • Yksityisten avainten ei kuulu näkyä julkisessa JWKS:ssä, ja tämä työkalu poimii vain julkiset komponentit, vaikka yksityinen avain olisikin mukana.

Kuinka sitä käytetään

  1. Hae sen myöntäjän JWKS, jota haluat tarkastella. OIDC-toimittajalla osoite on yleensä https://esimerkki.com/.well-known/jwks.json tai https://esimerkki.com/oauth2/jwks.
  2. Kopioi koko JSON-dokumentti (objekti, joka sisältää keys-avaimen).
  3. Liitä se työkalun syöttöalueelle ja käynnistä analyysi.
  4. Työkalu näyttää jokaiselle JWKS:n avaimelle sen kid-, kty-, alg- ja use-tiedot sekä PEM-muotoon muunnetun julkisen avaimen.
  5. Napsauta "kopioi" noutaaksesi PEM-avaimen ja käyttääksesi sitä varmistusskriptissä, JWT Verifierissämme tai missä tahansa OpenSSL-yhteensopivassa työkalussa.

Usein kysytyt kysymykset

Mistä löytyy OIDC-toimittajan JWKS ?

Suurin osa OpenID Connect -toimittajista julkaisee hakudokumentin osoitteessa https://esimerkki.com/.well-known/openid-configuration. Tämä JSON sisältää jwks_uri-kentän, joka viittaa varsinaiseen JWKS-avaimeen. Jotkut toimittajat tarjoavat JWKS:n suoraan osoitteessa https://esimerkki.com/.well-known/jwks.json tai erillisessä OAuth2-päätepisteessä. Lataa sisältö ja liitä se tähän sellaisenaan.

Miksi kid on tärkeä ?

kid (key ID) on tunniste, jonka JWT-otsikko asettaa omaan kid-kenttäänsä ilmoittaakseen, mitä JWKS:n avainta tulee käyttää varmentamiseen. Ilman tätä tunnistetta vastaanottajan pitäisi kokeilla jokaista JWKS:n avainta, mikä vaikeuttaa vianmääritystä virhetilanteissa. kid-kentän sisällyttämistä avainta kohden pidetään hyvänä käytäntönä, ja kaikki vakavasti otettavat identiteetintarjoajat julkaisevat sellaisen.

Mitä eroa on kty=RSA:lla ja kty=EC:llä ?

RSA on historiallinen epäsymmetristen allekirjoitusten perhe, jota käytetään RS256:n, RS384:n ja RS512:n kanssa. Avaimia kuvataan modulolla n ja eksponentilla e. EC (Elliptic Curve) on uudempi ja antaa lyhyempiä allekirjoituksia samalla turvallisuustasolla. EC-avaimia kuvataan käyrällä (crv = P-256, P-384 tai P-521) ja kahdella koordinaatilla x ja y. Tämä työkalu muuntaa molemmat perheet PEM-muotoon.

Kuinka poimittua PEM-avainta käytetään JWT:n varmistamiseen ?

Kopioi PEM ja liitä se JWT Verifierimme "julkinen avain" -kenttään yhdessä vahvistettavan JWT:n kanssa. Voit käyttää sitä myös komentoriviltä openssl dgst -komennolla, Node.js:stä crypto.verify-toiminnolla, Pythonista cryptography- tai PyJWT-kirjastoilla, Javasta JCA-kirjastolla jne. PEM-muoto on yleisesti tunnustettu.

JWKS-avaimeni sisältää Ed25519 (OKP) -avaimen, miksi sitä ei muunneta ?

OKP-avainten (Ed25519, Ed448, X25519, X448) muuntaminen vaatii erityistä logiikkaa ja erilaisen DER-koodauksen kuin RSA- ja EC-avaimet. Työkalun tämä versio tukee vain RSA- ja EC-avaimia. Tukemattomista avaimista ilmoitetaan erikseen virhesanomalla estämättä JWKS:n muiden merkintöjen analysointia.

Voiko JWKS-avaimen hakea URL-osoitteesta sen sijaan, että se liitetään ?

Ei tässä versiossa. Työkalu ei tee ulkoisia HTTP-kutsuja nopeuden säilyttämiseksi ja välttääkseen toimimasta tahattomana välityspalvelimena. Lataa JWKS selaimellasi tai curl https://esimerkki.com/.well-known/jwks.json -komennolla ja liitä sisältö syöttökenttään.

Pyyntöesimerkki

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

Syöteskeema

Kenttä Tyyppi Pakollinen Oletus
jwks text

Päätepisteet

  • GET https://cdrn.fr/api/v1/tools - listaa kaikki saatavilla olevat työkalut
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - hakee tämän työkalun skeeman
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - suorittaa tämän työkalun JSON-payloadilla