Fehlercodes
Dies sind die gemeinsamen Fehlercodes der offiziell von DAT unterstützten Service-Bibliotheken.
Jeder Code trägt zwei Werte — Auswirkung und Wiederholung — und einige zusätzlich die Markierung Verdacht.
Auswirkung — was der Dienst abbekommt
Das ist der Maßstab für Alarme. Betrachtet wird nur: „Steht der Dienst gerade still?"
| Auswirkung | Bedeutung | Beispiel |
|---|---|---|
| Kritisch | Der Dienst oder eine bestimmte Funktion steht still. Ausstellung unmöglich, Synchronisierung dauerhaft fehlgeschlagen, Initialisierung fehlgeschlagen | Der ausstellende Server hat kein einziges verwendbares Zertifikat |
| Teilweise | Einzelne Anfragen oder Zyklen schlagen fehl, der Dienst läuft aber weiter. Meist erholt er sich von selbst | Ein CMS-Zyklus schlägt fehl. Mit den vorhandenen Zertifikaten läuft alles weiter |
| Keine Auswirkung | Eine Anfrage wird abgelehnt, mehr nicht | Ein manipuliertes Token kommt an. Aussortieren genügt |
Keine Auswirkung ist kein Alarmfall. Wenn die gesamte Bereitschaft nachsehen müsste, weil einmal eine fehlerhafte Eingabe eintraf, wird der Alarm bedeutungslos.
Verdacht — bei Dauerhaftigkeit untersuchen
Codes mit der Markierung Verdacht sind im Einzelfall Teil des normalen Betriebs. Clients können jederzeit falsche Werte senden, und es ist genau die Aufgabe der Bibliothek, diese auszusortieren.
Treten solche Fehler jedoch dauerhaft oder gehäuft aus einer bestimmten Quelle auf, liegt einer von zwei Fällen vor.
- Konfigurationsfehler — ein fehlerhaftes Deployment, verbliebene Clients einer alten Version oder nicht zueinander passende Zertifikate.
- Angriffsversuch — der Versuch, mit manipulierten Tokens oder Schlüsseln die Prüfung zu bestehen, oder das Abtasten nach gültigen Werten.
Deshalb ist es richtig, für diese Codes die Anzahl als Metrik zu erfassen. Gemeldet wird erst beim Überschreiten eines Schwellenwerts.
Wiederholung
| Wiederholung | Bedeutung |
|---|---|
| Vorübergehend | Löst sich mit einem erneuten Versuch nach Backoff |
| Dauerhaft | Nicht wiederholen. Konfiguration oder Eingabe muss korrigiert werden |
| Status | Kein Fehler, sondern ein Signal |
Token
Probleme mit der empfangenen Token-Zeichenkette selbst.
DAT_TOKEN_MALFORMED Die durch Punkte getrennten Teile sind nicht genau fünf, expire ist nicht rein dezimal, cid ist nicht rein hexadezimal, plain oder secure ist kein base64url, oder ein Zahlenfeld überschreitet den darstellbaren Ganzzahlbereich.
arrow_forwardAnfrage ablehnen
DAT_TOKEN_EXPIREDexpire <= now. Auch der exakte Zeitpunkt gilt als abgelaufen — bei expire == now ist das Token bereits abgelaufen.
arrow_forwardNeuausstellung des Tokens veranlassen
DAT_TOKEN_UNKNOWNEin Token-Fehler, der sich keiner der obigen Kategorien zuordnen lässt.
arrow_forwardLogs prüfen
Ablauf und Formatfehler niemals vermischen
Die Reaktionen sind gegensätzlich — Ablauf ist ein normales Lebensende, hier genügt es, das Token erneuern zu lassen; ein Formatfehler bedeutet, dass das Token von vornherein nicht von uns stammt und abgelehnt werden muss.
Beim Parsen wird zuerst die Struktur festgestellt, danach werden die Werte betrachtet. Eine Zeichenkette wie "1.2.3" mit zu wenigen Teilen ist kein abgelaufenes Token, sondern von vornherein kein Token — also DAT_TOKEN_MALFORMED.
Auch ein Vorzeichen im Feld expire, etwa +100, ist kein Ablauf, sondern ein Formatfehler. Erlaubt sind ausschließlich reine ASCII-Ziffern.
Zertifikat
Das Format der Zertifikatszeichenkette und die Frage, ob dieses Zertifikat jetzt verwendbar ist.
DAT_CERT_MALFORMED Die durch Punkte getrennten Teile sind nicht genau acht, das Parsen von cid, start, duration oder ttl ist fehlgeschlagen, ein Schlüsselfeld ist kein base64url, oder start + duration + ttl überschreitet u64.
arrow_forwardZertifikat neu ausrollen
DAT_CERT_EXPIREDstart + duration + ttl < now. Vollständig abgelaufen — weder Ausstellung noch Prüfung sind möglich.
arrow_forwardZertifikat erneuern
DAT_CERT_NOT_YET_ISSUABLEnow < start. Das Ausstellungsfenster ist noch nicht geöffnet.
arrow_forwardWarten
DAT_CERT_ISSUANCE_ENDEDnow > start + duration, aber die TTL läuft noch. Ausstellen ist nicht mehr möglich, nur noch prüfen.
arrow_forwardNeues Zertifikat ausrollen
DAT_CERT_VERIFY_ONLYEin Zertifikat, das nur den öffentlichen Schlüssel ohne privaten Signaturschlüssel enthält. Prüfen ist möglich, Ausstellen nicht.
arrow_forwardDeployment-Konfiguration prüfen
DAT_CERT_NOT_FOUND Zur cid des Tokens liegt kein Zertifikat vor. Entweder ein gefälschtes Token oder ein fehlerhaftes Ausrollen.
arrow_forwardAnfrage ablehnen
DAT_CERT_NOT_SYNCED Diese cid wurde noch nicht vom CMS empfangen. Tritt kurz nach dem Ausrollen eines neuen Zertifikats auf.
arrow_forwardNach der Synchronisierung erneut versuchen
DAT_CERT_DUPLICATE_CID In der importierten Liste kommt dieselbe cid mehr als einmal vor.
arrow_forwardServerantwort prüfen
DAT_CERT_UNKNOWNEin Zertifikatsfehler, der sich keiner der obigen Kategorien zuordnen lässt.
arrow_forwardLogs prüfen
DAT_CERT_NOT_FOUND und DAT_CERT_NOT_SYNCED sehen gleich aus, erfordern aber unterschiedliche Reaktionen. Beim ersten handelt es sich um eine cid, die wir nie ausgestellt haben — Warten hilft nicht. Der zweite löst sich, sobald die Synchronisierung erfolgt ist.
Ein einzelnes DAT_CERT_NOT_FOUND sortiert man einfach aus; steigt die Zahl plötzlich, ist entweder das Ausrollen aus dem Tritt geraten oder es kursieren gefälschte Tokens.
Signatur
DAT_SIG_MISMATCHDie Signaturprüfung endete mit einer Abweichung. Der HMAC-Wert stimmt nicht überein oder ECDSA verify liefert false.
arrow_forwardSitzung sperren, Security-Log
DAT_SIG_MALFORMED Der Signaturteil ist leer, kein base64url, die Länge von ECDSA r‖s passt nicht zur Kurve, oder die DER-Umwandlung ist fehlgeschlagen.
arrow_forwardAnfrage ablehnen
DAT_SIG_KEY_MISSINGEs wurde versucht, mit einem Verify-only-Schlüssel zu signieren. Zur Laufzeit liegt kein privater Schlüssel vor.
arrow_forwardKonfiguration des ausstellenden Servers prüfen
DAT_SIG_BACKENDDie Signatur- bzw. Prüfoperation konnte selbst nicht ausgeführt werden. Falscher Schlüsseltyp, freigegebenes Handle oder ein interner Fehler der Krypto-Bibliothek.
arrow_forwardSchlüsseltyp und Bibliothek prüfen
DAT_SIG_UNKNOWNEin Signaturfehler, der sich keiner der obigen Kategorien zuordnen lässt.
arrow_forwardLogs prüfen
Abweichung und Backend-Fehler nicht vermischen
Die beiden Codes liegen auf entgegengesetzten Achsen.
DAT_SIG_MISMATCH— lediglich eine nicht passende eingehende Signatur, also ohne Auswirkung auf den Dienst; bei Dauerhaftigkeit jedoch ein Fall für Verdacht.DAT_SIG_BACKEND— die Prüfoperation selbst lief nicht, also ein Problem auf unserer Seite, und kein Verdachtsfall.
Wird ein falscher Schlüsseltyp oder ein Bibliotheksfehler als „Signaturabweichung" gemeldet, mischt sich eine Situation, in der tatsächlich unser Code defekt ist, unter die Angriffsindikatoren. Umgekehrt fällt eine echte Fälschung, die als Backend-Fehler eingestuft wird, komplett aus den Verdachtsmetriken heraus.
Verschlüsselung
Probleme bei der Ver- und Entschlüsselung der secure-Payload.
DAT_CRYPTO_TAG_MISMATCHDas AES-GCM-Authentifizierungs-Tag stimmt nicht. Entweder wurde secure manipuliert oder der Zertifikatsschlüssel ist ein anderer.
arrow_forwardSitzung sperren, Security-Log
DAT_CRYPTO_DATA_INVALID Der Chiffretext ist nicht leer, aber höchstens so lang wie der IV (12 Byte), oder die Eingabe überschreitet die Implementierungsgrenze (etwa INT_MAX).
arrow_forwardAnfrage ablehnen
DAT_CRYPTO_BACKENDDie Ver- bzw. Entschlüsselung konnte nicht ausgeführt werden. Die Plattform unterstützt GCM nicht oder die Kontextinitialisierung ist fehlgeschlagen.
arrow_forwardPlattformunterstützung prüfen
DAT_CRYPTO_UNKNOWNEin Ver-/Entschlüsselungsfehler, der sich keiner der obigen Kategorien zuordnen lässt.
arrow_forwardLogs prüfen
Eine leere secure-Payload ist kein Fehler. Leere Eingabe wird zu leerer Ausgabe, und es wird kein Code erzeugt.
Auf dem Pfad ohne Signaturprüfung ist das GCM-Tag die einzige Integritätsprüfung. Deshalb wird DAT_CRYPTO_TAG_MISMATCH nicht mit anderen Entschlüsselungsfehlern in einen Code zusammengefasst.
Schlüssel
DAT_KEY_INVALID Die Schlüssellänge passt nicht zum deklarierten Algorithmus (HMAC 32/48/64, AES 16/32), der Punkt liegt nicht auf der Kurve, d ∉ [1,n-1], das Format ist nicht unkomprimiert (0x04), oder privater und öffentlicher Schlüssel bilden kein Paar.
arrow_forwardSchlüssel austauschen
DAT_KEY_VERIFY_ONLY_UNSUPPORTEDFür ein Verfahren der HMAC-Familie wurde ein Verify-only-Export angefordert.
arrow_forwardAlgorithmus wechseln
DAT_KEY_UNKNOWNEin Schlüsselfehler, der sich keiner der obigen Kategorien zuordnen lässt.
arrow_forwardLogs prüfen
Drei ähnlich aussehende, aber verschiedene Fälle:
| Code | Bedeutung |
|---|---|
DAT_KEY_VERIFY_ONLY_UNSUPPORTED | Strukturelle Grenze des Algorithmus. HMAC ist symmetrisch und kennt keinen öffentlichen Schlüssel |
DAT_SIG_KEY_MISSING | Laufzeitzustand. In diesem Schlüssel steckt derzeit kein privater Schlüssel |
DAT_CERT_VERIFY_ONLY | Ausrollform. Dieses Zertifikat wurde nur zum Prüfen ausgerollt |
Manager
Der Zustand des Objekts, das Zertifikate hält und zum Ausstellen und Prüfen verwendet.
DAT_MANAGER_NO_CERTIFICATEEs liegt kein einziges Zertifikat vor. Entweder vor dem Import oder nach einer fehlgeschlagenen ersten CMS-Synchronisierung.
arrow_forwardCMS-Verbindung prüfen
DAT_MANAGER_NO_ISSUABLE_CERTIFICATEZertifikate sind vorhanden, aber keines davon ist derzeit zum Ausstellen verwendbar. Der Grund wird mitgeliefert.
arrow_forwardAnhand des Grundes (cause) entscheiden — siehe Tabelle unten
DAT_MANAGER_DISPOSEDEin bereits freigegebener Manager oder ein freigegebenes Zertifikat wurde verwendet.
arrow_forwardAufrufenden Code korrigieren
DAT_MANAGER_UNKNOWNEin Manager-Fehler, der sich keiner der obigen Kategorien zuordnen lässt.
arrow_forwardLogs prüfen
Der Grund (cause) von DAT_MANAGER_NO_ISSUABLE_CERTIFICATE ist einer von vieren. Je nach Ursache ist das Vorgehen völlig unterschiedlich.
| Grund | Bedeutung | Wiederholung | Reaktion |
|---|---|---|---|
DAT_CERT_NOT_YET_ISSUABLE | Vor Beginn des Ausstellungsfensters | Vorübergehend | Löst sich durch Warten |
DAT_CERT_ISSUANCE_ENDED | Ausstellungsfenster beendet, nur noch Prüfung möglich | Dauerhaft | Ein neues Zertifikat muss ausgerollt werden |
DAT_CERT_EXPIRED | Der gesamte Bestand ist abgelaufen | Dauerhaft | Die Zertifikate müssen erneuert werden |
DAT_CERT_VERIFY_ONLY | Der gesamte Bestand dient nur der Prüfung | Dauerhaft | Ein Fehler in der Deployment-Konfiguration |
Ist der ausstellende Server so konfiguriert, dass er nur reine Prüfzertifikate erhält, erscheint DAT_CERT_VERIFY_ONLY. Warten hilft hier nie, deshalb ist dies kein Fall für eine Wiederholung.
Konfiguration
Probleme mit den vom Aufrufer übergebenen Werten. Die CONFIG-Familie besteht durchweg aus Fehlern, die im Code behoben werden müssen; treten sie im Betrieb auf, ist das Deployment fehlerhaft.
DAT_CONFIG_ALG_UNSUPPORTED Unbekannter Algorithmusname. Er muss exakt der Wire-Schreibweise entsprechen (ECDSA-P256, IV-AES256-GCM).
arrow_forwardAlgorithmusnamen prüfen
DAT_CONFIG_ARGUMENT_INVALID Ein Pflichtargument ist null, liegt außerhalb des zulässigen Bereichs (negativer Zeitwert, interval <= 0), hat einen nicht unterstützten Typ (in dynamisch typisierten Sprachen eine Zahl oder ein Boolescher Wert als Payload), oder der zu signierende Body ist leer.
arrow_forwardAufrufenden Code korrigieren
DAT_CONFIG_URI_INVALIDDie URI des CMS-Servers entspricht nicht der Spezifikation. Nicht parsebar, Schema ist weder http noch https, oder es hängt ein Pfad bzw. eine Query daran.
arrow_forwardURI korrigieren
DAT_CONFIG_UNKNOWNEin Konfigurationsfehler, der sich keiner der obigen Kategorien zuordnen lässt.
arrow_forwardLogs prüfen
Intern
Probleme der Ausführungsumgebung und der Laufzeit.
DAT_INTERNAL_UNAVAILABLE Das Krypto-Backend oder die Laufzeit-API fehlt vollständig. crypto.subtle ist nicht vorhanden, die Plattform unterstützt AES-GCM nicht, oder die Laufzeitversion ist zu alt.
arrow_forwardDeployment und Plattform prüfen
DAT_INTERNAL_UNKNOWNFehlgeschlagene Speicherzuweisung, fehlgeschlagene Zufallszahlenerzeugung, fehlgeschlagene Sperrenanforderung, oder ein als unerreichbar entworfener Zweig wurde erreicht.
arrow_forwardLogs prüfen
DAT_INTERNAL_UNAVAILABLE löst sich, indem die Deployment-Umgebung korrigiert wird; DAT_INTERNAL_UNKNOWN ist meist eine Laufzeitstörung oder ein Bibliotheksfehler.
CMS-Synchronisierung
Ohne CMS-Synchronisierung treten diese Codes nicht auf.
DAT_CMS_UNREACHABLEDNS-Fehler, abgelehnte Verbindung, TLS-Fehler, Timeout. Der Timeout hat keinen eigenen Code, sondern ist hier enthalten — die Reaktion ist dieselbe.
arrow_forwardNach Backoff erneut versuchen
DAT_CMS_UNAUTHORIZEDDer Server hat mit 401 geantwortet. Das Token fehlt oder ist falsch.
arrow_forwardToken-Konfiguration prüfen
DAT_CMS_FORBIDDENDer Server hat mit 403 geantwortet. Das Token ist gültig, hat aber keine Berechtigung für diesen Endpunkt.
arrow_forwardToken-Stufe prüfen
DAT_CMS_ENDPOINT_NOT_FOUNDDer Server hat mit 404 geantwortet. Die URL ist falsch.
arrow_forwardURL-Konfiguration prüfen
DAT_CMS_SERVER_ERRORDer Server hat mit 5xx geantwortet.
arrow_forwardNach Backoff erneut versuchen
DAT_CMS_HTTP_STATUSEine Nicht-2xx-Antwort, die keinem der obigen Fälle entspricht.
arrow_forwardStatuscode prüfen
DAT_CMS_MALFORMEDDie Antwort enthält keine Versionszeile, die Versionszeile ist nicht rein dezimal, oder sie überschreitet den Wertebereich.
arrow_forwardServerversion prüfen
DAT_CMS_IMPORT_FAILED Die Antwort kam an, aber die Zertifikate konnten nicht übernommen werden. Die Ursache steckt in cause.
arrow_forwardCERT_* / KEY_* in cause prüfen
DAT_CMS_VERSION_RESETDer Server hat eine ältere Version zurückgegeben als unsere. Das ist die Anweisung zur vollständigen Neusynchronisierung.
arrow_forwardWird automatisch behandelt
DAT_CMS_NOT_SYNCEDEs gab noch keine einzige erfolgreiche Synchronisierung.
arrow_forwardAuf die erste Synchronisierung warten
DAT_CMS_SYNC_IN_PROGRESSDie vorherige Synchronisierung läuft noch, deshalb wurde dieser Zyklus übersprungen. Kein Fehler.
DAT_CMS_NOT_SUPPORTEDDie CMS-Funktion ist nicht Teil des Builds. Das Feature ist deaktiviert oder CURL fehlt.
arrow_forwardBuild-Optionen prüfen
DAT_CMS_UNKNOWNEin CMS-Fehler, der sich keiner der obigen Kategorien zuordnen lässt.
arrow_forwardLogs prüfen
Die Codes, bei denen die Synchronisierung als dauerhaft fehlgeschlagen gilt (UNAUTHORIZED, FORBIDDEN, ENDPOINT_NOT_FOUND, MALFORMED, IMPORT_FAILED), sind allesamt kritisch. Eine Wiederholung löst nichts, während die Zertifikate weiter ablaufen — bleibt es unbeachtet, kommt der Dienst zwangsläufig zum Stillstand.
UNREACHABLE und SERVER_ERROR sind dagegen teilweise. Mit den vorhandenen Zertifikaten läuft alles weiter, und im nächsten Zyklus erholt sich die Synchronisierung von selbst — schlägt sie jedoch dauerhaft fehl, geht sie am Ende in „kritisch" über. Setzen Sie den Alarm auf die Anzahl aufeinanderfolgender Fehlschläge.
Synchronisierungsfehler werden nicht als Ausnahme geworfen
Auch wenn die erste Synchronisierung fehlschlägt, wird der Manager normal zurückgegeben — es ist besser, wenn die Synchronisierung wenigstens verspätet gelingt. Der Fehlschlag bleibt stattdessen als abfragbarer Zustand erhalten.
| Client | Abfrage |
|---|---|
| Rust | manager.last_error().await |
| Go | manager.LastError() |
| JavaScript | manager.lastError() |
| Python | manager.last_error() |
| Ruby | manager.last_error |
| Java/Kotlin | manager.lastError |
| C# | manager.LastError |
| C/C++ | dat_cms_manager_last_error(m) |
Gab es noch keinen Erfolg, steht dort DAT_CMS_NOT_SYNCED; im Normalfall ist der Wert leer.
Server
Codes, die der CMS-Server erzeugt. Clients erzeugen sie nicht, sondern empfangen sie nur.
DAT_AUTH_UNAUTHORIZED Der Header Authorization fehlt, oder das Token ist auf keiner Stufe registriert.
DAT_AUTH_FORBIDDENDas Token ist registriert, entspricht aber nicht der Stufe, die dieser Endpunkt verlangt.
DAT_AUTH_DISABLEDEs ist kein einziges Token konfiguriert, deshalb ist die Authentifizierung vollständig deaktiviert. Damit steht sogar die API zur Zertifikatsausstellung ohne Authentifizierung offen. Erscheint nicht in der Antwort, sondern nur im Startprotokoll.
arrow_forwardToken sofort konfigurieren
DAT_REQ_MALFORMEDPfad- oder Query-Parameter sind nicht interpretierbar, oder ein Argument liegt außerhalb des zulässigen Bereichs (negatives delay, mehr als zehn Jahre usw.).
DAT_REQ_ALG_UNSUPPORTEDDer Algorithmusname im Anfragepfad ist unbekannt.
DAT_REQ_NOT_FOUNDDiese Route existiert nicht oder die Methode weicht ab.
DAT_REQ_TOO_LARGEDie Größe des Anfragekörpers wurde überschritten.
DAT_REQ_UNKNOWNEin Anfragefehler, der sich keiner der obigen Kategorien zuordnen lässt.
DAT_STORE_UNAVAILABLEAbgerissene DB-Verbindung, erschöpfter Verbindungspool, Sperrenkonkurrenz, Timeout. Der einzige Code, der 503 verwendet — das Signal, an dem der Client erkennt: „Das wird durch Warten besser."
arrow_forwardNach Backoff erneut versuchen
DAT_STORE_UNKNOWNFehlgeschlagene Lese- oder Schreibvorgänge, fehlende Tabelle, Schemaabweichung, beschädigte Zertifikatszeile.
arrow_forwardDB-Zustand prüfen
Antwortumschlag:
{
"code": "DAT_REQ_ALG_UNSUPPORTED",
"details": { "algorithm": "BOGUS-ALG" }
}Fehler, die beim Erzeugen und Verarbeiten von Zertifikaten auftreten, verwendet auch der Server unverändert aus den obigen gemeinsamen Codes (DAT_CERT_*, DAT_KEY_*, DAT_CONFIG_*).
Wenn ein Servercode eintrifft
Der Client hüllt den Servercode in seinen eigenen CMS-Code und bewahrt das Original in cause auf.
| Empfangen | HTTP | Code des Clients |
|---|---|---|
DAT_AUTH_UNAUTHORIZED | 401 | DAT_CMS_UNAUTHORIZED |
DAT_AUTH_FORBIDDEN | 403 | DAT_CMS_FORBIDDEN |
DAT_REQ_NOT_FOUND | 404 | DAT_CMS_ENDPOINT_NOT_FOUND |
DAT_REQ_* (übrige) | 400·405·413 | DAT_CMS_HTTP_STATUS |
DAT_STORE_UNAVAILABLE | 503 | DAT_CMS_SERVER_ERROR |
DAT_STORE_UNKNOWN | 500 | DAT_CMS_SERVER_ERROR |
| (Versionsrückstufung) | 200 | DAT_CMS_VERSION_RESET |
Nach Symptom suchen
| Symptom | Code |
|---|---|
| Direkt nach dem Login geht es, kurz darauf wird abgelehnt | DAT_TOKEN_EXPIRED — Die Lebensdauer des Tokens ist abgelaufen. Eine Neuausstellung genügt |
| Prüfung schlägt nur auf einem bestimmten Server fehl | DAT_CERT_NOT_SYNCED — Dieser Server hat die neue CID noch nicht erhalten |
| Dasselbe Token wird auf allen Servern abgelehnt | DAT_CERT_NOT_FOUND — Eine CID, die wir nie ausgestellt haben |
| Der ausstellende Server kann kein Token erzeugen | DAT_MANAGER_NO_ISSUABLE_CERTIFICATE + DAT_CERT_VERIFY_ONLY — Es wurde verify-only ausgerollt |
| Ausstellung schlägt nur direkt nach dem Start fehl | DAT_MANAGER_NO_CERTIFICATE — Vor der ersten Synchronisierung. Löst sich in Kürze |
| Die CMS-Synchronisierung schlägt dauerhaft fehl | DAT_CMS_UNAUTHORIZED — Das Token ist falsch. Eine Wiederholung löst nichts |
| Es kommt kein einziges Zertifikat an | DAT_CMS_ENDPOINT_NOT_FOUND — Ein Tippfehler in der URL |
| Nur auf einer bestimmten Plattform schlägt es fehl | DAT_INTERNAL_UNAVAILABLE — Das Krypto-Backend fehlt |
| Fehlgeschlagene Prüfungen nehmen plötzlich zu | DAT_SIG_MISMATCH — Einzeln harmlos, aber gehäuft ein Fälschungsversuch |
| Die secure-Entschlüsselung schlägt plötzlich fehl | DAT_CRYPTO_TAG_MISMATCH — Die Zertifikate passen nicht zusammen oder es ist ein Manipulationsversuch |
| Warnung im CMS-Startprotokoll | DAT_AUTH_DISABLED — Die Authentifizierung ist aus. Die Ausstellungs-API steht offen |
Anhang
Code-Syntax
DAT_<Bereich>_<Ursache>- Tritt dieselbe Ursache in verschiedenen Bereichen auf, lautet der Ursachenname gleich.
DAT_TOKEN_MALFORMEDundDAT_CERT_MALFORMEDunterscheiden sich nur im Gegenstand, die Bedeutung ist dieselbe. _UNKNOWNist ausschließlich der Fallback des jeweiligen Bereichs. Es wird nicht in anderer Bedeutung verwendet, etwa für „unbekannter Algorithmus" (dafür steht_UNSUPPORTED).- Die Code-Zeichenkette ist ein öffentlicher Vertrag. Die Meldung darf frei geändert werden, der Code nicht.
| Kategorie | Code-Präfix |
|---|---|
| Token | DAT_TOKEN_ |
| Zertifikat | DAT_CERT_ |
| Signatur | DAT_SIG_ |
| Verschlüsselung | DAT_CRYPTO_ |
| Schlüssel | DAT_KEY_ |
| Manager | DAT_MANAGER_ |
| Konfiguration | DAT_CONFIG_ |
| Intern | DAT_INTERNAL_ |
| CMS-Synchronisierung | DAT_CMS_ |
| Server | DAT_AUTH_ · DAT_REQ_ · DAT_STORE_ |
Zugriff je Client
| Client | Fehlertyp | Code | Wiederholungsklasse | Sicherheitsereignis |
|---|---|---|---|---|
| Rust | DatError enum | err.code() | err.retry() | err.security_event() |
| Go | *dat.Error | err.Code | dat.Retry(err) | dat.SecurityEvent(err) |
| JavaScript | DatError extends Error | e.code | e.retry | e.securityEvent |
| Python | DatError(ValueError, RuntimeError) | e.code | e.retry | e.security_event |
| Ruby | Saro::Dat::Error | e.code | e.retry | e.security_event? |
| Java/Kotlin | DatException | e.code | e.retry | e.securityEvent |
| C# | DatException | e.Code | e.Retry | e.SecurityEvent |
| C/C++ | dat_error_t | dat_error_code(e) | dat_error_retry(e) | dat_error_is_security_event(e) |
| CMS-Server | JSON-Umschlag | Feld code | — | — |
Sicherheitsereignis liefert nur für die beiden Fälle true, bei denen Fälschung oder Manipulation feststeht (DAT_SIG_MISMATCH, DAT_CRYPTO_TAG_MISMATCH). Die Markierung Verdacht in diesem Dokument reicht weiter (bis hin zu manipulierten Tokens, Schlüsseln und Anfragen); sie ist derzeit nur eine Klassifikation der Dokumentation und wird nicht über die Client-API bereitgestellt.
Auch die Stufe Auswirkung ist eine Klassifikation der Dokumentation. Derselbe Code kann je nach Fundort unterschiedlich hart treffen — DAT_KEY_INVALID etwa hat keine Auswirkung, wenn damit ein eingehendes Token aussortiert wird, lässt aber die gesamte Synchronisierung scheitern, wenn er beim Lesen eines Zertifikats während der CMS-Synchronisierung auftritt.
Untergeordnete Ursachen gehen nicht verloren. DAT_MANAGER_NO_ISSUABLE_CERTIFICATE und DAT_CMS_IMPORT_FAILED reichen den Grund über die Ausnahmeverkettung der jeweiligen Sprache weiter (cause / __cause__ / InnerException / Unwrap()).
C/C++ behält auch die Ganzzahlwerte
Die bisherigen Ganzzahlwerte von dat_error_t bleiben aus Gründen der ABI-Kompatibilität erhalten, maßgeblich ist jedoch der Textcode. Die Bibliothek gibt die alten Werte nicht mehr zurück, deshalb trifft ein Vergleich wie err == DAT_ERROR_INVALID_DAT nicht mehr zu. Vergleichen Sie stattdessen über dat_error_code(e).
C kennt keine Ausnahmeverkettung, deshalb wird der Grund separat über dat_manager_issuable_cause() abgefragt.