Ein JWKS inspizieren und öffentliche Schlüssel als PEM extrahieren
- Dashboard
- Dokumentation
- API
Was ist ein JWKS?
Ein JWKS (JSON Web Key Set, RFC 7517) ist ein JSON-Dokument, das eine Liste öffentlicher Schlüssel in strukturierter Form gruppiert. Es dient dazu, die Schlüssel zu veröffentlichen, die ein JWT-Aussteller zum Signieren seiner Tokens verwendet, damit jeder Konsument sie abrufen und die Signatur der empfangenen Tokens überprüfen kann. Das Format sieht stets so aus:
{
"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": "..." }
]
}
Jeder Eintrag des keys-Arrays ist ein JWK (JSON Web Key), der
einen öffentlichen Schlüssel beschreibt: Schlüsseltyp (kty), Bezeichner (kid), vorgesehene Verwendung
(use), Zielalgorithmus (alg) und kryptografische Komponenten.
Wann wird ein JWKS verwendet?
JWKS ist das Rückgrat moderner OAuth2- und OpenID-Connect-Architekturen. Sie begegnen ihm in mehreren Kontexten:
- OIDC-Discovery: Jeder OpenID-Connect-Anbieter stellt ein Konfigurationsdokument
unter
/.well-known/openid-configurationbereit, das ein Feldjwks_urienthält. Unter dieser URL findet sich ein JWKS, das die aktiven öffentlichen Schlüssel auflistet. - JWT-Überprüfung: Wenn Ihre API ein in RS256 oder ES256 signiertes Token empfängt,
liest sie das
kidaus dem Header, lädt das JWKS des Ausstellers herunter, findet den entsprechenden Schlüssel, leitet daraus den öffentlichen Schlüssel im PEM-Format ab und überprüft die Signatur. - Schlüsselrotation: Ein Aussteller kann mehrere Schlüssel gleichzeitig veröffentlichen, was es ermöglicht, einen neuen Schlüssel zum Signieren neuer Tokens einzuführen, während der alte im Dienst bleibt, bis die im Umlauf befindlichen Tokens ablaufen.
- Föderationen: SAML, SCIM, miteinander verbundene Dienste, die Veröffentlichung eines JWKS erspart den manuellen Austausch von X.509-Zertifikaten zwischen Partnern.
Wesentliche Felder eines JWK
Einige Felder erscheinen systematisch in einem JWK. Dieses Tool extrahiert sie und zeigt sie für jeden Schlüssel des analysierten JWKS an:
kid(key ID): eindeutiger Bezeichner des Schlüssels. Das ist der Wert, den der Header eines JWT in seinkid-Feld setzt, um anzugeben, welcher Schlüssel des JWKS zur Überprüfung verwendet werden soll.kty(key type): kryptografische Familie. Die beiden dominanten Werte sindRSA(klassische RSA-Schlüssel, verwendet mit RS256, RS384, RS512) undEC(elliptische Kurven, verwendet mit ES256, ES384, ES512).alg(algorithm): Signaturalgorithmus, für den dieser Schlüssel vorgesehen ist. Optionales, aber häufig ausgefülltes Feld. Erlaubt das schnelle Filtern der für ein bestimmtes JWT verwendbaren Schlüssel.use: Verwendung des Schlüssels.sigfür die Signatur (üblicher Fall),encfür die Verschlüsselung (selten, mit JWE verwendet).
Warum einen JWK in PEM konvertieren?
Die meisten klassischen kryptografischen Bibliotheken (OpenSSL, openssl_verify in
PHP, crypto in Node.js, JCA in Java) akzeptieren öffentliche Schlüssel im
PEM-Format (Base64 eingerahmt von -----BEGIN PUBLIC KEY-----), nicht direkt
im JWK-Format. Die Konvertierung eines JWK in PEM ist daher unverzichtbar für:
- die manuelle Überprüfung einer JWT-Signatur aus einem Skript oder einem Kommandozeilen-Tool
(
jwt,jose,step crypto). - das Importieren des Schlüssels in ein Debug-Tool wie JWT Verifier, das in seinem "Öffentlicher-Schlüssel"-Feld einen PEM-Schlüssel erwartet.
- das Speichern eines Schlüssels im lokalen Cache oder in einer Konfigurationsdatei in einer universellen und lesbaren Form.
- den schnellen Vergleich zweier Schlüssel (das PEM-Format erleichtert visuelle Diffs).
Grenzen und Warnungen
Dieses Tool unterstützt öffentliche Schlüssel RSA (kty=RSA) und EC
(kty=EC auf den Kurven P-256, P-384,
P-521). Andere Typen (OKP für Ed25519, oct für
symmetrische Schlüssel) werden nicht konvertiert: Sie werden mit einer Fehlermeldung pro
Eintrag signalisiert, der Rest des JWKS bleibt lesbar.
- Die Konvertierung erfolgt nur in eine Richtung: JWKS zu PEM. Die Rekonstruktion eines JWK aus einem bestehenden PEM-Schlüssel wird von dieser Version nicht abgedeckt.
- Das JWKS muss unverändert als JSON-Text eingefügt werden. Der automatische Abruf
von einer
jwks_uri-URL oder einem OIDC-Endpoint erfolgt nicht serverseitig, um unvorhergesehene ausgehende Aufrufe zu vermeiden. - Private Schlüssel sollten nicht in einem öffentlichen JWKS erscheinen, und dieses Tool extrahiert auch dann nur die öffentlichen Komponenten, wenn ein privater Schlüssel vorhanden wäre.
So verwenden Sie es
- Holen Sie sich das JWKS des Ausstellers, den Sie inspizieren möchten. Für einen OIDC-Anbieter
lautet die Adresse in der Regel
https://exemple.com/.well-known/jwks.jsonoderhttps://exemple.com/oauth2/jwks. - Kopieren Sie das gesamte JSON-Dokument (das Objekt, das den Schlüssel
keysenthält). - Fügen Sie es in das Eingabefeld des Tools ein und starten Sie die Analyse.
- Für jeden Schlüssel des JWKS zeigt das Tool sein
kid, seinkty, seinalg, seinuseund den ins PEM-Format konvertierten öffentlichen Schlüssel an. - Klicken Sie auf "kopieren", um die PEM abzurufen und sie in einem Verifizierungsskript, in unserem JWT Verifier oder in jedem OpenSSL-kompatiblen Tool zu verwenden.
Häufig gestellte Fragen
Wo findet man das JWKS eines OIDC-Anbieters?
Die meisten OpenID-Connect-Anbieter veröffentlichen ein Discovery-Dokument unter
https://exemple.com/.well-known/openid-configuration. Dieses JSON enthält ein Feld
jwks_uri, das auf das tatsächliche JWKS verweist. Einige Anbieter stellen das JWKS direkt
unter https://exemple.com/.well-known/jwks.json oder unter einem dedizierten OAuth2-Endpoint
bereit. Laden Sie den Inhalt herunter und fügen Sie ihn hier unverändert ein.
Warum ist die kid wichtig?
Die kid (key ID) ist der Bezeichner, den der Header eines JWT in sein eigenes
kid-Feld setzt, um anzugeben, welcher Schlüssel des JWKS zur Überprüfung verwendet werden soll. Ohne diesen
Bezeichner müsste der Konsument jeden Schlüssel des JWKS ausprobieren, was die Diagnose im
Fehlerfall erschwert. Das Vorhandensein einer kid pro Schlüssel gilt daher als Best Practice,
und alle ernsthaften IdPs veröffentlichen eine.
Was ist der Unterschied zwischen kty=RSA und kty=EC?
RSA ist die historische Familie asymmetrischer Signaturen, verwendet mit RS256, RS384, RS512. Die
Schlüssel werden durch ein Modulo n und einen Exponenten e beschrieben. EC (Elliptic
Curve) ist neuer und liefert bei gleichem Sicherheitsniveau kürzere Signaturen.
EC-Schlüssel werden durch eine Kurve (crv = P-256, P-384 oder P-521) und zwei
Koordinaten x und y beschrieben. Dieses Tool konvertiert beide Familien in PEM.
Wie verwendet man die extrahierte PEM, um ein JWT zu überprüfen?
Kopieren Sie die PEM und fügen Sie sie dann in das Feld "Öffentlicher Schlüssel" unseres
JWT Verifier zusammen mit dem zu validierenden JWT ein. Sie können
sie auch von der Kommandozeile mit openssl dgst verwenden, von Node.js mit
crypto.verify, von Python mit cryptography oder
PyJWT, von Java mit der JCA usw. Das PEM-Format wird universell anerkannt.
Mein JWKS enthält einen Ed25519-Schlüssel (OKP), warum wird er nicht konvertiert?
Die Konvertierung von OKP-Schlüsseln (Ed25519, Ed448, X25519, X448) erfordert eine
spezifische Logik und eine andere DER-Kodierung als die von RSA- und EC-Schlüsseln. Diese Version des Tools
unterstützt nur RSA und EC. Nicht unterstützte Schlüssel werden
einzeln mit einer Fehlermeldung signalisiert, ohne die Analyse der übrigen JWKS-Einträge zu blockieren.
Kann man das JWKS von einer URL holen, statt es einzufügen?
In dieser Version nicht. Das Tool führt keinen ausgehenden HTTP-Aufruf durch, um schnell zu bleiben und
zu vermeiden, dass es als unfreiwilliger Proxy agiert. Laden Sie das JWKS aus Ihrem Browser oder mit
curl https://exemple.com/.well-known/jwks.json herunter und fügen Sie den Inhalt dann in das
Eingabefeld ein.
Beispielanfrage
curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
-H "Content-Type: application/json" \
-d '{"jwks":"..."}'
Eingabeschema
| Feld | Typ | Erforderlich | Standard |
|---|---|---|---|
jwks |
text | – |
Endpunkte
GET https://cdrn.fr/api/v1/tools- listet alle verfügbaren Tools aufGET https://cdrn.fr/api/v1/tools/jwks-inspector- liefert das Schema dieses ToolsPOST https://cdrn.fr/api/v1/tools/jwks-inspector/execute- führt dieses Tool mit einem JSON-Payload aus