JWKS vizsgálata és PEM nyilvános kulcsok kinyerése
- Irányítópult
- Dokumentáció
- API
Mi az a JWKS?
A JWKS (JSON Web Key Set, RFC 7517) egy JSON dokumentum, amely strukturált formában csoportosítja a nyilvános kulcsok listáját. Arra szolgál, hogy közzétegye azokat a kulcsokat, amelyeket egy JWT kibocsátó a tokenjei aláírásához használ, így bármely fogyasztó lekérheti azokat, és ellenőrizheti a kapott tokenek aláírását. A formátum mindig így néz ki:
{
"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": "..." }
]
}
A keys tömb minden eleme egy JWK (JSON Web Key), amely leír egy nyilvános kulcsot: kulcs típusa (kty), azonosító (kid), tervezett használat (use), célalgoritmus (alg) és kriptográfiai összetevők.
Mikor hasznos a JWKS?
A JWKS a modern OAuth2 és OpenID Connect architektúrák gerince. Több összefüggésben is találkozhat vele:
- OIDC felfedezés: minden OpenID Connect szolgáltató közzétesz egy konfigurációs dokumentumot a
/.well-known/openid-configurationcímen, amely tartalmaz egyjwks_urimezőt. Ezen az URL-en található egy JWKS, amely felsorolja az aktív nyilvános kulcsokat. - JWT ellenőrzés: amikor API-ja RS256 vagy ES256 aláírással ellátott tokent kap, kiolvassa a fejlécből a
kid-et, letölti a kibocsátó JWKS-ét, megkeresi a megfelelő kulcsot, származtatja belőle a PEM formátumú nyilvános kulcsot, és ellenőrzi az aláírást. - Kulcsrotáció: a kibocsátó egyszerre több kulcsot is közzétehet, ami lehetővé teszi új kulcs bevezetését az új tokenek aláírásához, miközben a régit használatban tartja, amíg a forgalomban lévő tokenek le nem járnak.
- Föderációk: SAML, SCIM, összekapcsolt szolgáltatások; a JWKS közzététele elkerülhetővé teszi az X.509 tanúsítványok kézi cseréjét a partnerek között.
Egy JWK alapvető mezői
Néhány mező szisztematikusan visszatér a JWK-ban. Ez az eszköz kinyeri és megjeleníti őket az elemzett JWKS minden kulcsához:
kid(key ID): a kulcs egyedi azonosítója. Ez az az érték, amelyet a JWT fejléce akidmezőjébe tesz, hogy jelezze, melyik JWKS kulcsot kell használni az ellenőrzéshez.kty(key type): kriptográfiai család. A két meghatározó érték azRSA(klasszikus RSA kulcsok, RS256, RS384, RS512 esetén használatos) és azEC(elliptikus görbék, ES256, ES384, ES512 esetén használatos).alg(algorithm): az aláíró algoritmus, amelyhez ezt a kulcsot szánják. Opcionális mező, de gyakran kitöltik. Lehetővé teszi az adott JWT-hez használható kulcsok gyors szűrését.use: a kulcs használata.sigaz aláíráshoz (szokásos eset),enca titkosításhoz (ritka, JWE-vel használatos).
Miért konvertáljunk JWK-t PEM-re?
A klasszikus kriptográfiai könyvtárak többsége (OpenSSL, openssl_verify PHP-ben, crypto Node.js-ben, JCA Java-ban) a nyilvános kulcsokat PEM formátumban fogadja el (Base64, -----BEGIN PUBLIC KEY----- kerettel), nem közvetlenül JWK formátumban. A JWK PEM-re konvertálása ezért elengedhetetlen a következőkhöz:
- A JWT aláírásának manuális ellenőrzése szkriptből vagy parancssori eszközből (
jwt,jose,step crypto). - A kulcs importálása egy hibakereső eszközbe, mint például a JWT Verifier, amely PEM kulcsot vár a "nyilvános kulcs" mezőjében.
- Kulcs tárolása helyi gyorsítótárban vagy konfigurációs fájlban univerzális és olvasható formában.
- Két kulcs gyors összehasonlítása (a PEM formátum megkönnyíti a vizuális diff-et).
Korlátok és figyelmeztetések
Ez az eszköz támogatja az RSA (kty=RSA) és az EC (kty=EC a P-256, P-384, P-521 görbéken) nyilvános kulcsokat. Más típusok (OKP Ed25519-hez, oct szimmetrikus kulcsokhoz) nem konvertálódnak: ezeket bejegyzésenkénti hibaüzenet jelzi, a JWKS többi része olvasható marad.
- A konverzió egy irányban történik: JWKS-ről PEM-re. A JWK rekonstrukciója meglévő PEM kulcsból nem szerepel ebben a verzióban.
- A JWKS-t úgy kell beilleszteni, ahogy van, JSON szöveg formájában. Az URL-ről (
jwks_uri) vagy OIDC végpontról történő automatikus lekérés nem a szerveroldalon történik, a váratlan kimenő hívások elkerülése érdekében. - A privát kulcsok nem jelenhetnek meg nyilvános JWKS-ben, és ez az eszköz csak a nyilvános összetevőket nyeri ki, még akkor is, ha privát kulcs van jelen.
Hogyan használjuk
- Szerezze be annak a kibocsátónak a JWKS-ét, amelyet ellenőrizni szeretne. Egy OIDC szolgáltató esetében a cím általában
https://pelda.hu/.well-known/jwks.jsonvagyhttps://pelda.hu/oauth2/jwks. - Másolja le a teljes JSON dokumentumot (a
keyskulcsot tartalmazó objektumot). - Illessze be az eszköz beviteli területére, és indítsa el az elemzést.
- A JWKS minden kulcsához az eszköz megjeleníti a
kid,kty,alg,useértékeket és a PEM formátumra konvertált nyilvános kulcsot. - Kattintson a "másolás" gombra a PEM lekéréséhez, és használja azt ellenőrző szkriptben, JWT Verifier eszközünkben vagy bármely OpenSSL-kompatibilis eszközben.
Gyakran ismételt kérdések
Hol találom egy OIDC szolgáltató JWKS-ét?
Az OpenID Connect szolgáltatók túlnyomó többsége közzétesz egy felfedezési dokumentumot a https://pelda.hu/.well-known/openid-configuration címen. Ez a JSON tartalmaz egy jwks_uri mezőt, amely a tényleges JWKS-re mutat. Egyes szolgáltatók közvetlenül a https://pelda.hu/.well-known/jwks.json címen vagy egy dedikált OAuth2 végponton szolgálják ki a JWKS-t. Töltse le a tartalmat, és illessze be ide úgy, ahogy van.
Miért fontos a kid?
A kid (key ID) az az azonosító, amelyet a JWT fejléce a saját kid mezőjébe tesz, hogy jelezze, melyik JWKS kulcsot kell használni az ellenőrzéshez. Ezen azonosító nélkül a fogyasztónak a JWKS minden kulcsát meg kellene próbálnia, ami hiba esetén megnehezíti a diagnózist. Ezért a kulcsonkénti kid megléte jó gyakorlatnak minősül, és minden komoly IdP közzétesz ilyet.
Mi a különbség a kty=RSA és a kty=EC között?
Az RSA az aszimmetrikus aláírások történelmi családja, amelyet az RS256, RS384, RS512 esetén használnak. A kulcsokat egy n modulo és egy e kitevő írja le. Az EC (Elliptic Curve) újabb, és rövidebb aláírásokat ad azonos biztonsági szint mellett. Az EC kulcsokat egy görbe (crv = P-256, P-384 vagy P-521) és két koordináta (x és y) írja le. Ez az eszköz mindkét családot PEM-re konvertálja.
Hogyan használjuk a kinyert PEM-et egy JWT ellenőrzéséhez?
Másolja ki a PEM-et, majd illessze be a JWT Verifier "nyilvános kulcs" mezőjébe az ellenőrizni kívánt JWT-vel együtt. Használhatja a parancssorból is az openssl dgst segítségével, Node.js-ből a crypto.verify-vel, Pythonból a cryptography vagy PyJWT könyvtárral, Javából a JCA-val stb. A PEM formátum univerzálisan elismert.
A JWKS-em Ed25519 (OKP) kulcsot tartalmaz, miért nem konvertálja?
Az OKP kulcsok (Ed25519, Ed448, X25519, X448) konvertálása specifikus logikát és az RSA és EC kulcsokétól eltérő DER kódolást igényel. Az eszköz ezen verziója csak az RSA és EC kulcsokat támogatja. A nem kezelt kulcsokat egyéni hibaüzenet jelzi, anélkül, hogy blokkolná a JWKS többi bejegyzésének elemzését.
Lekérhető-e a JWKS URL-ről a beillesztés helyett?
Ebben a verzióban nem. Az eszköz nem végez kimenő HTTP hívásokat, hogy gyors maradjon, és elkerülje, hogy akaratlanul proxyként működjön. Töltse le a JWKS-t böngészőjéből vagy a curl https://pelda.hu/.well-known/jwks.json segítségével, majd illessze be a tartalmat a beviteli mezőbe.
Kérés példa
curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
-H "Content-Type: application/json" \
-d '{"jwks":"..."}'
Bemeneti séma
| Mező | Típus | Kötelező | Alapértelmezett |
|---|---|---|---|
jwks |
text | ✓ | – |
Végpontok
GET https://cdrn.fr/api/v1/tools- listázza az összes elérhető eszköztGET https://cdrn.fr/api/v1/tools/jwks-inspector- lekéri ezen eszköz sémájátPOST https://cdrn.fr/api/v1/tools/jwks-inspector/execute- végrehajtja ezen eszközt JSON payloaddal