Inspicer et JWKS og udtræk de offentlige PEM-nøgler

inspicerer et JWK Set (JSON Web Key Set) og udtrækker hver offentlig nøgle i PEM-format, klar til brug for at verificere JWT-signaturer fra en identitetsudbyder (OIDC, Auth0, Keycloak…)
Indsæt hele indholdet af et JWKS-dokument, for eksempel det der eksponeres på /.well-known/jwks.json.

Hvad er en JWKS?

Et JWKS (JSON Web Key Set, RFC 7517) er et JSON-dokument, der grupperer en liste over offentlige nøgler i struktureret form. Det bruges til at offentliggøre de nøgler, som en JWT-udsteder bruger til at underskrive sine tokens, så enhver forbruger kan afhente dem og verificere signaturen på de tokens, den modtager. Formatet ser altid sådan ud:

{
  "nøgler": [
    { "kty": "RSA", "kid": "abc123", "use": "sig", "alg": "RS256", "n": "...", "e": "AQAB" },
    { "kty": "EC", "kid": "def456", "use": "sig", "alg": "ES256", "crv": "P-256", "x": "...", "y": "..." }
  ]
}

Hver indtastning i tabellen keys er en JWK (JSON Web Key), som beskriver en offentlig nøgle: nøgletype (kty), identifikator (kid), brug beregnet (brug), målalgoritme (alg) og kryptografiske komponenter.

Hvornår bruges en JWKS?

JWKS er rygraden i moderne OAuth2- og OpenID Connect-arkitekturer. Dig vil møde i flere sammenhænge:

  • OIDC Discovery: enhver OpenID Connect-udbyder afslører et dokument af konfiguration på /.well-known/openid-configuration som indeholder et felt jwks_uri. På denne URL er der en JWKS med aktive offentlige nøgler.
  • JWT-bekræftelse: Når din API modtager et token, der er signeret i RS256 eller ES256, den læser kid i headeren, downloader JWKS for senderen, finder nøglen tilsvarende, udleder den offentlige nøgle i PEM-format og verificerer signaturen.
  • Nøglerotation: en udsteder kan udgive flere nøgler samtidigt, dette som giver dig mulighed for at introducere en ny nøgle til at signere de nye tokens, mens du beholder den gamle i tjeneste, mens de tokens, der er i omløb, udløber.
  • Federationer: SAML, SCIM, sammenkoblede tjenester, udgivelse af en JWKS undgår at skulle manuelt udveksle X.509-certifikater mellem partnere.

Væsentlige områder af en JWK

Nogle felter optræder systematisk i en JWK. Dette værktøj udtrækker og viser dem for hver nøgle i JWKS analyseret:

  • kid (nøgle-id): unikt id for nøglen. Det er denne værdi at overskriften på en JWT sætter i dens kid felt for at angive hvilken nøgle i JWKS skal bruges til verifikation.
  • kty (nøgletype): kryptografisk familie. De to værdier dominerende er RSA (klassiske RSA-nøgler, brugt med RS256, RS384, RS512) og EC (elliptiske kurver, brugt med ES256, ES384, ES512).
  • alg (algoritme): signaturalgoritme, for hvilken denne nøgle er planlagt. Valgfrit felt, men ofte udfyldt. Giver dig mulighed for hurtigt at filtrere nøgler kan bruges til en given JWT.
  • brug: brug af nøglen. sig for signaturen (ca sædvanlig), enc til kryptering (sjælden, brugt med JWE).

Hvorfor konvertere en JWK til PEM?

Størstedelen af klassiske kryptografiske biblioteker (OpenSSL, openssl_verify i PHP, crypto i Node.js, JCA i Java) accepterer offentlige nøgler i formatet PEM (Base64 indrammet af -----BEGIN PUBLIC KEY-----), ikke direkte i JWK-format. Konvertering af en JWK til PEM er derfor afgørende for:

  • Bekræft manuelt signaturen af en JWT fra et script eller et kommandolinjeværktøj (jwt, jose, trinkrypto).
  • Importer nøglen til et fejlretningsværktøj som JWT Verifier som forventer en PEM-nøgle i sit "offentlige nøgle"-felt.
  • Gem en nøgle i en lokal cache eller i en konfigurationsfil i en universel form og læsbar.
  • Sammenlign hurtigt to nøgler (PEM-formatet letter visuelle forskelle).

Begrænsninger og advarsler

