feat(cert-manager): Schlüssel, PFX und CSR erkennen, Passwort je Datei

- Private Schlüssel (PKCS#1, PKCS#8, SEC1; PEM und DER; unverschlüsselt, verschlüsselt, klassisch verschlüsselt) für RSA und EC über node:crypto
- PKCS#12 lesen (OpenSSL 3, kompatibel, RC2; EC-Zertifikate und -Schlüssel), auch ohne Endung und im ZIP
- Zertifikatsanfragen (CSR) als PEM und DER mit Inhaber, SAN und Schlüssel
- Zuordnung von Schlüssel und Anfrage zum Zertifikat (checkPrivateKey, SPKI-Vergleich)
- Feld passwords je Datei, gesperrte Dateien fragen nach dem Passwort; kein Passwort in Antwort oder Log
- Oberfläche: Passwortfeld mit Anzeigen/Verbergen, Schlüssel- und Anfragekarten im Reiter Analysieren

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-09 15:31:54 +02:00
parent 1554ae83c1
commit fcac0a3bfd
28 changed files with 2140 additions and 100 deletions
+34 -2
View File
@@ -1303,7 +1303,17 @@
"pasteLabel": "Eingefügter PEM-Text",
"pasteAdd": "Hinzufügen",
"pastedLabel": "Eingefügter Text {n}",
"originPaste": "Eingefügter Text"
"originPaste": "Eingefügter Text",
"locked": {
"message": "„{path}“ ist mit einem Passwort geschützt.",
"optional": "„{path}“ ist mit einem Passwort geschützt. Sie brauchen die Datei nicht, solange Zertifikat und Schlüssel schon vorliegen.",
"passwordLabel": "Passwort für „{name}“",
"unlock": "Entsperren",
"unlockAnyway": "Trotzdem entsperren",
"wrong": "Das Passwort passt nicht.",
"note": "Das Passwort bleibt in diesem Browserfenster und wird nur zum Öffnen der Datei übertragen."
},
"keyWasEncrypted": "war verschlüsselt"
},
"errors": {
"generic": "Die Dateien konnten nicht geprüft werden. Bitte versuchen Sie es erneut.",
@@ -1351,7 +1361,25 @@
"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."
}
},
"matchingKey": "Passender Schlüssel vorhanden",
"keysTitle": "Private Schlüssel",
"csrsTitle": "Zertifikatsanfragen",
"lockedTitle": "Geschützte Dateien",
"lockedNeeded": "braucht ein Passwort",
"lockedWrong": "Das Passwort passt nicht",
"lockedHint": "Geben Sie das Passwort im Reiter „Dateien“ ein.",
"wasEncrypted": "War verschlüsselt",
"belongsTo": "Gehört zu",
"noCertificateYet": "Dazu liegt noch kein Zertifikat vor.",
"subject": "Inhaber",
"matchedKey": "Passender Schlüssel",
"matchedCertificates": "Passendes Zertifikat",
"matchedCsr": "Passende Anfrage",
"present": "vorhanden",
"absent": "nicht vorhanden",
"explainKey": "Gehört zu Ihrem Serverzertifikat und bleibt geheim. Geben Sie ihn nie weiter.",
"explainCsr": "Die Anfrage, mit der ein Zertifikat bei der Zertifizierungsstelle bestellt wird."
},
"split": {
"intro": "Jedes erkannte Teil können Sie einzeln in seinem natürlichen Format herunterladen, oder alle zusammen als ZIP.",
@@ -1379,6 +1407,10 @@
"gapAfterLeaf": "Zwischenzertifikat fehlt: „{name}“",
"gapAfterLeafHint": "Ohne dieses Zertifikat vertrauen manche Geräte dem Server nicht. Fügen Sie es im Reiter „Dateien“ hinzu.",
"gapAfterCa": "Darüber fehlt noch ein Zertifikat, meist das Stammzertifikat „{name}“. Für eine Fullchain ohne Stammzertifikat wird es nicht gebraucht."
},
"passwordInput": {
"show": "Passwort anzeigen",
"hide": "Passwort verbergen"
}
},
"tenderRadar": {