XML Signature: hoe in XSD te specificeren?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 10-10 17:45
Ik had verwacht dat veel mensen tegen dit probleem aan waren gelopen, en dat ik dus 100 antwoorden op google kon vinden, maar ik kan kennelijk niet goed zoeken of zoiets :/ In java genereer ik een XML met envelopped signature, dat ziet er zo uit:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<tns:Projectnaam xmlns:tns="http://www.example.org/X" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/X.xsd">
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
  <SignedInfo>
    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
    <Reference URI="">
      <Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms>
      <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
      <DigestValue>BHA6uMDcEhnt1zkr/m6ExUF76zU=</DigestValue>
    </Reference>
  </SignedInfo>
  <SignatureValue>lang verhaal</SignatureValue>
  <KeyInfo>
    <X509Data><X509SubjectName>CN=none,OU=none,O=none,L=none,ST=none,C=nl</X509SubjectName><X509Certificate>lang verhaal</X509Certificate></X509Data>
  </KeyInfo>
</Signature>
<tns:content>iets</tns:content>
</tns:Projectnaam>


Bij mijn weten kan ik de <Signature> tag niet aanpassen. Nu probeer ik een XSD te schrijven waaraan deze XML voldoet. Toen ik de ondertekening nog niet had geimplementeerd stond daar <tns:Signature/>, zoals in de XSD stond. Maar hoe stop ik een XML signature in de XSD?
Wat ik nu heb, en dus niet werkt:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://www.example.org/X" xmlns:tns="http://www.example.org/X"
        elementFormDefault="qualified"
        xmlns:sig="http://www.w3.org/2000/09/xmldsig#">
    <import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="https://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/>
    <complexType name="ProjectnaamType">
        <sequence>
            <element name="Signature" type="sig:SignatureType"></element>
            <element name="content" type="string"/>
        </sequence>
    </complexType>
    <element name="Projectnaam" type="tns:ProjectnaamType"/>
</schema>


javax.xml.validation.Validator geeft een SAX-exception met deze message:
org.xml.sax.SAXParseException; systemId: file:/X.xml; lineNumber: 8; columnNumber: 55; cvc-complex-type.2.4.a: Invalid content was found starting with element 'Signature'. One of '{"http://www.example.org/X":Signature}' is expected.
Als ik de elementFormDefault unqualified maak, wordt de melding veel leuker:
Invalid content was found starting with element 'Signature'. One of '{Signature}' is expected.
8)7

Weet iemand hoe ik hiervoor een werkende XSD kan schrijven?

Acties:
  • +1 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 10-10 17:45
Ben al de hele dag aan het zoeken, blijkt het antwoord zo simpel te zijn:
Vervang regel 9 van het XSD door:
<element ref="sig:Signature" />
Met dank aan Microsoft:
MSDN: XML Schema Definition Tool (Xsd.exe)