Dette værktøj understøtter RSA (kty=RSA) og EC offentlige nøgler (kty=EC på kurver P-256, P-384, P-521). Andre typer (OKP for Ed25519, okt for symmetriske nøgler) konverteres ikke: de rapporteres med en fejlmeddelelse af input, forbliver resten af JWKS'en læsbar.

  • Konverteringen udføres i én retning: JWKS til PEM. Den genopbygning af en JWK fra en eksisterende PEM-nøgle er ikke omfattet af dette version.
  • JWKS skal indsættes som det er som JSON-tekst. Genopretning automatisk fra en URL jwks_uri eller et OIDC-slutpunkt udføres ikke side server for at undgå uventede udgående opkald.
  • Private nøgler skal ikke vises i en offentlig JWKS, og dette værktøj udtrækker ikke end offentlige komponenter, selvom en privat nøgle var til stede.

Hvordan man bruger det

  1. Hent JWKS'en for den sender, du vil inspicere. For en OIDC-udbyder, adressen er normalt https://example.com/.well-known/jwks.json eller https://example.com/oauth2/jwks.
  2. Kopiér hele JSON-dokumentet (objektet, der indeholder nøglen nøgler).
  3. Indsæt det i værktøjsinputfeltet, og start analysen.
  4. For hver JWKS-nøgle viser værktøjet dens kid, dens kty, dens alg, dets brug og den offentlige nøgle konverteret til PEM-format.
  5. Klik på "kopi" for at hente PEM'en og bruge den i et verifikationsscript, i vores JWT Verifier eller i et hvilket som helst kompatibelt værktøj OpenSSL.

Ofte stillede spørgsmål

Hvor kan jeg finde JWKS for en OIDC-udbyder?

Langt de fleste OpenID Connect-udbydere udgiver et opdagelsesdokument på https://example.com/.well-known/openid-configuration. Denne JSON indeholder et felt jwks_uri som peger på den faktiske JWKS. Nogle leverandører betjener direkte JWKS på https://example.com/.well-known/jwks.json eller på et OAuth2-slutpunkt dedikeret. Download indholdet og indsæt det her, som det er.

Hvorfor er barnet vigtigt?

kid (nøgle-id) er den identifikator, som overskriften på en JWT sætter i sit eget felt kid for at angive, hvilken JWKS-nøgle der skal bruges til verifikation. Uden dette identifikator, ville forbrugeren skulle forsøge hver nøgle i JWKS, hvilket komplicerer diagnosen med tilfælde af fejl. Tilstedeværelsen af et barn pr. nøgle betragtes derfor som et godt praktisk, og alle seriøse IdP'er udgiver en.

Hvad er forskellen mellem kty=RSA og kty=EC?

RSA er den historiske familie af asymmetriske signaturer, brugt med RS256, RS384, RS512. Den nøgler er beskrevet af en modulo n og en eksponent e. EC (Elliptisk Curve) er nyere og giver kortere signaturer for et tilsvarende sikkerhedsniveau. EC-nøgler er beskrevet af én kurve (crv = P-256, P-384 eller P-521) og to x og y koordinater. Dette værktøj konverterer begge familier til PEM.

Hvordan bruger man den udtrukne PEM til at verificere en JWT?

Kopier PEM'en, og indsæt den derefter i feltet "offentlig nøgle" i vores JWT Verifier med JWT for at validere. Du kan også brug det fra kommandolinjen med openssl dgst, fra Node.js med crypto.verify, fra Python med cryptography eller PyJWT, fra Java med JCA osv. PEM-formatet er universelt anerkendt.

Min JWKS indeholder en Ed25519 (OKP) nøgle, hvorfor konverteres den ikke?

Konvertering af OKP-nøgler (Ed25519, Ed448, X25519, X448) kræver logik specifik og en DER-kodning forskellig fra den for RSA- og EC-nøgler. Denne version af værktøjet gør det ikke understøtter kun RSA og EC. Ikke-administrerede nøgler rapporteres individuelt med en fejlmeddelelse uden at blokere analysen af andre JWKS-poster.

Kan vi hente JWKS'en fra en URL i stedet for at indsætte den?

Ikke i denne version. Værktøjet foretager ingen udgående HTTP-opkald for at forblive hurtige og undgå at fungere som en utilsigtet fuldmagt. Download JWKS fra din browser eller med curl https://example.com/.well-known/jwks.json indsæt derefter indholdet i feltet indgang.

Anmodningseksempel

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

Inputskema

Felt Type Påkrævet Standard
jwks text

Endpoints

  • GET https://cdrn.fr/api/v1/tools - lister alle tilgængelige værktøjer
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - henter skemaet for dette værktøj
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - udfører dette værktøj med et JSON-payload