Die XML-Signatur ist ein Verfahren, bei dem eine digitale Signatur zu einem XML-Dokument hinzugefügt wird , um dessen Integrität, Authentizität und Nichtabstreitbarkeit zu gewährleisten. Durch die digitale Signatur bestätigt der Unterzeichner die Authentizität und Integrität der Daten. Dies ermöglicht die Überprüfung des Ursprungs des Dokuments und stellt sicher, dass es während der Übertragung oder Speicherung nicht verändert wurde.
Die digitale Signatur wird mithilfe asymmetrischer Verschlüsselungsverfahren erstellt , typischerweise basierend auf einer Public-Key-Infrastruktur (PKI) . Der Unterzeichner generiert einen privaten Schlüssel, der sicher aufbewahrt wird, und einen zugehörigen öffentlichen Schlüssel, der mit anderen geteilt werden kann. Mit dem privaten Schlüssel wird ein Hashwert (Digest) des XML-Dokuments verschlüsselt, wodurch die digitale Signatur entsteht. Der verschlüsselte Digest dient als eindeutige Repräsentation der Daten und wird an das XML-Dokument angehängt.
XML-Signaturen sind in verschiedenen Bereichen von entscheidender Bedeutung, darunter E-Commerce, elektronische Rechnungsstellung, Supply Chain Management und Behördenanwendungen. Sie ermöglichen den sicheren elektronischen Dokumentenaustausch, stellen die Authentizität der Daten sicher und gewährleisten die Nichtabstreitbarkeit. Das bedeutet, dass der Unterzeichner seine Beteiligung oder die Integrität des Dokuments später nicht leugnen kann.
Eine Übersicht über den XML-Signaturprozess:
- Ein passender kryptographischer Algorithmus, sowie RSA, DSA oder ECDSA, wird vom XML-Signierer ausgewählt, um die digitale Signatur zu erstellen.
- Das zu signierende XML-Dokument wird vorbereitet. Dabei wird sichergestellt, dass das Dokument der erforderlichen XML-Syntax und -Struktur entspricht.
- Das Dokument wird einer XML-Kanonisierung unterzogen. Dadurch wird sichergestellt, dass Abweichungen bei Leerzeichen, Attributreihenfolge oder Namespace-Präfixen die Gültigkeit der Signatur nicht beeinträchtigen. Durch die Kanonisierung wird eine standardisierte Form des XML-Dokuments für die Signatur erstellt.
- Über das kanonisierte XML-Dokument wird ein Digest, auch Hash genannt, berechnet. Der Digest dient als eindeutiger Fingerabdruck des Dokuments und wird beim Signieren verwendet.
- Der Digest wird mit dem privaten Schlüssel des Unterzeichners verschlüsselt, wodurch die digitale Signatur entsteht. Der private Schlüssel wird vom Unterzeichner sicher aufbewahrt und sollte für Unbefugte unzugänglich sein.
- Die digitale Signatur wird in das XML-Dokument eingefügt, typischerweise als zusätzliches Element oder Attribut. Dadurch kann die Signatur den signierten Daten zugeordnet werden.
Encryption Consulting bietet mit „ CodeSign Secure “ eine Lösung für die Code-Signatur , die Ihnen manipulationssichere Speicherung Ihrer Schlüssel sowie vollständige Transparenz und Kontrolle über Ihre Code-Signatur-Aktivitäten ermöglicht. Die privaten Schlüssel des Code-Signatur-Zertifikats können in einem HSM gespeichert werden , um die Risiken gestohlener, beschädigter oder missbrauchter Schlüssel zu eliminieren. Die Lösung beinhaltet das Hilfsprogramm „XML Signer“ zum Signieren von XML-Dateien. Die folgenden Schritte erleichtern Ihnen die Nutzung unseres Tools.
Signieren einer XML-Datei mit XML Signer, kurz zusammengefasst: Legen Sie die Umgebungsvariablen für das SSL-Client-Authentifizierungszertifikat fest und führen Sie dann Folgendes aus:
xmlsigner -S <file> -u <username> -k <key_name> -a <algorithm> -c <certificate>Das Tool erzeugt eine signierte Kopie mit dem Suffix „_signed“; der private Schlüssel verbleibt serverseitig und wird niemals direkt von der Befehlszeilenschnittstelle verarbeitet.
Wichtige Erkenntnisse
- SHA256 ist der Standard-Hashing-Algorithmus, wenn
-awird ausgelassen; SHA224 ist eine schwächere Option, die aus Kompatibilitätsgründen enthalten ist und im Allgemeinen für neue Signatur-Workflows nicht bevorzugt werden sollte. - Das SSL-Client-Authentifizierungszertifikat authentifiziert die CLI gegenüber dem Signaturserver von Encryption Consulting; es handelt sich um eine separate Anmeldeinformation, die nicht mit dem Codesignaturzertifikat/Schlüssel identisch ist, der zum eigentlichen Signieren des XML-Dokuments verwendet wird.
Umgebungsmatrix
| Komponente | Anforderung |
|---|---|
| OS | Windows, macOS oder Linux (xmlsigner.exe unter Windows, ./xmlsigner auf anderen Betriebssystemen) |
| Client-Authentifizierung | SSL-Client-Authentifizierungszertifikat im PKCS12-Format (.p12 oder .pfx), bezogen von Encryption Consulting |
| Signaturberechtigungen | Ein registrierter Benutzername, ein Schlüsselname und ein Zertifikat, bereitgestellt von Encryption Consulting. |
| Unterstützte Hash-Algorithmen | SHA224, SHA256 (Standard), SHA384, SHA512 |
| Schlüsselaufbewahrung | Serverseitig; die CLI verarbeitet den unformatierten privaten Schlüssel niemals direkt. |
Voraussetzung
Um XML Signer verwenden zu können, müssen Benutzer zunächst Umgebungsvariablen für den Pfad des SSL-Client-Authentifizierungszertifikats und das Zertifikatpasswort festlegen. Wenden Sie sich an das Encryption Consulting Team, falls Sie diese noch nicht eingerichtet haben.
Hinweis: Das SSL-Client-Authentifizierungszertifikat sollte im PKCS12-Format (.p12 oder .pfx) vorliegen.
Führen Sie die folgenden Befehle aus, um Umgebungsvariablen festzulegen:
Mac oder Linux
$ export SIGNER_SSL_CERT_PFX=path_to_ssl_certificate
$ export SIGNER_SSL_CERT_PFX_PASS=your_client_certificate_password
Windows
$ set SIGNER_SSL_CERT_PFX=path_to_ssl_certificate
$ set SIGNER_SSL_CERT_PFX_PASS=your_client_certificate_password
Wie verwende ich das Dienstprogramm XML Signer?
Holen Sie sich die Version des XML Signer Utility
Führen Sie den folgenden Befehl aus
Mac oder Linux
$./xmlsigner -v
Windows
$ xmlsigner.exe -v
Holen Sie sich die Hilfe des XML Signer Utility
Führen Sie den folgenden Befehl aus
Mac oder Linux
$./xmlsigner -h or $./xmlsigner --help
Windows
$ xmlsigner.exe -h or $ xmlsigner.exe --help
Signieren eines XML-Dokuments
Das Signer-Dienstprogramm generiert das signierte Dokument mit demselben Namen und dem Suffix „_signed“.
Verwenden Sie den Unterbefehl „sign“ , um ein XML-Dokument zu signieren.
./xmlsigner -S <file_to_be_signed> -u <user_name> -k <key_name> -a <algorithm> -c <key_certificate> -q
-S : Zu signierendes XML-Dokument.
-u : Benutzername. Ein Benutzername auf dem Server von Encryption Consulting. Wenden Sie sich an das Team von Encryption Consulting, falls Sie noch keinen haben.
-k : Name des Schlüssels/Zertifikats zur Signierung/Verifizierung, bereitgestellt vom Server von Encryption Consulting. Wenden Sie sich an das Encryption Consulting-Team, falls Sie diesen noch nicht haben.
-a : Der zum Signieren zu verwendende Algorithmus. Eine der folgenden Optionen sollte verwendet werden:
- SHA224
- SHA256 (Standard)
- SHA384
- SHA512
Wenn der Algorithmus nicht angegeben ist, wird standardmäßig SHA256 verwendet.
-c : Zertifikatsdatei, die vom Server von Encryption Consulting bereitgestellt wird.
-q : Still ausführen.
-h : Hilfe anzeigen
Beispiele
Mac oder Linux
./xmlsigner -h
./xmlsigner -S file.xml -u admin -k SignCertificateName -a SHA256 -c
<path /to/certificate>
Windows
xmlsigner.exe -h
xmlsigner.exe -S file.xml -u admin -k SignCertificateName -a SHA256 -c
<path /to/certificate>
Überprüfen der Signatur
Prüfen Sie nach dem Signieren, ob die Ausgabedatei (mit dem Suffix „_signed“) ein gültiges Signatur-Element enthält, bevor Sie sie verteilen. Öffnen Sie die signierte XML-Datei und prüfen Sie, ob ein gültiges Signatur-Element vorhanden ist. <Signature> Element unter dem XML-DSig-Namensraum (http://www.w3.org/2000/09/xmldsig#) enthalten SignedInfo, SignatureValue und KeyInfo Kindelemente; ein fehlender oder fehlerhafter Signaturblock deutet darauf hin, dass der Signiervorgang stillschweigend fehlgeschlagen ist, anstatt reibungslos zu verlaufen.
Häufige Fehler
| Fehler | Wahrscheinliche Ursache | Fixieren |
|---|---|---|
| Authentifizierungsfehler beim Verbinden mit dem Signaturserver | Die Umgebungsvariablen SIGNER_SSL_CERT_PFX oder SIGNER_SSL_CERT_PFX_PASS sind nicht gesetzt, fehlerhaft oder der Dateipfad .p12/.pfx ist falsch. | Überprüfen Sie erneut, ob beide Umgebungsvariablen in der aktuellen Shell-Sitzung exportiert werden und nicht nur in einem Skript gesetzt sind, das nicht ausgeführt wurde. |
| Schlüssel/Zertifikat nicht gefunden | Der an -k übergebene Wert stimmt nicht mit einem auf dem Encryption Consulting-Server für diesen Benutzernamen registrierten Schlüsselnamen überein. | Bitte lassen Sie den genauen Schlüsselnamen vom Encryption Consulting Team bestätigen, anstatt einen Namen zu erraten. |
| Ungültiges XML / Signierung der Eingabedatei fehlgeschlagen | Die Eingabedatei ist kein wohlgeformtes XML, oder die Kanonisierung schlägt aufgrund fehlerhafter Namensräume fehl. | Prüfen Sie vor der Signierung, ob das XML wohlgeformt ist; fehlerhaftes XML lässt sich unabhängig vom verwendeten Signaturwerkzeug nicht korrekt kanonisieren. |
CI/CD-Nutzung und -Bereinigung
Für wiederholtes Signieren in einer Pipeline legen Sie Folgendes fest: SIGNER_SSL_CERT_PFX und SIGNER_SSL_CERT_PFX_PASS Umgebungsvariablen als Pipeline-Geheimnisse verwenden, anstatt sie in einem Skript fest zu kodieren, und aufrufen xmlsigner an. Nach der Installation können Sie HEIC-Dateien mit der -q Kennzeichen für stille, nicht-interaktive Ausführung. Idempotenz durch Überprüfung auf erwartete Werte sicherstellen. <Signature> Das Element wird unmittelbar nach der Signierung in die Ausgabedatei aufgenommen, und falls es fehlt, schlägt der Build fehl, anstatt allein vom Exit-Code des Befehls als Erfolgsbestätigung auszugehen.
Zur Bereinigung: Wenn das .p12/.pfx-Client-Authentifizierungszertifikat zu Testzwecken auf einen Build-Agenten kopiert wurde, entfernen Sie es, sobald die Funktionsfähigkeit der Pipeline bestätigt ist, und ziehen Sie es vor, es zur Laufzeit als Pipeline-Geheimnis einzufügen, anstatt es langfristig im Dateisystem des Agenten zu speichern.
Häufig gestellte Fragen
Woran erkenne ich, dass der Signierbefehl tatsächlich eine gültige Signatur erzeugt hat?
Prüfen Sie die Ausgabedatei „_signed“ auf ein wohlgeformtes Format. <Signature> Element unter dem XML-DSig-Namensraum mit SignedInfo, SignatureValue und KeyInfo vorhanden, anstatt anzunehmen, dass ein Exit-Code von Null allein bedeutet, dass die Signatur gültig ist.
Worin besteht der Unterschied zwischen dem SSL-Client-Authentifizierungszertifikat und dem Signaturzertifikat?
Das SSL-Clientzertifikat (PKCS12/.p12/.pfx) authentifiziert das CLI-Tool gegenüber dem Signaturserver von Encryption Consulting. Der eigentliche Codesignaturschlüssel, der zur Erstellung der XML-Signatur verwendet wird, ist ein separates, serverseitig verwaltetes Zertifikat, auf das verwiesen wird. -k Schlüsselname.
Fazit
Die XML-Signatur gewährleistet die Integrität, Authentizität und Nichtabstreitbarkeit von XML-Dokumenten. Sie fügt eine digitale Signatur hinzu, die die Herkunft des Dokuments verifiziert und Manipulationen verhindert. Die XML-Signatur ist unerlässlich für den sicheren Datenaustausch und fördert das Vertrauen in elektronische Transaktionen und zuverlässige Kommunikation. Sie findet Anwendung im E-Commerce, bei der Rechnungsstellung, im Supply-Chain-Management und vielem mehr. Mithilfe von Tools und Bibliotheken wird der XML-Signaturprozess vereinfacht und in verschiedene Umgebungen integriert. Um unser Tool für den XML-Signaturprozess zu erhalten, kontaktieren Sie uns bitte unter [email protected]
