Een JWKS inspecteren en publieke sleutels in PEM extraheren
- Dashboard
- Documentatie
- API
Wat is een JWKS?
Een JWKS (JSON Web Key Set, RFC 7517) is een JSON-document dat een lijst van publieke sleutels in gestructureerde vorm groepeert. Het dient om de sleutels te publiceren die een JWT-uitgever gebruikt om zijn tokens te ondertekenen, zodat elke consument ze kan ophalen en de handtekening van de tokens die hij ontvangt kan verifiëren. Het formaat ziet er altijd zo uit:
{
"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": "..." }
]
}
Elke entry van de array keys is een JWK (JSON Web Key) die
een publieke sleutel beschrijft: sleuteltype (kty), identifier (kid), beoogd
gebruik (use), doelalgoritme (alg) en cryptografische componenten.
Wanneer dient een JWKS?
JWKS is de ruggengraat van moderne OAuth2- en OpenID Connect-architecturen. U zult het in verschillende contexten tegenkomen:
- OIDC-discovery: elke OpenID Connect-provider exposeert een configuratiedocument
op
/.well-known/openid-configurationdat eenjwks_uri-veld bevat. Op deze URL bevindt zich een JWKS met de actieve publieke sleutels. - JWT-verificatie: wanneer uw API een token ontvangt dat is ondertekend in RS256 of ES256,
leest het de
kidvan de header, downloadt het de JWKS van de uitgever, vindt de overeenkomstige sleutel, leidt daaruit de publieke sleutel in PEM-formaat af, en verifieert de handtekening. - Sleutelrotatie: een uitgever kan meerdere sleutels gelijktijdig publiceren, wat het mogelijk maakt om een nieuwe sleutel in te voeren voor het ondertekenen van nieuwe tokens terwijl de oude in dienst blijft gedurende de tijd dat de circulerende tokens vervallen.
- Federaties: SAML, SCIM, onderling verbonden services, de publicatie van een JWKS vermijdt het handmatig uitwisselen van X.509-certificaten tussen partners.
Essentiële velden van een JWK
Enkele velden komen systematisch terug in een JWK. Deze tool extraheert ze en toont ze voor elke sleutel van de geanalyseerde JWKS:
kid(key ID): unieke identifier van de sleutel. Het is deze waarde die de header van een JWT plaatst in zijnkid-veld om aan te geven welke sleutel van de JWKS moet dienen voor de verificatie.kty(key type): cryptografische familie. De twee dominante waarden zijnRSA(klassieke RSA-sleutels, gebruikt met RS256, RS384, RS512) enEC(elliptische krommen, gebruikt met ES256, ES384, ES512).alg(algorithm): handtekeningsalgoritme waarvoor deze sleutel is bedoeld. Optioneel veld maar vaak ingevuld. Maakt het mogelijk om snel sleutels te filteren die bruikbaar zijn voor een gegeven JWT.use: gebruik van de sleutel.sigvoor handtekening (gebruikelijk geval),encvoor versleuteling (zeldzaam, gebruikt met JWE).
Waarom een JWK naar PEM converteren?
De meeste klassieke cryptografische bibliotheken (OpenSSL, openssl_verify in
PHP, crypto in Node.js, JCA in Java) accepteren publieke sleutels in
PEM-formaat (Base64 ingekaderd door -----BEGIN PUBLIC KEY-----), niet direct
in JWK-formaat. Een JWK naar PEM converteren is dus onmisbaar om:
- Handmatig de handtekening van een JWT te verifiëren vanuit een script of een opdrachtregeltool
(
jwt,jose,step crypto). - De sleutel te importeren in een debug-tool zoals JWT Verifier die een PEM-sleutel verwacht in zijn "publieke sleutel"-veld.
- Een sleutel op te slaan in lokale cache of een configuratiebestand in een universele en leesbare vorm.
- Snel twee sleutels te vergelijken (het PEM-formaat vergemakkelijkt visuele diffs).
Beperkingen en waarschuwingen
Deze tool ondersteunt publieke sleutels RSA (kty=RSA) en EC
(kty=EC op de krommen P-256, P-384,
P-521). De andere typen (OKP voor Ed25519, oct voor
symmetrische sleutels) worden niet geconverteerd: ze worden gesignaleerd met een foutmelding per
entry, de rest van de JWKS blijft leesbaar.
- De conversie gebeurt in één richting: JWKS naar PEM. De reconstructie van een JWK uit een bestaande PEM-sleutel valt niet onder deze versie.
- De JWKS moet zo geplakt worden als JSON-tekst. Automatisch ophalen
vanuit een
jwks_uri-URL of een OIDC-endpoint wordt niet aan de serverkant gedaan, om onverwachte uitgaande oproepen te voorkomen. - Privésleutels zouden niet moeten verschijnen in een publieke JWKS, en deze tool extraheert alleen de publieke componenten, zelfs als een privésleutel aanwezig zou zijn.
Hoe u het gebruikt
- Haal de JWKS op van de uitgever die u wilt inspecteren. Voor een OIDC-provider,
is het adres meestal
https://voorbeeld.com/.well-known/jwks.jsonofhttps://voorbeeld.com/oauth2/jwks. - Kopieer het volledige JSON-document (het object met de
keys-sleutel). - Plak het in het invoergebied van de tool en start de analyse.
- Voor elke sleutel van de JWKS toont de tool zijn
kid, zijnkty, zijnalg, zijnuseen de naar PEM-formaat geconverteerde publieke sleutel. - Klik op "kopiëren" om de PEM terug te halen en deze te gebruiken in een verificatiescript, in onze JWT Verifier, of in elke OpenSSL-compatibele tool.
Veelgestelde vragen
Waar vind ik de JWKS van een OIDC-provider?
De overgrote meerderheid van OpenID Connect-providers publiceren een discovery-document op
https://voorbeeld.com/.well-known/openid-configuration. Deze JSON bevat een
jwks_uri-veld dat naar de daadwerkelijke JWKS verwijst. Enkele providers serveren
de JWKS direct op https://voorbeeld.com/.well-known/jwks.json of op een speciale
OAuth2-endpoint. Download de inhoud en plak deze hier als zodanig.
Waarom is de kid belangrijk?
De kid (key ID) is de identifier die de header van een JWT plaatst in zijn eigen
kid-veld om aan te geven welke sleutel van de JWKS moet dienen voor de verificatie. Zonder deze
identifier zou de consument elke sleutel van de JWKS moeten proberen, wat de diagnose
bij fouten compliceert. De aanwezigheid van een kid per sleutel wordt dus beschouwd als een goede
praktijk, en alle serieuze IdP's publiceren er een.
Wat is het verschil tussen kty=RSA en kty=EC?
RSA is de historische familie van asymmetrische handtekeningen, gebruikt met RS256, RS384, RS512. De
sleutels worden beschreven door een modulus n en een exponent e. EC (Elliptic
Curve) is recenter en geeft kortere handtekeningen voor een equivalent beveiligingsniveau.
EC-sleutels worden beschreven door een kromme (crv = P-256, P-384 of P-521) en twee
coördinaten x en y. Deze tool converteert beide families naar PEM.
Hoe gebruik ik de geëxtraheerde PEM om een JWT te verifiëren?
Kopieer de PEM en plak deze vervolgens in het "publieke sleutel"-veld van onze
JWT Verifier met de te valideren JWT. U kunt deze ook
gebruiken vanaf de opdrachtregel met openssl dgst, vanuit Node.js met
crypto.verify, vanuit Python met cryptography of
PyJWT, vanuit Java met JCA, enz. Het PEM-formaat wordt universeel herkend.
Mijn JWKS bevat een Ed25519-sleutel (OKP), waarom wordt deze niet geconverteerd?
De conversie van OKP-sleutels (Ed25519, Ed448, X25519, X448) vereist specifieke
logica en een andere DER-codering dan die van RSA- en EC-sleutels. Deze versie van de tool
ondersteunt alleen RSA en EC. De niet-beheerde sleutels worden individueel
gesignaleerd met een foutmelding, zonder de analyse van de andere JWKS-entries te blokkeren.
Kan ik de JWKS vanuit een URL ophalen in plaats van deze te plakken?
Niet in deze versie. De tool voert geen uitgaande HTTP-oproep uit om snel te blijven en te vermijden
als onbedoelde proxy te fungeren. Download de JWKS vanuit uw browser of met
curl https://voorbeeld.com/.well-known/jwks.json en plak vervolgens de inhoud in het
invoerveld.
Voorbeeldverzoek
curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
-H "Content-Type: application/json" \
-d '{"jwks":"..."}'
Invoerschema
| Veld | Type | Vereist | Standaard |
|---|---|---|---|
jwks |
text | – |
Endpoints
GET https://cdrn.fr/api/v1/tools- toont alle beschikbare toolsGET https://cdrn.fr/api/v1/tools/jwks-inspector- geeft het schema van deze tool terugPOST https://cdrn.fr/api/v1/tools/jwks-inspector/execute- voert deze tool uit met een JSON-payload