feat(cert-manager): Zertifikatspaket hochladen, erkennen und in jedem Format herunterladen

Neuer erster Reiter Übersicht: mehrere Dateien oder die ZIP vom Aussteller
auf einmal ablegen. Der Server erkennt jedes Teil (Server-, Zwischen-,
Stammzertifikat, privater Schlüssel, CSR, auch aus PFX/P7B), fasst
Duplikate zusammen, ordnet Schlüssel/CSR dem Zertifikat zu und baut die
Kette. Unter jedem Teil stehen Download-Knöpfe für alle passenden Formate
(crt, cer, Fullchain, p7b, pfx mit Schlüssel und Kette; key PKCS#8/PKCS#1/
DER; csr PEM/DER). Geschützte PFX lassen sich mit Passwort entsperren.

Neue Endpunkte POST analyze (Dateien/ZIP, Begrenzung Anzahl und Größe vor
dem Entpacken) und POST export (JSON, zustandslos). Modultexte siezen jetzt
durchgehend; Gültigkeit in UTC wie im Zertifikat.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-01 15:23:34 +02:00
parent 645c5e5887
commit c07b0cfaf0
11 changed files with 1811 additions and 52 deletions
+74 -6
View File
@@ -1182,8 +1182,9 @@
},
"certManager": {
"title": "Zertifikat-Manager",
"description": "Zertifikate analysieren, aufteilen, zusammenführen und konvertieren.",
"description": "Zertifikatspakete prüfen und in jedes Format bringen; einzelne Zertifikate analysieren, aufteilen, zusammenführen und konvertieren.",
"tabs": {
"overview": "Übersicht",
"inspect": "Analysieren",
"split": "Aufteilen",
"merge": "Zusammenführen",
@@ -1217,18 +1218,85 @@
},
"emptyState": {
"inspect": "Kein Zertifikat geladen.",
"inspectBody": "Lade eine Datei hoch oder füge PEM-Text ein.",
"inspectBody": "Laden Sie eine Datei hoch oder fügen Sie PEM-Text ein.",
"split": "Keine Datei geladen.",
"splitBody": "Lade eine Fullchain- oder P7B-Datei hoch.",
"splitBody": "Laden Sie eine Fullchain- oder P7B-Datei hoch.",
"merge": "Keine Zertifikate ausgewählt.",
"mergeBody": "Lade mindestens zwei Dateien hoch.",
"mergeBody": "Laden Sie mindestens zwei Dateien hoch.",
"convert": "Keine Datei geladen.",
"convertBody": "Lade eine Datei hoch und wähle ein Ausgabeformat."
"convertBody": "Laden Sie eine Datei hoch und wählen Sie ein Ausgabeformat."
},
"error": {
"generic": "Verarbeitung fehlgeschlagen. Prüfe das Dateiformat oder das Passwort.",
"generic": "Verarbeitung fehlgeschlagen. Prüfen Sie das Dateiformat oder das Passwort.",
"wrongPassword": "Falsches Passwort. PFX/P12-Datei konnte nicht entschlüsselt werden.",
"unknownFormat": "Unbekanntes Format. Die Datei konnte nicht als Zertifikat erkannt werden."
},
"overview": {
"dropTitle": "Zertifikatsdateien oder ZIP hierher ziehen oder klicken",
"dropHint": "Alles auf einmal, so wie es vom Aussteller kommt: .zip, .pem, .crt, .cer, .key, .csr, .pfx, .p12, .p7b",
"removeFile": "{name} entfernen",
"reset": "Alle entfernen",
"analyzing": "Dateien werden geprüft …",
"error": "Die Dateien konnten nicht geprüft werden. Bitte prüfen Sie, ob es Zertifikatsdateien sind.",
"locked": "Geschützt: {files}. Geben Sie das Passwort ein, um auch diesen Inhalt zu lesen.",
"lockedPassword": "Passwort der geschützten Datei",
"unlock": "Entsperren",
"nothingFound": "In den Dateien wurde kein Zertifikat, Schlüssel und keine Zertifikatsanfrage gefunden.",
"ignored": "Nicht verwendet (kein Zertifikat erkannt): {files}",
"type": {
"end-entity": "Serverzertifikat",
"intermediate": "Zwischenzertifikat",
"root": "Stammzertifikat",
"privateKey": "Privater Schlüssel",
"csr": "Zertifikatsanfrage (CSR)"
},
"explain": {
"end-entity": "Das eigentliche Zertifikat für Ihre Domain – das gehört auf den Webserver.",
"intermediate": "Bestätigt Ihr Serverzertifikat gegenüber dem Browser. Wird zusammen mit dem Serverzertifikat eingespielt (Kette).",
"root": "Oberste Zertifizierungsstelle. Ist in Browsern und Betriebssystemen meist schon vorhanden.",
"privateKey": "Der geheime Schlüssel zum Serverzertifikat. Wird auf dem Server gebraucht, darf aber nie weitergegeben werden.",
"csr": "Die Anfrage, mit der das Zertifikat beim Aussteller bestellt wurde. Wird nur für eine Neuausstellung gebraucht."
},
"issuer": "Ausgestellt von",
"validity": "Gültig",
"names": "Gilt für",
"key": "Schlüssel",
"belongsTo": "Gehört zu",
"source": "Gefunden in",
"valid": "Gültig",
"expired": "Abgelaufen",
"expiresSoon": "Läuft in {days} Tagen ab",
"keySecret": "Geheim halten: Wer diesen Schlüssel hat, kann sich als Ihre Website ausgeben.",
"downloading": "Wird erstellt …",
"exportError": "Diese Datei konnte nicht erstellt werden.",
"format": {
"crt": "PEM (.crt)",
"cer": "DER (.cer)",
"fullchain": "Mit Kette (.pem)",
"p7b": "PKCS#7 (.p7b)",
"pfx": "PFX (.pfx)",
"key": "PEM (.key)",
"key-rsa": "RSA-PEM (.rsa.key)",
"key-der": "DER (.key.der)",
"csr": "PEM (.csr)",
"csr-der": "DER (.csr.der)"
},
"formatHint": {
"crt": "Textformat, z. B. für Apache, Nginx und die meisten Geräte",
"cer": "Binärformat, z. B. für Windows und Java",
"fullchain": "Zertifikat und Kette in einer Datei, z. B. für Nginx",
"p7b": "Zertifikat und Kette ohne Schlüssel, z. B. für Windows/IIS",
"pfx": "Zertifikat, Kette und Schlüssel in einer passwortgeschützten Datei, z. B. für Windows/IIS und Exchange",
"key": "Schlüssel im Standardformat (PKCS#8)",
"key-rsa": "Schlüssel im älteren RSA-Format (PKCS#1), für ältere Software",
"key-der": "Schlüssel als Binärdatei",
"csr": "Zertifikatsanfrage als Text",
"csr-der": "Zertifikatsanfrage als Binärdatei"
},
"pfxWithKey": "Die PFX-Datei enthält Zertifikat, Kette und privaten Schlüssel. Legen Sie ein Passwort fest – es wird beim Einspielen abgefragt.",
"pfxWithoutKey": "Zu diesem Zertifikat liegt kein Schlüssel vor – die PFX-Datei enthält nur Zertifikat und Kette. Legen Sie ein Passwort fest.",
"pfxPassword": "Passwort für die PFX-Datei",
"pfxDownload": "PFX herunterladen"
}
},
"tenderRadar": {