Signing-Zertifikate¶
IdentityServerNET signiert jedes ausgestellte Token (ID-Token, Access-Token, …) mit einem
asymmetrischen X.509-Zertifikat und veröffentlicht die zugehörigen öffentlichen Schlüssel über die
jwks_uri aus dem Discovery-Dokument, damit Clients und APIs Tokens verifizieren können. Diese Seite
beschreibt, wie diese Zertifikate erzeugt, gespeichert, rotiert und aufgeräumt werden.
Speicherung¶
Standardmäßig werden Zertifikate als passwortgeschützte .pfx-Dateien unter
<StorageRootPath>/storage/validation gespeichert (siehe Konfiguration).
Das ist der Standard, selbst ohne jede explizite SigningCredential-Konfiguration.
"SigningCredential": {
"Storage": "c:\\apps\\identityserver-net\\storage\\validation", // optionaler Override
"CertPassword": "...", // optional
"InMemoryOnly": true // optional, default: false
}
Storage überschreibt den Standard-Speicherort.
InMemoryOnly hält die Zertifikate nur im Speicher statt auf der Festplatte — bei jedem Neustart gehen dann alle Zertifikate verloren. Nur für Tests oder Entwicklung verwenden, niemals in Produktion, und niemals mit mehr als einer Instanz (jede Instanz würde sonst ihren eigenen, unterschiedlichen Signing-Key bekommen).
Passwortschutz¶
Die Zertifikatsdateien werden mit einem Passwort geschützt, damit der private Schlüssel nicht einfach
durch Kopieren der .pfx-Datei von der Festplatte nutzbar wird.
Ist CertPassword explizit gesetzt, wird dieses Passwort verwendet.
Ist es nicht gesetzt, wird beim ersten Start der Anwendung ein zufälliges Passwort erzeugt und neben den Zertifikaten als verschlüsselte
.certpassword.protected-Datei gespeichert (geschützt über die Standard-.NET-Data Protection API — denselben Schlüsselkreis, der auch überDataProtectionKeysPathkonfiguriert wird). Jeder weitere Start verwendet dasselbe Passwort wieder. Jede Installation erhält damit automatisch ihr eigenes, einzigartiges Passwort, ohne manuelle Konfiguration.
Bemerkung
Werden mehrere Instanzen gegen denselben, geteilten Speicherpfad betrieben, müssen alle Instanzen
denselben Data-Protection-Schlüsselkreis verwenden (siehe die Methode data-protection im
Crypto-Abschnitt unter Konfiguration) — sonst kann es passieren, dass
eine Instanz ein Passwort erzeugt, das eine andere Instanz nicht entschlüsseln kann.
Lebenszyklus der Zertifikate¶
Ein neu erzeugtes Zertifikat ist technisch sehr lange gültig, aber IdentityServerNET behandelt nur
Zertifikate, die innerhalb der letzten 60 Tage erzeugt wurden, als aktiv — nur diese werden über
die jwks_uri veröffentlicht und können neue Tokens signieren. Dieses 60-Tage-Fenster ist es, was
automatische Rotation überhaupt sinnvoll macht: ein Fenster, das sich nie ändert, würde keinerlei
Rotation bedeuten.
Signing-Key vs. Validation-Keys
Das zuletzt erzeugte Zertifikat innerhalb des aktiven Fensters wird zum Signieren neu ausgestellter Tokens verwendet.
Alle Zertifikate innerhalb des aktiven Fensters werden als Validation-Keys veröffentlicht — ein Token, das kurz vor einer Rotation signiert wurde, bleibt damit danach weiterhin verifizierbar, statt plötzlich die Validierung zu verlieren.
Automatische Rotation, ohne Neustart
Ein Hintergrunddienst prüft periodisch, ob das neueste Zertifikat einen konfigurierbaren
Schwellenwert überschritten hat, und erzeugt gegebenenfalls ein neues — ganz ohne dass die Anwendung
neu gestartet werden muss. Das lässt sich über denselben SigningCredential-Konfigurationsabschnitt
einstellen:
"SigningCredential": {
"CheckInterval": "06:00:00", // optional, default: 6 Stunden
"RenewIfOlderThanDays": 60, // optional, default: 60
"CacheDuration": "00:15:00" // optional, default: 15 Minuten
}
CheckInterval: Wie oft der Hintergrunddienst prüft, ob ein neues Zertifikat benötigt wird.
RenewIfOlderThanDays: Ein neues Zertifikat wird erzeugt, sobald das aktuell neueste älter als diese Anzahl Tage ist.
CacheDuration: Die laufende Anwendung liest die Zertifikatsliste nicht bei jeder einzelnen Token-Anfrage neu aus dem Speicher — die aktuell aktiven Signing-/Validation-Keys werden für diese Dauer zwischengespeichert, bevor erneut nachgesehen wird. Ein neu erzeugtes Zertifikat wird also innerhalb dieses Cache-Fensters zum aktiven Signing-Key, nicht sofort.
Aufräumen alter Zertifikatsdateien
Zertifikatsdateien (bzw. bei InMemoryOnly die entsprechenden Einträge im Speicher), die schon eine
Weile außerhalb des aktiven Fensters liegen, werden nicht mehr benötigt und automatisch gelöscht — genauer
gesagt, sobald sie älter sind als das Dreifache der Aktiv-Schwelle (Standard: 60 * 3 = 180 Tage).
Diese Karenzzeit über das 60-Tage-Fenster hinaus existiert, damit ein langlebiges Token, das kurz vor
dem Verlassen des aktiven Fensters ausgestellt wurde, noch eine Weile validiert werden kann. Das
Aufräumen läuft als Teil derselben periodischen Hintergrundprüfung, die oben beschrieben ist — altes
Schlüsselmaterial sammelt sich damit nicht unbegrenzt auf der Festplatte an.
Bemerkung
Zertifikate werden nie unmittelbar gelöscht, sobald sie nicht mehr aktiv sind — sondern erst, wenn sie deutlich über den Punkt hinaus sind, an dem ein realistisch langlebiges Token sie noch referenzieren könnte.
Zusammenfassung¶
Einstellung |
Wirkung |
|---|---|
|
Wo die Zertifikatsdateien gespeichert werden. Standard: |
|
Zertifikate nur im Speicher halten (Entwicklung/Test, nur eine einzelne Instanz). |
|
Passwort, das die Zertifikatsdateien schützt. Standard: ein einmal pro Installation zufällig erzeugtes Passwort. |
|
Wie oft der Hintergrunddienst prüft, ob eine Rotation nötig ist. Standard: 6 Stunden. |
|
Alters-Schwellenwert (in Tagen), der die Erzeugung eines neuen Zertifikats auslöst. Standard: 60. |
|
Wie lange eine laufende Instanz die aktiven Signing-/Validation-Keys zwischenspeichert, bevor erneut aus dem Speicher gelesen wird. Standard: 15 Minuten. |