Digitale Signaturen

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Datenquellen und -ziele > XML und XML-Schema >

Digitale Signaturen

Digitale Signaturen sind in einer W3C-Spezifikation definiert und dienen dazu ein XML-Dokument mit einem verschlüsselten Code digital zu signieren. Anhand dieses Codes kann überprüft werden, ob das XML-Dokument nach der Signierung geändert wurde. Die XML-Signaturfunktion in MapForce unterstützt nur Zertifikate vom Typ RSA-SHA1 und DSA-SHA1.

 

Nähere Informationen zu XML-Signaturen finden Sie in der W3C-Spezifikation für XML-Signaturen unter https://www.w3.org/TR/xmldsig-core/

 

MapForce unterstützt die Erstellung digitaler XML-Signaturen für XML- und XBRL-Ausgabedateien. Digitale Signaturen können nur in der Ausgabevorschau und nur, wenn das Ausgabeziel BUILT-IN ist, generiert werden. Wenn die Schaltfläche "Ausgabe" betätigt und die Ergebnisdatei gespeichert wird, so wird eine Signatur für die generierte Ergebnisdatei erstellt.

 

Anmerkung: MapForce Server unterstützt digitale Signaturen nicht.

 

Digitale Signaturen können als letztes Element in das Ausgabedokument eingebettet oder in einer separaten Datei gespeichert werden.

 

Bei Auswahl der Option "Enveloped" ist die Signatur das letzte Child-Element unterhalb des Root-Elements der XML-Datei.
Bei Auswahl der Option "Detached" wird die Signaturdatei als separates Dokument generiert.

 

So aktivieren Sie die Generierung digitaler Signaturen

1.Öffnen Sie das Dialogfeld "Komponenteneinstellungen" der Ausgabekomponente, durch Doppelklick auf die Titelleiste der Komponente oder durch Auswahl des Befehls Komponente | Eigenschaften.
2.Aktivieren Sie das Kontrollkästchen Digitale Signaturen erstellen.

dlg_component_settings_xml_sig

3.Daraufhin wird das Dialogfeld XML-Signatureinstellungen geöffnet, wo Sie die Einstellungen definieren können (siehe XML-Signatureinstellungen).

 

 

So ändern Sie die Einstellungen für digitale Signaturen:

1.Öffnen Sie das Dialogfeld "Komponenteneinstellungen" der Ausgabekomponente, durch Doppelklick auf die Titelleiste der Komponente oder durch Auswahl des Befehls Komponente | Eigenschaften.
2.Klicken Sie auf die Schaltfläche "Signatureinstellungen" um das Dialogfeld XML-Signatureinstellungen zu öffnen.
3.Geben Sie die Einstellungen ein und klicken Sie auf OK.

 

 

Wir wollen als Beispiel die Datei MarketingAndDailyExpenses.mfd aus dem Ordner ...\MapForceExamples verwenden:

 

1.Doppelklicken Sie auf die Zielkomponente "MarketingExpenses" und anschließend auf die Schaltfläche "Signatureinstellungen". Die ausgewählten Optionen werden angezeigt.
2.Klicken Sie auf OK um das Dialogfeld zu schließen.,
3.Klicken Sie auf die Ausgabe-Schaltfläche, um das Mapping-Ergebnis zu sehen.

 

Im Vorschaufenster werden zwei Dateien generiert: Die erste Datei, MarketingExpenses.xml, ist das Mapping-Ergebnis der Zielkomponente.

xmlsig01

Die zweite Datei, MarketingExpenses.xml.xsig, ist die temporäre Signaturdatei, die zur Zielkomponente generiert wird.

xmlsig02

Um die Signaturdatei zu generieren, klicken Sie auf die Symbolleisten-Schaltfläche Alle generierten Ausgaben speichern ic-save-all-out . Daraufhin werden im Ausgabeverzeichnis die .XML- und die .XSIG-Datei generiert.

 

In der Datei MarketingExpenses_EnvelopedSignature.mfd aus dem Ordner ...\MapForceExamples sehen Sie das Ergebnis, wenn die Signaturplatzierung "enveloped" erfolgt.

xmlsig03

 

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. MapForce bettet Signaturen mit der Option "Enveloped" ein:

 

Enveloped: Das Element Signature wird als das letzte Child-Element des Root (Dokument)-Elements erstellt.

 

Wenn Sie das Schema des XML-Dokuments nicht ändern möchten, kann die XML-Signatur mit der Option "detached" in einer externen Datei erstellt werden.

 

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: https://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="xssig: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>


© 2019 Altova GmbH