Ispezionare un JWKS ed estrarre le chiavi pubbliche in PEM
- Dashboard
- Documentazione
- API
Cos'è un JWKS?
Un JWKS (JSON Web Key Set, RFC 7517) è un documento JSON che raggruppa una lista di chiavi pubbliche in forma strutturata. Serve a pubblicare le chiavi che un emettitore di JWT usa per firmare i suoi token, affinché qualsiasi consumatore possa recuperarle e verificare la firma dei token che riceve. Il formato si presenta sempre così:
{
"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": "..." }
]
}
Ogni voce dell'array keys è una JWK (JSON Web Key) che
descrive una chiave pubblica: tipo di chiave (kty), identificatore (kid), uso
previsto (use), algoritmo target (alg) e componenti crittografiche.
Quando serve un JWKS?
Il JWKS è la spina dorsale delle architetture OAuth2 e OpenID Connect moderne. Lo incontrerete in vari contesti:
- Discovery OIDC: ogni provider OpenID Connect espone un documento di
configurazione a
/.well-known/openid-configurationche contiene un campojwks_uri. A questo URL si trova un JWKS che elenca le chiavi pubbliche attive. - Verifica di JWT: quando la vostra API riceve un token firmato in RS256 o ES256,
legge il
kiddell'header, scarica il JWKS dell'emettitore, ritrova la chiave corrispondente, ne deriva la chiave pubblica nel formato PEM, e verifica la firma. - Rotazione di chiavi: un emettitore può pubblicare più chiavi simultaneamente, il che permette di introdurre una nuova chiave per firmare i nuovi token mantenendo l'antica in servizio finché i token in circolazione scadono.
- Federazioni: SAML, SCIM, servizi interconnessi, la pubblicazione di un JWKS evita di dover scambiare manualmente certificati X.509 tra partner.
Campi essenziali di una JWK
Alcuni campi ricorrono sistematicamente in una JWK. Questo strumento li estrae e li mostra per ogni chiave del JWKS analizzato:
kid(key ID): identificatore unico della chiave. È questo valore che l'header di un JWT mette nel suo campokidper indicare quale chiave del JWKS deve servire alla verifica.kty(key type): famiglia crittografica. I due valori dominanti sonoRSA(chiavi RSA classiche, usate con RS256, RS384, RS512) edEC(curve ellittiche, usate con ES256, ES384, ES512).alg(algorithm): algoritmo di firma per il quale questa chiave è prevista. Campo facoltativo ma spesso indicato. Permette di filtrare rapidamente le chiavi utilizzabili per un dato JWT.use: uso della chiave.sigper la firma (caso usuale),encper la cifratura (raro, usato con JWE).
Perché convertire una JWK in PEM?
La maggior parte delle librerie crittografiche classiche (OpenSSL, openssl_verify in
PHP, crypto in Node.js, la JCA in Java) accetta le chiavi pubbliche nel formato
PEM (Base64 incorniciato da -----BEGIN PUBLIC KEY-----), non direttamente
nel formato JWK. Convertire una JWK in PEM è quindi indispensabile per:
- Verificare manualmente la firma di un JWT da uno script o uno strumento da riga di comando
(
jwt,jose,step crypto). - Importare la chiave in uno strumento di debug come JWT Verifier che attende una chiave PEM nel suo campo "chiave pubblica".
- Memorizzare una chiave in cache locale o in un file di configurazione in una forma universale e leggibile.
- Confrontare rapidamente due chiavi (il formato PEM facilita i diff visivi).
Limiti e avvertenze
Questo strumento supporta le chiavi pubbliche RSA (kty=RSA) ed EC
(kty=EC sulle curve P-256, P-384,
P-521). Gli altri tipi (OKP per Ed25519, oct per
le chiavi simmetriche) non sono convertiti: vengono segnalati con un messaggio di errore per
voce, il resto del JWKS resta leggibile.
- La conversione si effettua in una sola direzione: JWKS verso PEM. La ricostruzione di una JWK a partire da una chiave PEM esistente non è coperta da questa versione.
- Il JWKS deve essere incollato così com'è come testo JSON. Il recupero
automatico da un URL
jwks_urio un endpoint OIDC non è fatto lato server, per evitare chiamate uscenti impreviste. - Le chiavi private non dovrebbero apparire in un JWKS pubblico, e questo strumento estrae solo le componenti pubbliche anche se una chiave privata fosse presente.
Come usarlo
- Recuperate il JWKS dell'emettitore che volete ispezionare. Per un provider OIDC,
l'indirizzo è generalmente
https://esempio.com/.well-known/jwks.jsonohttps://esempio.com/oauth2/jwks. - Copiate l'intero documento JSON (l'oggetto contenente la chiave
keys). - Incollatelo nella zona di input dello strumento e avviate l'analisi.
- Per ogni chiave del JWKS, lo strumento mostra il suo
kid, il suokty, il suoalg, il suousee la chiave pubblica convertita nel formato PEM. - Cliccate su "copia" per recuperare la PEM e usarla in uno script di verifica, nel nostro JWT Verifier, o in qualsiasi strumento compatibile OpenSSL.
Domande frequenti
Dove trovare il JWKS di un provider OIDC?
La grande maggioranza dei provider OpenID Connect pubblica un documento di discovery su
https://esempio.com/.well-known/openid-configuration. Questo JSON contiene un campo
jwks_uri che punta al JWKS effettivo. Alcuni provider servono direttamente
il JWKS su https://esempio.com/.well-known/jwks.json o su un endpoint OAuth2
dedicato. Scaricate il contenuto e incollatelo qui così com'è.
Perché il kid è importante?
Il kid (key ID) è l'identificatore che l'header di un JWT mette nel proprio campo
kid per indicare quale chiave del JWKS deve servire alla verifica. Senza questo
identificatore, il consumatore dovrebbe provare ogni chiave del JWKS, il che complica la diagnosi in
caso di errore. La presenza di un kid per chiave è quindi considerata una buona
pratica, e tutti gli IdP seri ne pubblicano uno.
Qual è la differenza tra kty=RSA e kty=EC?
RSA è la famiglia storica di firme asimmetriche, usata con RS256, RS384, RS512. Le
chiavi sono descritte da un modulo n e un esponente e. EC (Elliptic
Curve) è più recente e dà firme più corte per un livello di sicurezza equivalente.
Le chiavi EC sono descritte da una curva (crv = P-256, P-384 o P-521) e due
coordinate x e y. Questo strumento converte le due famiglie in PEM.
Come usare la PEM estratta per verificare un JWT?
Copiate la PEM, poi incollatela nel campo "chiave pubblica" del nostro
JWT Verifier con il JWT da validare. Potete anche
usarla da riga di comando con openssl dgst, da Node.js con
crypto.verify, da Python con cryptography o
PyJWT, da Java con la JCA, ecc. Il formato PEM è universalmente riconosciuto.
Il mio JWKS contiene una chiave Ed25519 (OKP), perché non è convertita?
La conversione delle chiavi OKP (Ed25519, Ed448, X25519, X448) richiede una logica
specifica e una codifica DER diversa da quella delle chiavi RSA e EC. Questa versione dello strumento
supporta solo RSA ed EC. Le chiavi non gestite vengono segnalate
individualmente con un messaggio di errore, senza bloccare l'analisi delle altre voci del JWKS.
Si può recuperare il JWKS da un URL invece di incollarlo?
Non in questa versione. Lo strumento non effettua alcuna chiamata HTTP uscente per restare rapido ed evitare
di agire come proxy involontario. Scaricate il JWKS dal vostro browser o con
curl https://esempio.com/.well-known/jwks.json poi incollate il contenuto nel campo
di input.
Esempio di richiesta
curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
-H "Content-Type: application/json" \
-d '{"jwks":"..."}'
Schema di input
| Campo | Tipo | Richiesto | Predefinito |
|---|---|---|---|
jwks |
text | – |
Endpoint
GET https://cdrn.fr/api/v1/tools- elenca tutti gli strumenti disponibiliGET https://cdrn.fr/api/v1/tools/jwks-inspector- recupera lo schema di questo strumentoPOST https://cdrn.fr/api/v1/tools/jwks-inspector/execute- esegue questo strumento con un payload JSON