Inspectarea unui JWKS și extragerea cheilor publice PEM
- Panou de control
- Documentație
- API
Ce este un JWKS?
Un JWKS (JSON Web Key Set, RFC 7517) este un document JSON care grupează o listă de chei publice sub formă structurată. Servește la publicarea cheilor pe care un emitent de JWT le utilizează pentru a-și semna token-urile, astfel încât orice consumator să le poată recupera și verifica semnătura token-urilor pe care le primește. Formatul se prezintă întotdeauna astfel:
{
"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": "..." }
]
}
Fiecare intrare a tabloului keys este o JWK (JSON Web Key) care
descrie o cheie publică: tip de cheie (kty), identificator (kid), utilizare
prevăzută (use), algoritm țintă (alg) și componente criptografice.
Când servește un JWKS?
JWKS-ul este coloana vertebrală a arhitecturilor OAuth2 și OpenID Connect moderne. Îl vei întâlni în mai multe contexte:
- Descoperire OIDC: orice furnizor OpenID Connect expune un document de
configurare la
/.well-known/openid-configurationcare conține un câmpjwks_uri. La acest URL se găsește un JWKS listând cheile publice active. - Verificare a JWT: când API-ul tău primește un token semnat în RS256 sau ES256,
citește
kid-ul header-ului, descarcă JWKS-ul emitentului, găsește cheia corespunzătoare, derivă cheia publică în format PEM, și verifică semnătura. - Rotație de chei: un emitent poate publica mai multe chei simultan, ceea ce permite introducerea unei noi chei pentru a semna noile token-uri păstrând totodată vechea cheie în serviciu cât timp expiră token-urile în circulație.
- Federations: SAML, SCIM, servicii interconectate, publicarea unui JWKS evită schimbul manual de certificate X.509 între parteneri.
Câmpuri esențiale ale unei JWK
Câteva câmpuri revin sistematic într-o JWK. Acest instrument le extrage și le afișează pentru fiecare cheie a JWKS-ului analizat:
kid(key ID): identificator unic al cheii. Această valoare este cea pe care header-ul unui JWT o pune în câmpul săukidpentru a indica care cheie a JWKS-ului trebuie să servească la verificare.kty(key type): familie criptografică. Cele două valori dominante suntRSA(chei RSA clasice, utilizate cu RS256, RS384, RS512) șiEC(curbe eliptice, utilizate cu ES256, ES384, ES512).alg(algorithm): algoritm de semnătură pentru care această cheie este prevăzută. Câmp facultativ dar adesea completat. Permite filtrarea rapidă a cheilor utilizabile pentru un JWT dat.use: utilizarea cheii.sigpentru semnătură (caz uzual),encpentru criptare (rar, utilizat cu JWE).
De ce să convertești o JWK în PEM?
Majoritatea bibliotecilor criptografice clasice (OpenSSL, openssl_verify în
PHP, crypto în Node.js, JCA în Java) acceptă cheile publice în format
PEM (Base64 încadrat de -----BEGIN PUBLIC KEY-----), nu direct
în format JWK. Conversia unei JWK în PEM este deci indispensabilă pentru:
- A verifica manual semnătura unui JWT dintr-un script sau instrument în linie de comandă
(
jwt,jose,step crypto). - A importa cheia într-un instrument de debug precum JWT Verifier care așteaptă o cheie PEM în câmpul său "cheie publică".
- A stoca o cheie în cache local sau într-un fișier de configurare sub o formă universală și lizibilă.
- A compara rapid două chei (formatul PEM facilitează diff-urile vizuale).
Limite și avertismente
Acest instrument ia în considerare cheile publice RSA (kty=RSA) și EC
(kty=EC pe curbele P-256, P-384,
P-521). Celelalte tipuri (OKP pentru Ed25519, oct pentru
cheile simetrice) nu sunt convertite: sunt semnalate cu un mesaj de eroare per
intrare, restul JWKS-ului rămâne lizibil.
- Conversia se efectuează într-o singură direcție: JWKS spre PEM. Reconstrucția unei JWK dintr-o cheie PEM existentă nu este acoperită de această versiune.
- JWKS-ul trebuie să fie lipit ca atare sub formă de text JSON. Recuperarea
automată dintr-un URL
jwks_urisau dintr-un endpoint OIDC nu se face pe partea serverului, pentru a evita apelurile ieșite imprevizibile. - Cheile private nu trebuie să apară într-un JWKS public, iar acest instrument extrage doar componentele publice chiar dacă o cheie privată ar fi prezentă.
Cum să-l utilizezi
- Recuperează JWKS-ul emitentului pe care vrei să-l inspectezi. Pentru un furnizor OIDC,
adresa este în general
https://exemplu.com/.well-known/jwks.jsonsauhttps://exemplu.com/oauth2/jwks. - Copiază integralitatea documentului JSON (obiectul conținând cheia
keys). - Lipește-l în zona de intrare a instrumentului și lansează analiza.
- Pentru fiecare cheie a JWKS-ului, instrumentul afișează
kid-ul său,kty-ul său,alg-ul său,use-ul său și cheia publică convertită în format PEM. - Apasă pe "copiere" pentru a recupera PEM-ul și a-l utiliza într-un script de verificare, în JWT Verifier-ul nostru, sau în orice instrument compatibil OpenSSL.
Întrebări frecvente
Unde să găsesc JWKS-ul unui furnizor OIDC?
Marea majoritate a furnizorilor OpenID Connect publică un document de descoperire pe
https://exemplu.com/.well-known/openid-configuration. Acest JSON conține un câmp
jwks_uri care indică spre JWKS-ul efectiv. Câțiva furnizori servesc direct
JWKS-ul pe https://exemplu.com/.well-known/jwks.json sau pe un endpoint OAuth2
dedicat. Descarcă conținutul și lipește-l aici ca atare.
De ce este kid-ul important?
kid-ul (key ID) este identificatorul pe care header-ul unui JWT îl pune în propriul său câmp
kid pentru a indica care cheie a JWKS-ului trebuie să servească la verificare. Fără acest
identificator, consumatorul ar trebui să încerce fiecare cheie a JWKS-ului, ceea ce complică diagnosticul în
caz de eroare. Prezența unui kid per cheie este deci considerată ca o bună
practică, și toți IdP serioși publică unul.
Care este diferența între kty=RSA și kty=EC?
RSA este familia istorică de semnături asimetrice, utilizată cu RS256, RS384, RS512.
Cheile sunt descrise printr-un modulo n și un exponent e. EC (Elliptic
Curve) este mai recent și dă semnături mai scurte pentru un nivel de securitate echivalent.
Cheile EC sunt descrise printr-o curbă (crv = P-256, P-384 sau P-521) și două
coordonate x și y. Acest instrument convertește ambele familii în PEM.
Cum să utilizezi PEM-ul extras pentru a verifica un JWT?
Copiază PEM-ul, apoi lipește-l în câmpul "cheie publică" al JWT Verifier-ului
nostru cu JWT-ul de validat. Îl poți utiliza de asemenea din linia de comandă cu openssl dgst,
din Node.js cu crypto.verify, din Python cu cryptography sau
PyJWT, din Java cu JCA, etc. Formatul PEM este universal recunoscut.
JWKS-ul meu conține o cheie Ed25519 (OKP), de ce nu este convertită?
Conversia cheilor OKP (Ed25519, Ed448, X25519, X448) cere o logică
specifică și o codare DER diferită de cea a cheilor RSA și EC. Această versiune a instrumentului
ia în considerare doar RSA și EC. Cheile negestionate sunt semnalate
individual cu un mesaj de eroare, fără a bloca analiza celorlalte intrări ale JWKS-ului.
Poți recupera JWKS-ul dintr-un URL în loc să-l lipești?
Nu în această versiune. Instrumentul nu realizează niciun apel HTTP ieșit pentru a rămâne rapid și a evita
să acționeze ca un proxy involuntar. Descarcă JWKS-ul din browserul tău sau cu
curl https://exemplu.com/.well-known/jwks.json apoi lipește conținutul în câmpul
de intrare.
Exemplu de cerere
curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
-H "Content-Type: application/json" \
-d '{"jwks":"..."}'
Schema de intrare
| Câmp | Tip | Obligatoriu | Implicit |
|---|---|---|---|
jwks |
text | ✓ | – |
Puncte de acces
GET https://cdrn.fr/api/v1/tools- listează toate instrumentele disponibileGET https://cdrn.fr/api/v1/tools/jwks-inspector- obține schema acestui instrumentPOST https://cdrn.fr/api/v1/tools/jwks-inspector/execute- execută acest instrument cu un payload JSON