XML-Signaturen
Eine XML-Datei kann digital signiert werden und die Signatur kann in der Folge überprüft werden. Wenn die Datei geändert wurde, nachdem die Datei signiert wurde, so schlägt die Überprüfung fehl. XMLSpy unterstützt sowohl das Erstellen als auch das Überprüfen von XML-Signaturen.
XML-Signaturen in XMLSpy-Ansichten
XML-Signaturen können für alle Arten von XML-Dateien wie XML-Schemas, WSDL- und XBRL-Dateien erstellt werden. Daher stehen die Befehle XML | XML-Signatur erstellen und XML | XML-Signatur überprüfen in allen XMLSpy-Ansichten zur Verfügung: in der Textansicht, der Grid-Ansicht, der Schema-Ansicht, der WSDL-Ansicht und der XBRL-Ansicht.
Funktionsweise von XML-Signaturen
Der gesamte Vorgang von der Erstellung der Signatur bis zur Überprüfung der Signatur läuft folgendermaßen ab:
1.Die XML-Datei wird entweder mit einem privaten Schlüssel (private key) eines Zertifikats oder mit einem Passwort signiert. Sie können in XMLSpy eine Signatur mit dem Befehl XML | XML-Signatur erstellen erstellen. Die Signatur wird durch Verarbeitung des (i) XML-Dokuments und (ii) des privaten Schlüssels eines Zertifikats oder eines Passworts erzeugt.
2.Die Signatur kann entweder in die XML-Datei inkludiert oder in einer separaten Datei gespeichert werden.
3.Die Signatur der XML-Datei wird (je nachdem wie die Signatur erstellt wurde, siehe Schritt 1 oben) anhand des öffentlichen Schlüssels (public key) des Zertifikats oder anhand des Passworts überprüft. Dabei wird zuerst (i) das XML-Dokument und (ii) der öffentliche Schlüssel des Zertifikats oder das für die Signatur verwendete Passwort verarbeitet und anschließend wird das Ergebnis mit der Signatur verglichen. Wenn die XML-Datei nach der Signierung geändert wurde, schlägt die Überprüfung fehl. Sie können in XMLSpy eine Signatur mit dem Befehl XML | XML-Signatur überprüfen überprüfen.
Eine genaue Anleitung zur Erstellung und Überprüfung von Signaturen in XMLSpy finden Sie in den Unterabschnitten dieses Abschnitts:
•Überprüfen von XML-Signaturen
Verwendung von Zertifikaten in XML-Signaturen
Für die Verwendung mit XML-Signaturen müssen Zertifikate einen privaten und einen öffentlichen Schlüssel haben. Der private Schlüssel dient zur Erstellung der XML-Signatur, mit dem öffentlichen Schlüssel wird die XML-Signatur überprüft.
In einem typischen Szenario hat der Absender eines XML-Dokuments Zugriff auf den privaten Schlüssel eines Zertifikats und erstellt damit die XML-Signatur. Der Empfänger des Dokuments hat Zugriff auf den öffentlichen Schlüssel des Zertifikats. Dies kann auf zwei Arten erfolgen: (i) Der Absender sendet den öffentlichen Schlüssel mit der Signatur mit; (ii) der Empfänger hat Zugriff auf die öffentliche Schlüsselversion des vom Absender verwendeten Zertifikats.
Nähere Informationen zu Zertifikaten finden Sie im Unterabschnitt Arbeiten mit Zertifikaten.
Anmerkung: | Die XML-Signaturfunktion von XMLSpy unterstützt alle erforderlichen Algorithmen. |
Gültigkeit des XML-Dokuments
Wenn eine XML-Signatur in das XML-Dokument eingebettet wird, so wird ein Signature Element aus dem Namespace http://www.w3.org/2000/09/xmldsig# zum XML-Dokument hinzugefügt. Damit das Dokument dem Schema gemäß gültig bleibt, muss das Schema die entsprechenden Elementdeklarationen enthalten. XMLSpy bettet Signaturen auf zwei Arten ein:
•Enveloped: Das Element Signature wird als das letzte Child-Element des Root (Dokument)-Elements erstellt.
•Enveloping: Das Element Signature wird als das Root- (Dokument)-Element erstellt und das ursprüngliche XML-Dokument wird als Child-Element mit dem Namen Object in dieses Element eingefügt.
Wenn Sie das Schema des XML-Dokuments nicht ändern möchten, kann die XML-Signatur in einer externen Datei erstellt werden. Nähere Informationen dazu finden Sie in der Beschreibung zu den Platzierungsoptionen im Abschnitt Erstellen von XML-Signaturen.
Unterhalb sehen Sie Auszüge aus XML-Schemas, in denen gezeigt wird, wie das Signature Element einer "enveloped" Signatur verwendet werden darf. Sie können diese Beispiele als Richtlinien für die Anpassung Ihrer eigenen Schemas verwenden.
In ersten der beiden Beispiele unten wird das XML-Signaturschema in das Benutzerschema importiert. Das XML-Signatur-Schema befindet sich unter der Internetadresse: http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsig="http://www.w3.org/2000/09/xmldsig#"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#"
schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element ref="FirstChildOfRoot"/>
<xs:element ref="SecondChildOfRoot" minOccurs="0"/>
<xs:element ref="ThirdChildOfRoot" minOccurs="0"/>
<xs:element ref="xsig:Signature" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</xs:schema>
Die zweite Option (Beispiel unten) ist, ein allgemeines Wildcard-Element hinzuzufügen, das jedes Element aus anderen Namespaces repräsentieren kann. Wenn Sie das Attribut processContents auf lax setzen, überspringt der Validator dieses Element, da keine übereinstimmende Elementdeklaration gefunden wird. Folglich muss der Benutzer das XML-Signatur-Schema nicht referenzieren. Der Nachteil diese Option ist allerdings, dass an der angegebenen Stelle im XML-Dokument jedes beliebige Element (und nicht nur das Element Signature) hinzugefügt werden kann, ohne dass das XML-Dokument ungültig wird.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element ref="selection"/>
<xs:element ref="newsitems" minOccurs="0"/>
<xs:element ref="team" minOccurs="0"/>
<xs:any namespace="##other" minOccurs="0" processContents="lax"/>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</xs:schema>
W3C-Spezifikation
Nähere Informationen zu XML-Signaturen finden Sie in der W3C-Spezifikation zu XML-Signaturen unter https://www.w3.org/TR/xmldsig-core1/.