Skip to Content
DocsAuthorityAustausch der Signierungsschlüssel

Austausch der Signierungsschlüssel

Die Authority signiert alle ausgestellten Tokens mit einem privaten Schlüssel. Dieser Schlüssel kann aus Sicherheitsgründen regelmäßig ausgetauscht werden (Key Rotation).

Übersicht

Die Authority unterstützt mehrere Signierungsschlüssel gleichzeitig. Beim Austausch wird ein neuer Schlüssel hinzugefügt und der alte nach einer Übergangsphase entfernt.

Vorteile der Key Rotation:

  • Erhöhte Sicherheit durch regelmäßigen Schlüsselaustausch
  • Keine Downtime beim Austausch
  • Unterstützung mehrerer aktiver Schlüssel gleichzeitig

JWKS Endpoints

Die Authority stellt zwei Endpunkte für die Verwaltung der Signierungsschlüssel bereit:

Schlüssel hinzufügen

POST /jwks/add

Fügt einen neuen Signierungsschlüssel hinzu.

Request Body:

{ "keyType": "RSA", "keySize": 2048 }

Unterstützte Key Types:

  • RSA - RSA Schlüssel (empfohlen)
  • EC - Elliptic Curve Schlüssel
  • OKP - Octet Key Pair

Response:

{ "kid": "2024-01-15T10:30:00.000Z", "kty": "RSA", "alg": "RS256", "use": "sig", "n": "...", "e": "AQAB" }

Schlüssel entfernen

DELETE /jwks/remove/:kid

Entfernt einen Signierungsschlüssel anhand seiner Key ID (kid).

Beispiel:

curl -X DELETE http://authority:11560/jwks/remove/2024-01-15T10:30:00.000Z

Response:

{ "message": "Key removed successfully" }

Key Rotation Prozess

  1. Neuen Schlüssel hinzufügen:

    curl -X POST http://authority:11560/jwks/add \ -H "Content-Type: application/json" \ -d '{"keyType": "RSA", "keySize": 2048}'
  2. Übergangsphase:

    • Die Authority signiert neue Tokens mit dem neuen Schlüssel
    • Alte Tokens können weiterhin mit dem alten Schlüssel verifiziert werden
    • Empfohlene Dauer: 2x Access Token TTL (z.B. 2 Stunden bei 1h TTL)
  3. Alten Schlüssel entfernen:

    curl -X DELETE http://authority:11560/jwks/remove/OLD_KID

Automatisierung

Die Key Rotation kann über ein Cronjob automatisiert werden:

#!/bin/bash # key-rotation.sh AUTHORITY_URL="http://authority:11560" TTL_SECONDS=3600 # 1 Stunde ROTATION_INTERVAL=$((TTL_SECONDS * 2)) # 2 Stunden # Neuen Schlüssel hinzufügen NEW_KEY=$(curl -X POST $AUTHORITY_URL/jwks/add \ -H "Content-Type: application/json" \ -d '{"keyType": "RSA", "keySize": 2048}') echo "Neuer Schlüssel hinzugefügt: $(echo $NEW_KEY | jq -r '.kid')" # Warte auf Übergangsphase sleep $ROTATION_INTERVAL # Alte Schlüssel entfernen (behalte nur die letzten 2) OLD_KEYS=$(curl $AUTHORITY_URL/.well-known/jwks.json | jq -r '.keys[2:] | .[].kid') for KID in $OLD_KEYS; do curl -X DELETE $AUTHORITY_URL/jwks/remove/$KID echo "Alter Schlüssel entfernt: $KID" done

Public Key Distribution

Clients können die öffentlichen Schlüssel über den JWKS-Endpunkt abrufen:

GET http://authority:11560/.well-known/jwks.json

Response:

{ "keys": [ { "kid": "2024-01-15T10:30:00.000Z", "kty": "RSA", "alg": "RS256", "use": "sig", "n": "...", "e": "AQAB" } ] }

Best Practices

  • Rotiere Schlüssel regelmäßig (z.B. alle 30 Tage)
  • Behalte mindestens 2 aktive Schlüssel während der Übergangsphase
  • Verwende RSA-Schlüssel mit mindestens 2048 Bit
  • Automatisiere den Rotationsprozess
  • Überwache die Schlüsselanzahl (nicht mehr als 5 aktive Schlüssel)
  • Teste die Rotation zunächst in einer Entwicklungsumgebung