Error: 3002 / Mocca Online 1.3.4

  • Hallo,


    ich habe eine valide XML-Datei (geprüft gegen das aktuelle Security-Layer Schema core-1.2.xsd -> http://www.buergerkarte.at/kon…on/aktuell/core/core.html).
    Den Inhalt dieser Datei wollte ich mit der aktuellen Version 1.3.4 von Mocca Online signieren. Leider bekomme ich den Fehler 3002 -> XML-Struktur der Befehlsanfrage entspricht nicht dem Schema des Security-Layers.
    Die Validierung gegen das aktuelle Schema ist aber erfolgreich.
    Vielleicht kann mir hier jemand weiterhelfen. Ich werde die XML-Datei und die Log-Datei anhängen.


    LG,
    Rainer.

  • Danke für die schnelle Antwort.


    Die Namespace Deklaration erfolgte bereits am Beginn der XML Datei und ist damit auch für die nachfolgenden Elemente gültig:


    <?xml version="1.0" encoding="UTF-8"?>
    <sl:CreateXMLSignatureRequest
    xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:sl="http://www.buergerkarte.at/namespaces/securitylayer/1.2#">
    <sl:KeyboxIdentifier>SecureSignatureKeypair</sl:KeyboxIdentifier>
    <sl:DataObjectInfo Structure="detached">
    <sl:DataObject Reference=""/>
    <sl:TransformsInfo>
    <dsig:Transforms>
    <dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
    </dsig:Transforms>



    Außerdem habe ich meine Beispiele mit einem etablierten Standardwerkzeug (XMLSpy von Altova) geprüft und sie sind valide.


    LG.

  • Syntaktisch ist das korrekt, allerdings ist das in der Bürgerkartenumgebung so spezifiziert, dass man das DataObject auch getrennt parsen kann. Wenn Sie die dsig Namespace Deklaration auf das Transforms Element geben, funktioniert auch die Signaturerstellung.

  • Nach nochmaligem längeren Studium der aktuellen Security Layer Spezifikation habe ich keine Hinweise zu diesem Thema gefunden (DataObject getrennt parsen).


    Meiner Meinung nach kann man alle Datenobjekte getrennt voneinander parsen, jedoch muss vorher beim root-Element CreateXMLSignatureRequest begonnen werden. Die dort definierten Namensräume sollten im gesamten XML propagiert werden.


    Der einzige Hinweis den ich in Bezug auf Namensräume gefunden habe, ist folgender:
    "Bei der Angabe eines Transformationsweges muss die Applikation sicherstellen, dass alle Namenräume, die innerhalb der Struktur der spezifizierten Transformationen (dsig:Transforms) verwendet werden, innerhalb dieser Struktur explizit deklariert werden. Die Bürgerkarten-Umgebung DARF NICHT Namenraum-Deklarationen innerhalb von dsig:Transforms hinzufügen, wenn Sie die Struktur in die zu erzeugende Signatur übernimmt."
    Diese Aussage bezieht sich aber auf Namensräume innerhalb von dsig:Transforms, betrifft also auch nicht dieses Thema hier.


    Bei meiner weiteren Recherche habe ich auch noch die Tutorial-Seite http://www.buergerkarte.at/kon…al/tutorial.html#tutorial besucht. Dort steht bei den Requests, auch wie in meinen Beispielen, die dsig Namensraumdeklaration nur zu Beginn im CreateXMLSignatureRequest-Element, obwohl bei jedem Beispiel auch ein dsig:Transforms Element im DataObject vorkommt.


    Anscheinend bin ich nicht alleine mit meiner Interpretation. Ich wäre hier wirklich sehr an einer Klärung dieser Thematik interessiert.


    Anbei 3 Beispiel-Requests aus der Tutorial-Seite:
    [01] <?xml version="1.0" encoding="UTF-8"?>
    [02] <sl:CreateXMLSignatureRequest
    [03] xmlns:sl="http://www.buergerkarte.at/namespaces/securitylayer/1.2#"
    [04] xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
    [05] <sl:KeyboxIdentifier>SecureSignatureKeypair</sl:KeyboxIdentifier>
    [06] <sl:DataObjectInfo Structure="detached">
    [07] <sl:DataObject
    [08] Reference="http://www.buergerkarte.at/konzept/securitylayer/
    [09] spezifikation/20040514/tutorial/examples/interface/common/SimpleText.txt.b64"/>
    [10] <sl:TransformsInfo>
    [11] <dsig:Transforms>
    [12] <dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#base64"/>
    [13] </dsig:Transforms>
    [14] <sl:FinalDataMetaInfo>
    [15] <sl:MimeType>text/plain</sl:MimeType>
    [16] </sl:FinalDataMetaInfo>
    [17] </sl:TransformsInfo>
    [18] </sl:DataObjectInfo>
    [19] <sl:DataObjectInfo Structure="detached">
    [20] <sl:DataObject
    [21] Reference="http://www.buergerkarte.at/konzept/securitylayer/
    [22] spezifikation/20040514/tutorial/examples/interface/common/XMLDocument.xml"/>
    [23] <sl:TransformsInfo>
    [24] <dsig:Transforms>
    [25] <dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
    [26] <xp2:XPath xmlns:xp2="http://www.w3.org/2002/06/xmldsig-filter2"
    [27] xmlns:doc="urn:document" Filter="subtract">/doc:XMLDocument/doc:Paragraph[2]
    [28] </xp2:XPath>
    [29] </dsig:Transform>
    [30] <dsig:Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116">
    [31] <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    [32] xmlns:doc="urn:document">
    [33] <xsl:output encoding="UTF-8" method="xml" indent="yes"/>
    [34] <xsl:template match="/doc:XMLDocument">
    [35] <html xmlns="http://www.w3.org/1999/xhtml">
    [36] <head>
    [37] <title>HTML-Dokument</title>
    [38] </head>
    [39] <body>
    [40] <xsl:for-each select="doc:Paragraph">
    [41] <p>
    [42] <xsl:value-of select="child::text()"/>
    [43] </p>
    [44] </xsl:for-each>
    [45] </body>
    [46] </html>
    [47] </xsl:template>
    [48] </xsl:stylesheet></dsig:Transform>
    [49] <dsig:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    [50] </dsig:Transforms>
    [51] <sl:FinalDataMetaInfo>
    [52] <sl:MimeType>application/xhtml+xml</sl:MimeType>
    [53] </sl:FinalDataMetaInfo>
    [54] </sl:TransformsInfo>
    [55] </sl:DataObjectInfo>
    [56] </sl:CreateXMLSignatureRequest>




    [01] <?xml version="1.0" encoding="UTF-8"?>
    [02] <sl:CreateXMLSignatureRequest
    [03] xmlns:sl="http://www.buergerkarte.at/namespaces/securitylayer/1.2#"
    [04] xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
    [05] <sl:KeyboxIdentifier>CertifiedKeypair</sl:KeyboxIdentifier>
    [06] <sl:DataObjectInfo Structure="enveloping">
    [07] <sl:DataObject>
    [08] <sl:XMLContent>Von der Signatur umschlossene Daten.</sl:XMLContent>
    [09] </sl:DataObject>
    [10] <sl:TransformsInfo>
    [11] <sl:FinalDataMetaInfo>
    [12] <sl:MimeType>text/plain</sl:MimeType>
    [13] </sl:FinalDataMetaInfo>
    [14] </sl:TransformsInfo>
    [15] </sl:DataObjectInfo>
    [16] <sl:DataObjectInfo Structure="detached">
    [17] <sl:DataObject Reference=""/>
    [18] <sl:TransformsInfo>
    [19] <dsig:Transforms>
    [20] <dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
    [21] </dsig:Transforms>
    [22] <sl:FinalDataMetaInfo>
    [23] <sl:MimeType>application/xml</sl:MimeType>
    [24] </sl:FinalDataMetaInfo>
    [25] </sl:TransformsInfo>
    [26] </sl:DataObjectInfo>
    [27] <sl:DataObjectInfo Structure="detached">
    [28] <sl:DataObject Reference="http://www.buergerkarte.at/konzept/securitylayer/
    [29] spezifikation/20040514/tutorial/examples/interface/common/SimpleText.txt"/>
    [30] <sl:TransformsInfo>
    [31] <sl:FinalDataMetaInfo>
    [32] <sl:MimeType>text/plain</sl:MimeType>
    [33] </sl:FinalDataMetaInfo>
    [34] </sl:TransformsInfo>
    [35] </sl:DataObjectInfo>
    [36] <sl:DataObjectInfo Structure="detached">
    [37] <sl:DataObject Reference=""/>
    [38] <sl:TransformsInfo>
    [39] <dsig:Transforms>
    [40] <dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
    [41] <xp2:XPath xmlns:xp2="http://www.w3.org/2002/06/xmldsig-filter2"
    [42] xmlns:doc="urn:document" Filter="intersect">/doc:Whole/doc:Part2</xp2:Xpath>
    [43] </dsig:Transform>
    [44] </dsig:Transforms>
    [45] <sl:FinalDataMetaInfo>
    [46] <sl:MimeType>application/xml</sl:MimeType>
    [47] </sl:FinalDataMetaInfo>
    [48] </sl:TransformsInfo>
    [49] </sl:DataObjectInfo>
    [50] <sl:SignatureInfo>
    [51] <sl:SignatureEnvironment>
    [52] <sl:XMLContent>
    [53] <doc:Whole xmlns:doc="urn:document">
    [54] <doc:Part1>Text in Teil 1</doc:Part1>
    [55] <doc:Part2>Text in Teil 2</doc:Part2>
    [56] </doc:Whole>
    [57] </sl:XMLContent>
    [58] </sl:SignatureEnvironment>
    [59] <sl:SignatureLocation
    [60] xmlns:doc="urn:document" Index="4">/doc:Whole</sl:SignatureLocation>
    [61] </sl:SignatureInfo>
    [62] </sl:CreateXMLSignatureRequest>




    [01] <?xml version="1.0" encoding="UTF-8"?>
    [02] <sl:CreateXMLSignatureRequest xmlns:sl="http://www.buergerkarte.at/namespaces/securitylayer/1.2#"
    [03] xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
    [04] <sl:KeyboxIdentifier>CertifiedKeypair</sl:KeyboxIdentifier>
    [05] <sl:DataObjectInfo Structure="detached">
    [06] <sl:DataObject Reference="#Para2"/>
    [07] <sl:TransformsInfo>
    [08] <dsig:Transforms>
    [09] <dsig:Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116">
    [10] <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    [11] <xsl:include href="XMLDocument.Para.xsl"/>
    [12] </xsl:stylesheet>
    [13] </dsig:Transform>
    [14] <dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    [15] </dsig:Transforms>
    [16] <sl:FinalDataMetaInfo>
    [17] <sl:MimeType>application/xhtml+xml</sl:MimeType>
    [18] </sl:FinalDataMetaInfo>
    [19] </sl:TransformsInfo>
    [20] <sl:Supplement>
    [21] <sl:Content Reference="XMLDocument.Para.xsl">
    [22] <sl:LocRefContent>http://www.buergerkarte.at/kon…uritylayer/spezifikation/
    [23] 20040514/tutorial/examples/interface/common/XMLDocument.Para.xsl</sl:LocRefContent>
    [24] </sl:Content>
    [25] </sl:Supplement>
    [26] </sl:DataObjectInfo>
    [27] <sl:SignatureInfo>
    [28] <sl:SignatureEnvironment Reference="http://www.buergerkarte.at/konzept/securitylayer/
    [29] spezifikation/20040514/tutorial/examples/interface/common/XMLDocument.withSchemaHint.xml"/>
    [30] <sl:SignatureLocation Index="4" xmlns:doc="urn:document">/doc:XMLDocument</sl:SignatureLocation>
    [31] <sl:Supplement>
    [32] <sl:Content Reference="urn:XMLDocument.xsd">
    [33] <sl:LocRefContent>http://www.buergerkarte.at/kon…r/spezifikation/20040514/
    [34] tutorial/examples/interface/common/XMLDocument.xsd</sl:LocRefContent>
    [35] </sl:Content>
    [36] </sl:Supplement>
    [37] </sl:SignatureInfo>
    [38] </sl:CreateXMLSignatureRequest>

  • S.g. RDenner!


    Sie haben die entscheidende Stelle der Spezifikation (2.2.1.2 Transformationswege aus http://www.buergerkarte.at/kon…aturerstellungNachXMLDSIG ) schon gefunden:


    Bei der Angabe eines Transformationsweges muss die Applikation sicherstellen, dass alle Namenräume, die innerhalb der Struktur der spezifizierten Transformationen (dsig:Transforms) verwendet werden, innerhalb dieser Struktur explizit deklariert werden. Die Bürgerkarten-Umgebung DARF NICHT Namenraum-Deklarationen innerhalb von dsig:Transforms hinzufügen, wenn Sie die Struktur in die zu erzeugende Signatur übernimmt.


    Der technische Grund dafür ist das getrennte Parsen der Transformationen des DataObjects. Leider ist hier das Tutorial fehlerhaft. Es fehlt die xmlns:dsig Namensraumdeklaration im dsig:Transforms Element. Danke für den Hinweis, wir werden das Tutorial so schnell wie möglich ausbessern.


    Sie können das Problem jedenfalls einfach beheben indem Sie

    Code
    1. <dsig:Transforms>

    durch

    Code
    1. <dsig:Transforms xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">

    ersetzen.