XML- und Web-Service-Sicherheit (WS 2010/11) Übungsserie 5– Musterlösung 15. Dezember 2010 1 XML Signature <ns1:A xmlns:ns1="http://eins.ns" xmlns:ns3="http://drei.ns" xmlns:ns2="http://zwei.ns"> <ns2:B ID = "12323"/> <ns2:C ref= " 12456" ID="12345" /> <ns2:D xmlns:ns4="http://vier.ns" xmlns:ns5="http://fuenf.ns"> <ns4:E ref=’12323’ /> <ns6:F ref="12345" ID="12456" xmlns:ns6="http://sechs.ns" /> </ns2:D> <ns2:C ID="78762"/> <ns1:G> <H>Dies ist ein &lt;Text!&gt;</H> </ns1:G> </ns1:A> 2 Canonicalization-1 <ns2:D xmlns:ns1="http://eins.ns" xmlns:ns2="http://zwei.ns" xmlns:ns3="http://drei.ns" xmlns:ns4="http://vier.ns" xmlns:ns5="http://fuenf.ns"> <ns4:E ref="12323"></ns4:E> <ns6:F xmlns:ns6="http://sechs.ns" ID="12456" ref="12345"></ns6:F> </ns2:D> Man kann sehen, dass bei der Inclusive Canonicalization alle vorher definierten Namespaces (ns1-ns5) ins Element reingehen. Sie werden da nach den Namespace-Prefixes sortiert. 1 3 Canonicalization-2 Bei der Exclusive Canonicalization werden im Element nur die Namespaces deklariert, die von dem Element visible utilized sind (sie werden von dem Element oder von seinen Attributen benutzt). <ns2:D xmlns:ns2="http://zwei.ns"> <ns4:E xmlns:ns4="http://vier.ns" ref="12323"></ns4:E> <ns6:F xmlns:ns6="http://sechs.ns" ID="12456" ref="12345"></ns6:F> </ns2:D> 4 XML Canonicalization in Java Ich hab nach einigen Tools gesucht, mit denen man XML Canonicalization testen könnte. Leider hab ich nichts sinnvolles gefunden, am leichtesten war ein kleines Java Programm zu schreiben. Zur Ausführung dieses Codes müssen externe Bibliotheken von Apache Santuario (http://santuario.apache.org/mirrors.cgi) heruntergeladen werden und ins Projekt hinzugefügt werden. Leider hat es bei mir nicht geklappt, nur Teile des Dokuments zu kanonisieren. Ich hoffe aber, dass dieser Code mindestens ein bisschen hilft. XML Canonicalization ist auch in den Folien von unserem Praktikum beschrieben: http://www.nds.ruhr-uni-bochum.de/teaching/lectures/504/ (Folien XML Signature, Slides 7-10). 2 import import import import java.io.File; java.io.FileInputStream; org.apache.xml.security.Init; org.apache.xml.security.c14n.Canonicalizer; public class Test { public static void main(String[] args) throws Exception { // initialization von Santuario Library Init.init(); // Canonicalization Instantiation Canonicalizer c = Canonicalizer. getInstance(Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS); Canonicalizer c = Canonicalizer. getInstance(Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS); // // // Reading the file File file = new File("test2.xml"); int size = (int)file.length(); byte[] xml = new byte[size]; FileInputStream fis = new FileInputStream(file); fis.read(xml); // Canonicalization and data output byte[] canonicalized = c.canonicalize(xml); System.out.println(new String(canonicalized)); } } 3