<html> <head> <title>MOA SP/SS-Anwendung</title> <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> <meta content="heinz.rosenkranz@brz.gv.at" name="author"/> <style type="text/css"> body { font-family:"Verdana", "Arial"; font-size:10pt; color:#505060; } td { font-family:"Verdana", "Arial"; font-size:10pt; color:#505060; } th { font-family:"Verdana", "Arial"; font-size:10pt; font-weight:bold; color:#c0c0c0; background:#505050} li { font-family:"Verdana", "Arial"; font-size:10pt; color:#505060; margin-top:3px } ul { font-family:"Verdana", "Arial"; font-size:10pt; color:#505060; margin-top:3px } tt { font-size:9pt; color:#505060; } pre { font-size:9pt; color:#505060; } #titel { font-family:"Verdana", "Arial"; font-size:18pt; color:#505060; } #subtitel { font-family:"Verdana", "Arial"; font-size:12pt; font-weight:bold; color:#505060; } #slogan { font-family:"Verdana", "Arial"; font-size:8pt; color:#808090; text-align:justify; width:160px } #block { font-family:"Verdana", "Arial"; font-size:10pt; color:#505060; text-align:justify } #klein { font-family:"Verdana", "Arial"; font-size:9pt; color:#505060; margin-top:3px } a:link {color:#000090} a:visited {color:#000090} a:hover {color:#c03030} a {text-decoration: none} </style> <script language="JavaScript"> <!-- function goWin(url) { Fenster=window.open(url,"smallWin","toolbar=0,location=0,directories=0,status=0,menubar=0,resizable=yes,scrollbars=yes,width=500,height=480,top=20,screenY=0,left=20,screenX=0"); window.setTimeout("showWin()",300); } function showWin() { Fenster.focus(); } // --> </script> </head> <body bgcolor="#FFFFFF" > <div style="width:650px"> <!-- Projekt-Logo --> <div style="height:42px; font-size:16pt; color:#b0b8c0; background:#003050">  Module f�r Online-Applikationen </div> <div style="margin-left:8px; margin-top:3px; font-size:8pt; color:#707070; "> <!-- Development Center der BRZ GmbH, A-Trust und IAIK Graz -->  </div> <div style="margin-top:-65px; text-align:right; font-size:8pt; font-weight:bold; color:#d04040;" > Projekt <span style="font-size:48pt; ">moa</span>  </div> <br /> <!-- First Section with Navigation --> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top"> <div style="font-weight:bold; margin-top:12px">MOA-SP/SS</div><br /> <div id="klein"><a href="#Webservices"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> Beispiel-Programme </b></div> <div id="klein"><a href="#ClientExample"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> Client Example</b></div> <div id="klein"><a href="#ServerAuth"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> Server Auth Example</b></div> <div id="klein"><a href="#ClientAuth"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> Client Auth Example</b></div> <div id="klein"><a href="#API"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> API Example</b></div> <br /> <div id="klein"><a href="#Beispiel-Requests"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> Beispiel-Requests</b></div> <div id="klein"><a href="#CreateXMLSignature1"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> CreateXMLSignature 1</b></div> <div id="klein"><a href="#VerifyXMLSignature1"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> VerifyXMLSignature 1</b></div> <div id="klein"><a href="#CreateXMLSignature2"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> CreateXMLSignature 2</b></div> <div id="klein"><a href="#VerifyXMLSignature2"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> VerifyXMLSignature 2</b></div> <div id="klein"><a href="#VerifyCMSSignature"><img src="../moa_images/idle.gif" border="0" width="13" height="14" /> <b> VerifyCMSSignature</b></div> <br /> <div id="klein"><a href="moa.htm"><img src="../moa_images/west.gif" border="0" width="13" height="14" /> <b> Zur�ck</b></a></div> <br /><br /> </td> <td valign="top"> <div id="titel">MOA SP/SS-Anwendung</div> <p id="block"> Die Module Signaturpr�fung (SP) und Serversignatur (SS) sind als plattformunabh�ngige Module ausgelegt, die �ber ein Webservice bzw. ein Java-API verwendet werden k�nnen. <br /><br /> Dieses Handbuch beschreibt die Verwendung der SP/SS-Module anhand einfacher exemplarischer Anwendungen: <ul> <li>HTTPClientExample.java <br />Aufruf des Webservice �ber HTTP </li> <li>HTTPSClientExampleServerAuth.java <br />Aufruf des Webservice �ber eine TLS-Verbindung mit serverseitiger Authentisierung</li> <li>HTTPSClientExampleClientAuth.java <br />Aufruf des Webservice �ber eine TLS-Verbindung mit client- und serverseitiger Authentisierung</li> <li>APIClientExample.java <br />Aufruf des API</li> </ul> Weiters werden folgende Beispiel-Requests beschrieben: <ul> <li>einfache Requests f�r die Erstellung und �berpr�fung einer XML-Signatur</li> <li>umfassende Requests f�r die Erstellung und �berpr�fung einer XML-Signatur</li> <li>ein Request f�r die �berpr�fung einer CMS-Signatur</li> </ul> </p> </td></tr></table> <div id="voraussetzung" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> </div> </td> <td valign="top"> <p id="subtitel">Voraussetzungen</p> <div id="block"> Die folgende Liste enth�lt die erforderlichen Java-Bibliotheken, um die Beispielprogramme auszuf�hren. Die angef�hrten Versionsnummern bezeichnen jene Versionen dieser Java-Bibliotheken, mit denen die Beispielprogramme getestet wurden. <br /><br /> <table border="1" width="100%" cellpadding="2" cellspacing="0"> <tr> <th>Java-Bibliothek</th><th>Version</th><th>Bemerkung</th> </tr><tr> <tr valign="top"> <td>JDK</td><td>1.3+</td><td>Java Development Kit</td> </tr><tr valign="top"> <td>Xerces <br />XML Parser</td><td>2.0.2+</td> <td id="klein">nicht n�tig wenn JDK 1.4 verwendet wird <br /> Download: <a href="http://xml.apache.org/xerces2-j/">xml.apache.org/xerces2-j</a> </td> </tr><tr valign="top"> <td>AXIS Framework</td><td>1.0+</td> <td id="klein">Download: <a href="http://xml.apache.org/axis/">xml.apache.org/axis</a> </td> </tr><tr valign="top"> <td>JSSE</td><td>1.0.3+</td> <td id="klein">wenn eine SSL Verbindung verwendet wird, nicht n�tig wenn JDK 1.4 verwendet wird <br />Download: <a href="http://java.sun.com/products/jsse/">java.sun.com/products/jsse</a> </td> </tr><tr valign="top"> <td>Servlet API</td><td>2.3+</td> <td id="klein">nicht n�tig wenn AXIS 1.1 verwendet wird <br /> Download: <a href="http://java.sun.com/products/servlet/">java.sun.com/products/servlet</a> </td> </tr> </table> </div> </td></tr></table> <br /><br /> <div id="Webservices" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="titel"> </p> <p id="subtitel"> </p> </td> <td valign="top"> <p id="titel">Beispiel-Programme </p> <div id="block">Im folgenden werden vier Beispiele f�r Client-Applikationen beschrieben: </div> <ul> <li>HTTPClientExample <br /> Aufruf des Webservice �ber HTTP</li> <li>HTTPSClientExampleServerAuth <br /> Aufruf des Webservice �ber eine TLS-Verbindung mit serverseitiger Authentisierung </li> <li>HTTPSClientExampleClientAuth <br /> Aufruf des Webservice �ber eine TLS-Verbindung mit client- und serverseitiger Authentisierung</li> <li>APIClientExample <br /> Aufruf des API</li> </ul> </td></tr></table> <br /><br /> <div id="ClientExample" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> <div id="slogan"> <b>Beispiel: </b><br /> <a href="examples/testclient/example_request.xml" target="_new">example_request.xml</a><br /> <a href="HTTPClientExample.txt" target="_new">HTTPClientExample</a><br /> <br /><br /> </div> </td> <td valign="top"> <p id="subtitel">Beispiel HTTPClientExample </p> <div id="block"> <b>1. Einlesen des XML-Request aus einer Datei</b><br /> <pre> FileInputStream inputStream = new FileInputStream("example_request.xml"); </pre <br /><br /> <b>2. Aufbau der DOM-Struktur</b><br /> Erstellen der BuilderFactory f�r den Parser <pre> DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); </pre> Namespaces m�ssen im Request definiert sein, darum <pre> factory.setNamespaceAware(true); </pre> Einen neuen Builder instanzieren <pre> DocumentBuilder builder = factory.newDocumentBuilder(); </pre> XML-Datei einlesen und parsen <pre> Document root_request = builder.parse(inputStream); </pre> <br /><br /> <b>3. AXIS Service instanzieren</b><br /> Service erstellen. SERVICE_QNAME ist entweder SignatureCreation oder SignatureVerification. <pre> Service service = ServiceFactory.newInstance(). createService(SERVICE_QNAME); </pre> Call Object erstellen <pre> Call call = service.createCall(); </pre> Ein SOAP Body Objekt erzeugen und mit dem Request aus der Datei f�llen <pre> SOAPBodyElement body = new SOAPBodyElement(root_request. getDocumentElement()); SOAPBodyElement[] params = new SOAPBodyElement[] {body}; </pre> Serviceendpunkt einstellen. URL zum Server mit dem Webservice z.b. http://localhost:8080/moa-spss/services/SignatureCreation. <pre> call.setTargetEndpointAddress(ENDPOINT); </pre> <br /><br /> <b>4. Service aufrufen</b><br /> Request durchf�hren (Parameter werden als Array von SOAPBodyElement-Objekten �bergeben) <pre> Vector responses = (Vector)call.invoke(params); </pre> Response auslesen <pre> SOAPBodyElement response = (SOAPBodyElement) responses.get(0); </pre> Response-Document auslesen <pre> Document root_response = response.getAsDocument(); </pre> <br /><br /> <b>5. Exceptions behandeln</b><br /> Folgende Exceptions k�nnen auftreten und m�ssen bei der Dokumentverarbeitung behandelt werden:<br /> <table border="1" width="100%" cellpadding="2" cellspacing="0"> <tr> <th>Exception</th><th>Beschreibung</th> </tr><tr> <tr valign="top"> <td>FileNotFoundException</td><td>Datei kann nicht gefunden werden</td> </tr><tr valign="top"> <td>IOException</td><td>Datei kann nicht gelesen werden</td> </tr><tr valign="top"> <td>ParserConfigurationException</td><td>Parsereinstellungen nicht korrekt</td> </tr><tr valign="top"> <td>xxSAXException</td><td>Fehler beim Parsen (z.b. XML-Fehler in der Eingabedatei)</td> </tr><tr valign="top"> <td>ServiceException</td><td>Fehler beim Durchf�hren des AXIS Request</td> </tr><tr valign="top"> <td>RemoteException</td><td>Probleme mit der Verbindung</td> </tr> </table> </div> </td></tr></table> <br /><br /> <div id="ServerAuth" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> <div id="slogan"> <b>Beispiel: </b><br /> <a href="examples/testclient/example_request.xml" target="_new">example_request.xml</a><br /> <a href="HTTPSClientExampleServerAuth.txt" target="_new">HTTPSClientExample 1</a><br /> <br /><br /> </div> </td> <td valign="top"> <p id="subtitel">Beispiel HTTPSClientExampleServerAuth</p> <div id="block"> Zus�tzlich zu HTTPClientExample: <br /><br /> Erst werden die Konstanten f�r die Systemproperties gesetzt <pre> handler = "java.protocol.handler.pkgs"; trustStore = "javax.net.ssl.trustStore"; trustStorePassword = "javax.net.ssl.trustStorePassword"; </pre> Hinzuf�gen des SSL-Providers in das Systemobjekt Security <pre> Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider()); </pre> Setzen der Systemproperties f�r den SSL-Provider <pre> System.setProperty( handler,"com.sun.net.ssl.internal.www.protocol"); System.setProperty( trustStore, "client.keystore"); System.setProperty(trustStorePassword, "changeit"); </pre> Danach mu� nur noch der Endpunkt umgestellt werden von ENDPOINT zu SECURE_ENDPOINT <pre> "http://localhost:8080/moa-spss/ services/SignatureCreation" </pre> wird zu <pre> "https://localhost:8443/moa-spss/ services/SignatureCreation" </pre> AXIS erkennt das es sich um eine sichere Verbindung handelt und initialisert die Verbindung �ber einen SecureSocket. </div> </td></tr></table> <br /><br /> <div id="ClientAuth" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> <div id="slogan"> <b>Beispiel: </b><br /> <a href="examples/testclient/example_request.xml" target="_new">example_request.xml</a><br /> <a href="HTTPSClientExampleClientAuth.txt" target="_new">HTTPSClientExample 2</a><br /> <br /><br /> </div> </td> <td valign="top"> <p id="subtitel">Beispiel HTTPSClientExampleClientAuth</p> <div id="block"> Zus�tzlich zu HTTPSClientExampleServerAuth: <br /><br /> F�r Clientauthorisierung kommen noch folgende Properties hinzu <pre> keyStore = "javax.net.ssl.keyStore"; keyStorePassword = "javax.net.ssl.keyStorePassword"; System.setProperty( keyStore, "client.keystore"); System.setProperty(keyStorePassword, "changeit"); </pre> </div> </td></tr></table> <br /><br /> <div id="API" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> <div id="slogan"> <b>Beispiel: </b><br /> <a href="APIClientExample.txt" target="_new">APIClientExample</a><br /> <br /><br /> </div> </td> <td valign="top"> <p id="subtitel">Beispiel APIClientExample</p> <div id="block"> Folgende VM-Properties müssen gesetzt sein um das API Beispiel ausf�hren zu k�nnen.<br /><br /> <table border="1" cellpadding="2" cellspacing="0"> <tr> <th colspan=2>moa.spss.server.configuration</th> </tr><tr> <tr valign="top"> <td>Pfad zur Konfiguration von MOA-SPSS</td><td>Beispiel C:\moa\ConfigurationTest.xml </td> </tr> <th colspan=2>log4j.configuration</th> <tr valign="top"> <td>Pfad zu einer gültigen Log4J Konfiguration</td><td>Beispiel file:/C:/moa/log4j.properties</td> </tr><tr valign="top"> </tr> </table> <br /> Serverfunktionshandler instanzieren <pre> SPSSFactory spf = SPSSFactory.getInstance();</pre> Signaturedaten in ein Contentobjekt einbinden <pre> byte[]data = "Dies sind Testdaten".getBytes("UTF-8"); ByteArrayInputStream bis = new ByteArrayInputStream(data); Content cont = spf.createContent(bis,"http://uri.data.org");</pre> Beschreibungselement zu den Daten erstellen <pre> MetaInfo mi = spf.createMetaInfo("text/plain","Testdaten",null);</pre> Transformationen erstellen <pre> CreateTransformsInfo cti = spf.createCreateTransformsInfo(null,mi); CreateTransformsInfoProfile ct = spf.createCreateTransformsInfoProfile( cti, null);</pre> Datenobjekt aufbauen <pre> DataObjectInfo doi = spf.createDataObjectInfo( DataObjectInfo.STRUCTURE_DETACHED, false, cont, ct); List dataobjectinfolist = new ArrayList(); dataobjectinfolist.add(doi);</pre> alles zusammenpacken zu einer SingleSignature <pre> SingleSignatureInfo ssi = spf.createSingleSignatureInfo( dataobjectinfolist, null, false); List singlesignatureinfolist = new ArrayList(); singlesignatureinfolist.add(ssi);</pre> die Signatur in einen Request einbetten <pre> CreateXMLSignatureRequest cxsreq = spf.createCreateXMLSignatureRequest( "PKCS12RSAKey1", singlesignatureinfolist);</pre> Signatureerstellungsservice instanzieren <pre> SignatureCreationService scs = SignatureCreationService.getInstance();</pre> Signatureerstellungsservice aufrufen <pre> CreateXMLSignatureResponse cxsres = scs.createXMLSignature(cxsreq);</pre> Response auswerten <pre> List elements = cxsres.getResponseElements(); SignatureEnvironmentResponse ser = (SignatureEnvironmentResponse)elements.get(0);</pre> Responsetyp lesen <pre> int response_type = ser.getResponseType(); if(response_type == SignatureEnvironmentResponse.ERROR_RESPONSE) { ... } </pre> Fehlerfall <pre> System.out.println("Bei der Erstellung der Signatur ist ein Fehler aufgetreten"); </pre> Signaturerstellung erfolgreich <pre> Element se = ser.getSignatureEnvironment(); System.out.println( "Signaturerstellung erfolgreich"); displayTree(se); </pre> </div> </td></tr></table> <br /><br /> <div id="Beispiel-Requests" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> </td> <td valign="top"> <p id="titel">Beispiel-Requests</p> <div id="block"> In den folgenden Abschnitten werden einfache und umfassende Beispiele f�r Requests beschrieben, die an MOA-SP/SS gesendet werden k�nnen. Damit soll der Anwendungsentwickler einen �berblick �ber die M�glichkeiten von MOA-SP/SS vermittelt bekommen. Die detaillierte und vollst�ndige Beschreibung des Funktionsumfangs ist in den Spezifikationen von MOA-SP/SS und des Security-Layers enthalten. </div> </td></tr></table> <br /><br /> <div id="CreateXMLSignature1" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> <div id="slogan"> <b>Beispiel: </b><br /> <a href="examples/requestsResponses/CreateXMLSignatureRequest1.xml" target="_new">Request</a><br /> <a href="examples/requestsResponses/CreateXMLSignatureResponse1.xml" target="_new">Response</a><br /> <br /><br /> </div> </td> <td valign="top"> <p id="subtitel">Beispiel:<br/ > einfacher CreateXMLSignatureRequest</p> <div id="block"> Das Beispiel in <a href="examples/requestsResponses/CreateXMLSignatureRequest1.xml" target="_new">CreateXMLSignatureReqest1.xml</a> zeigt einen einfachen <tt><CreateXMLSignatureRequest></tt>. Die Bedeutung der einzelnen Elemente wird im folgenden beschrieben: <pre> <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier> </pre> <tt>PKCS12RSAKey1</tt> bezeichnet eine Schl�sselgruppe aus der MOA-SS einen Signaturschl�ssel selektieren soll und muss einer im Konfigurationsfile definierten <tt><KeyGroup></tt> entsprechen. <pre> <SingleSignatureInfo SecurityLayerConformity="false"> </pre> F�r jedes <tt><SingleSignatureInfo></tt>-Element wird eine eigene XML-Signatur erzeugt. Wird das Attribut <tt>SecurityLayerConformity</tt> auf <tt>true</tt> gesetzt, dann wird eine XML-Signatur gem�� <a href="http://www.buergerkarte.at/konzept/securitylayer/spezifikation/20020831/core/Core.html#signaturerstellungNachXMLDSIGAntwort" target="_new">Security-Layer Spezifikation</a> erzeugt; d.h. es werden signierte Properties (Zeitpunkt der Signaturerstellung, das f�r die Signatur�berpr�fung zu verwendende Zertifikat, Metainformationen zu den signierten Datenobjekten) und ein Manifest, das alle implizite Transformationsparameter enth�lt, zur Signatur hinzugef�gt. <pre> <DataObjectInfo Structure="enveloping"> </pre> F�r jedes Daten-Objekt, das in die Signatur als <tt>dsig:Reference</tt> aufgenommen werden soll, muss ein <tt>DataObjectInfo</tt>-Element spezifiziert werden. Das Attribut <tt>Structure</tt> gibt an, ob die Daten in die Signatur in ein <tt><dsig:Object></tt>-Element integriert werden soll (<tt>Structure="enveloping"</tt>) oder via eine URL referenziert werden soll (<tt>Structure="detached"</tt>). <br /><br /> Im Fall von <tt>Structure="enveloping"</tt> muss im nachfolgenden <tt>DataObject</tt> Element entweder das Attribut <tt>Reference</tt> gesetzt sein oder die zu signierenden Daten explizit im Element <tt>Base64Content</tt> oder <tt>XMLContent</tt> spezifiziert sein. Die Angabe der zu signierenden Daten �ber das Attribut <tt>Reference</tt> und gleichzeitig dem Element <tt>Base64Content</tt> oder <tt>XMLContent</tt> ist nicht erlaubt. <br /><br /> Im Fall von <tt>Structure="detached"</tt> muss das Attribut <tt>Reference</tt> im nachfolgenden <tt>DataObject</tt> Element gesetzt sein. Die Angabe der Elemente <tt>Base64Content</tt> oder <tt>XMLContent</tt> ist optional. <pre> <DataObject> <XMLContent xml:space="preserve"> Diese Daten werden signiert. <XMLContent> </DataObject> </pre> Die zu signierenden Daten werden im Element <tt><DataObject></tt> spezifiziert und k�nnen entweder als <tt><XMLContent></tt> oder <tt><Base64Content></tt> oder �ber das Attribut <tt>Reference</tt> angegeben werden. <pre> <CreateTransformsInfoProfile> <CreateTransformsInfo> <FinalDataMetaInfo> <MimeType>text/plain<MimeType> </FinalDataMetaInfo> </CreateTransformsInfo> </CreateTransformsInfoProfile> </pre> Zu jedem Daten-Objekt k�nnen optional Transformationen (z.B. XPath, XSLT, Base64-Decodierung, etc.)angegeben werden. Werden keine Transformationen angegeben so muss zumindest der MIME-Type der zu signierenden Daten spezifiziert werden. <p> Die von diesem Request erzeugt Response ist in <a href="examples/requestsResponses/CreateXMLSignatureResponse1.xml" target="_new">CreateXMLSignatureResponse1.xml</a> abgelegt. </div> </td></tr></table> <br /><br /> <div id="VerifyXMLSignature1" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> <div id="slogan"> <b>Beispiel: </b><br /> <a href="examples/requestsResponses/VerifyXMLSignatureRequest1.xml" target="_new">Request</a><br /> <a href="examples/requestsResponses/VerifyXMLSignatureResponse1.xml" target="_new">Response</a><br /> <br /><br /> </div> </td> <td valign="top"> <p id="subtitel">Beispiel:<br/ > einfacher VerifyXMLSignatureRequest</p> <div id="block"> Die oben erzeugte XML-Signatur kann mit dem in <a href="examples/requestsResponses/VerifyXMLSignatureRequest1.xml" target="_new">VerifyXMLSignatureReqest1.xml</a> gezeigten einfachen <tt><VerifyXMLSignatureRequest></tt> wieder �berpr�ft werden. <pre> <VerifyXMLSignatureRequest xmlns="http://reference.e-government.gv.at/ namespace/moa/20020822#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> <VerifySignatureInfo> <VerifySignatureEnvironment> <XMLContent> <dsig:Signature Id="signature-1" xmlns:dsig="http://www.w3.org/2000/09/ xmldsig#"> ......... </dsig:Signature> </XMLContent> </VerifySignatureEnvironment> </pre> Im Element <tt>VerifySignatureInfo</tt> wird zuerst die zu �berpr�fende Signatur im Element <tt>VerifySignatureEnvironment</tt> angegeben. Im Beispiel wird die Signatur als Kind-Element von <tt><XMLContent></tt> spezifiziert. Alternativ k�nnte die Signatur in Base64-Kodierung im Element <tt><Base64Content></tt> oder mit dem Attribut <tt>Reference</tt> �ber eine URL referenziert werden. <pre> <VerifySignatureLocation> //dsig:Signature </VerifySignatureLocation> </VerifySignatureInfo> </pre> Weiters muss mittels eines XPath-Ausdrucks im Element <tt><VerifySignatureLocation></tt> die Position der zu pr�fenden Signatur spezifiziert werden. Werden im XPath-Ausdruck Namespace-Prefixes verwendet, m�ssen die entsprechenden Namespace-Deklarationen im Kontext des Elements <tt>VerifySignatureLocation</tt> bekannt sein. Im Beispiel wird das Prefix <tt>dsig</tt> verwendet, das im Element <tt><VerifyXMLSignatureRequest></tt> deklariert wird. <pre> <TrustProfileID>TrustProfile1<TrustProfileID> </pre> Abschlie�end wird im Element <tt><TrustProfileID></tt> ein Trustprofile spezifiziert, das am MOA-SP Server definiert ist und jene Zertifikate enth�lt, die f�r diesen Request als vertrauensw�rdig gelten. <p> Die von diesem Request erzeugt Response ist in <a href="examples/requestsResponses/verifyXMLSignatureResponse1.xml" target="_new">VerifyXMLSignatureResponse1.xml</a> abgelegt. Die Response enth�lt das Ergebnis der Signaturpr�fung im Element <tt><SignatureCheck></tt>, das Ergebnis der Zertifikatspr�fung im Element <tt><CertificateCheck></tt> und Informationen �ber den Signator im Element <tt><SignerInfo>/<X509Data></tt>. Die Informationen �ber den Signator bestehen aus den Elementen <tt><X509SubjectName></tt>, <tt><X509IssuerSerial></tt> und <tt><X509Certificate></tt>. </div> </td></tr></table> <br /><br /> <div id="CreateXMLSignature2" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> <div id="slogan"> <b>Beispiel: </b><br /> <a href="examples/requestsResponses/CreateXMLSignatureRequest2.xml" target="_new">Request</a><br /> <a href="examples/requestsResponses/CreateXMLSignatureResponse2.xml" target="_new">Response</a> <br /> <br /><br /> </div> </td> <td valign="top"> <p id="subtitel">Beispiel:<br/ > umfassender CreateXMLSignatureRequest</p> <div id="block"> Das Beispiel in <a href="examples/requestsResponses/CreateXMLSignatureRequest2.xml" target="_new">CreateXMLSignatureReqest2.xml</a> zeigt einen umfassenden <tt><CreateXMLSignatureRequest></tt>. <br /><br /> Das Beispiel ben�tigt zwei Dateien, die �ber die URL <tt>http://localhost:8080/TestDatenGenerator/resources/<Dateiname></tt> erreichbar sind. Bevor der Beispiel-Request ausgef�hrt wird, muss daher <a href="requestsResponses/TestDatenGenerator.zip">TestDatenGenerator.zip</a> entpackt und in $CATALINA_HOME/webapps kopiert werden. Voraussetzung ist, dass Tomcat auf Port 8080 l�uft. <pre> <CreateXMLSignatureRequest xmlns="http://reference.e-government.gv.at/ namespace/moa/20020822#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> <KeyIdentifier>PKCS12RSAKey1</KeyIdentifier> <SingleSignatureInfo SecurityLayerConformity="false"> <DataObjectInfo Structure="enveloping" ChildOfManifest="true"> <DataObject> <XMLContent>Diese Daten werden signiert.</XMLContent> </DataObject> <CreateTransformsInfoProfile> <CreateTransformsInfo> <FinalDataMetaInfo> <MimeType>text/plain</MimeType> </FinalDataMetaInfo> </CreateTransformsInfo> </CreateTransformsInfoProfile> </DataObjectInfo> </SingleSignatureInfo> </pre> Der Anfang des Requests ist identisch mit dem <a href="#CreateXMLSignature1">einfachen CreateXMLSignatureRequest</a>. Als Variation wurde <tt><ChildOfManifest= "true"></tt> gesetzt. Damit wird spezifiziert, dass die zugeh�rige <tt><dsig:Reference></tt> nicht in das Element <tt><SignedInfo></tt> sondern in ein XMLDSig-Manifest eingef�gt werden soll. Wird das Attribut <tt><ChildOfManifest></tt> nicht gesetzt, dann wird kein XMLDSig-Manifest erzeugt. <pre> <SingleSignatureInfo SecurityLayerConformity="true"> </pre> Anschlie�end wird angegeben, dass eine zweite Signatur erstellt werden soll. <tt>SecurityLayerConformity="true"</tt> gibt an, dass die Signatur entsprechend der Security-Layer Spezifikation Version 1.1 erstellt werden muss, d.h. es werden Signaturattribute und gegebenenfalls ein <a href="http://www.buergerkarte.at/konzept/securitylayer/spezifikation/20020831/core/Core.html#signaturerstellungNachXMLDSIGAntwortImplTransParam" target="_new"> Signatur-Manifest<a> erzeugt. Wird eine Security-Layer konforme Signatur erzeugt, dann darf <tt><ChildOfManifest="true"></tt> nicht gesetzt sein. <p> Die zweite Signatur soll zwei Datenobjekte enthalten: <pre> <DataObjectInfo Structure="detached"> </pre> F�r das erste Datenobjekt sollen die signierten Daten nicht in der Signatur enthalten sein (<tt>Structure="detached"</tt>). <pre> <DataObject Reference="http://localhost:8080/TestDatenGenerator /resources/testDaten.txt"> <Base64Content> RGllcyBz........DQphdXM= </Base64Content> </DataObject> <CreateTransformsInfoProfile> <CreateTransformsInfo> <FinalDataMetaInfo> <MimeType>text/plain</MimeType> </FinalDataMetaInfo> </CreateTransformsInfo> </CreateTransformsInfoProfile> </DataObjectInfo> </pre> Die zu signierenden Daten sind in Base64-Kodierung angegeben und werden in der Signatur �ber die URL, die im Attribut <tt>Reference</tt> angegeben ist, referenziert. Diese URL wird im Zuge der Signaturerstellung nicht aufgel�st, da die Daten bereits explizit im Request angegeben sind. Es werden keine weitere Transformationen f�r das Datenobjekt angegeben. <pre> <DataObjectInfo Structure="enveloping"> <DataObject> <XMLContent xml:space="preserve"> <data:book xmlns:data="http://uri.data.org" data:hardback="yes"> <data:title> Gesundheitliche Auswirkungen elektronischer Signaturen </data:title> <data:first-name>Ellipse</data:first-name> <data:last-name>Kurvenreich</data:last-name> <data:birth-date>1951-04-16</data:birth-date> <data:birth-location> Hinterm Berg </data:birth-location> <data:register-number> 6-930-21512-12 </data:register-number> </data:book> </XMLContent> </DataObject> </pre> Das zweite Datenobjekt, das signiert werden soll ist eine XML-Struktur. <p> F�r die XML-Struktur wird eine Transformation spezifiziert, die angewendet werden muss, bevor die Daten signiert werden: <pre> <CreateTransformsInfoProfile> </pre> Transformationen k�nnen entweder explizit im Request im Element <tt><CreateTransformsInfoProfile></tt> angegeben werden oder mit dem Element <tt><CreateTransformsInfoProfileID></tt> �ber eine am MOA-SS-Server konfigurierte Profil-ID referenziert werden. <pre> <CreateTransformsInfo> </pre> Im Transformationsprofil werden im Element <tt><CreateTransformsInfo></tt> die Transformationskette (<tt><dsig:Transforms></tt>) und optionale Erg�nzungsobjekte (<tt><Supplement></tt>) angegeben. <pre> <dsig:Transforms> <dsig:Transform Algorithm="http://www.w3.org/TR/ 1999/REC-xslt-19991116"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/ 1999/XSL/Transform" version="1.0"> <xsl:include href="http://localhost:8080/ TestDatenGenerator/resources/ CX1_book_not_here.xsl"/> </xsl:stylesheet> </dsig:Transform> </dsig:Transforms> </pre> Im Beispiel besteht die Transformationskette aus einer XSLT-Transformation, die ein weiteres XSLT Stylesheet inkludiert. MOA-SS unterst�tzt alle Transformationen aus der XMLDSig-Spezifikation sowie Exclusive XML Canonicalization 1.0 und XPath Filter 2.0. <pre> <FinalDataMetaInfo> <MimeType>text/html</MimeType> </FinalDataMetaInfo> </CreateTransformsInfo> </pre> <tt><FinalDataMetaInfo></tt> gibt den MIME-Type der Daten an, die das Ergebnis der Transformation bilden und tats�chlich signiert werden. <p> Weiters k�nnen optional Erg�nzungsobjekte angegeben werden, die Daten enthalten, die von MOA-SP zur Signaturerstellung verwendet werden sollen: <pre> <Supplement> <Content Reference="http://localhost:8080/ TestDatenGenerator/resources/ CX1_book_not_here.xsl"> <Base64Content>PHhzbDpzdHls.....eWxlc2hlZXQ+ </Base64Content> </Content> </Supplement> </CreateTransformsInfoProfile> </DataObjectInfo> </pre> Im aktuellen Beispiel wird ein Erg�nzungsobjekt f�r jenes Stylesheet angegeben, das im Stylesheet der oben spezifizierten XSLT-Transformation referenziert wird. MOA-SS wird die angegebene URL nicht aufl�sen sondern stattdessen die im Erg�nzungsobjekt enthaltenen Daten verwenden. <p> <pre> <CreateSignatureInfo xmlns:env="http://uri.env.org"> </pre> Abschlie�end wird hier noch mittels des optionalen Elements <tt><CreateSignatureInfo></tt> festgelegt, dass die zu erzeugende Signatur in ein bereits bestehendes XML-Dokument eingebettet werden soll. Im Beispiel wird das Namespace-Prefix <tt>env</tt> hier deklariert, da es weiter unten im Element <tt>CreateSignatureLocation</tt> verwendet werden wird. <pre> <CreateSignatureEnvironment> <XMLContent> <env:Document xmlns:env="http://uri.env.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://uri.env.org http://anyhost/envSchema.xsd"> nach diesem Text wird die Signatur in das Dokument eingef�gt </env:Document> </XMLContent> </CreateSignatureEnvironment> </pre> Im Element <tt><CreateSignatureEnvironment></tt> wird das XML-Dokument angegeben. <pre> <CreateSignatureEnvironmentProfile> <CreateSignatureLocation Index="1"> /env:Document </CreateSignatureLocation> </CreateSignatureEnvironmentProfile> </pre> Anschlie�end wird im Profil angegeben an welcher Position des XML-Dokuments die Signatur eingef�gt werden soll. Im Element <tt><CreateSignatureLocation></tt> wird ein XPath-Ausdruck angegeben, der das Element selektiert, als dessen Kind die Signatur eingef�gt werden soll. Das Attribut <tt>Index</tt> spezifiziert die Position innerhalb dieses Elements, an der die Signatur eingef�gt werden soll. <tt>"0"</tt> gibt an, dass die Signatur als erstes Kind eingef�gt werden soll.</tt> <pre> </CreateSignatureInfo> </SingleSignatureInfo> </CreateXMLSignatureRequest> </pre> Abschlie�end m�ssen alle Elemente wieder geschlossen werden. <p> Die von diesem Request erzeugt Response ist in <a href="examples/requestsResponses/CreateXMLSignatureResponse2.xml" target="_new"> CreateXMLSignatureResponse2.xml</a> abgelegt. Die Response enth�lt zwei Elemente <tt>SignatureEnvironment</tt>, die die beiden erzeugten Signaturen enthalten. </div> </td></tr></table> <br /><br /> <div id="VerifyXMLSignature2" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> <div id="slogan"> <b>Beispiel: </b><br /> <a href="examples/requestsResponses/VerifyXMLSignatureRequest2.xml" target="_new">Request</a><br /> <a href="examples/requestsResponses/VerifyXMLSignatureResponse2.xml" target="_new">Response</a><br /> <br /><br /> </div> </td> <td valign="top"> <p id="subtitel">Beispiel:<br/ > umfassender VerifyXMLSignatureRequest</p> <div id="block"> Das Beispiel in <a href="examples/requestsResponses/VerifyXMLSignatureRequest2.xml" target="_new"> VerifyXMLSignatureReqest2.xml</a> zeigt wie die im obigen Beispiel erzeugte zweite Signatur �berpr�ft werden kann. <pre> <VerifyXMLSignatureRequest xmlns="http://reference.e-government.gv.at/ namespace/moa/20020822#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> <DateTime>2003-03-24T12:41:54+01:00</DateTime> </pre> Optional kann ein Datum und eine Uhrzeit angegeben werden, f�r die die �berpr�fung durchgef�hrt werden soll. <pre> <VerifySignatureInfo> <VerifySignatureEnvironment> <XMLContent> <env:Document xmlns:env="http://uri.env.org" .....> nach diesem Text ..... Dokument eingefuegt <dsig:Signature .....>.....</dsig:Signature> </env:Document> </XMLContent> </VerifySignatureEnvironment> </pre> Die Signatur inklusive des umgebenden XML-Dokuments wird im Element <tt><VerifySignatureEnvironment></tt> angegeben. <pre> <VerifySignatureLocation> //dsig:Signature </VerifySignatureLocation> </VerifySignatureInfo> </pre> Die zu pr�fende Signatur aus dem Element <tt><VerifySignatureEnvironment></tt> wird �ber einen XPath-Ausdruck spezifiziert. Enth�lt die Signatur ID-Attribute, die referenziert werden, dann muss das XML-Dokument validierend geparst werden k�nnen. Im Beispiel-Request wird die URL des Schemas f�r das Element <tt>env:Document</tt> im Attribut <tt>xsi:schemaLocation</tt> spezifiziert (<tt>http://anyhost/envSchema.xsd</tt>). Soll MOA-SP diese URL nicht selbst aufl�sen, dann kann das Schema kann im Element <tt>SupplementProfile</tt> �bergeben werden: <pre> <SupplementProfile> <Content Reference="http://anyhost/envSchema.xsd"> <XMLContent xml:space="preserve"> <xsd:schema targetNamespace="http://uri.env.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xsd:element name="Document"> <xsd:complexType mixed="true"> <xsd:sequence minOccurs="0" maxOccurs="unbounded"> <xsd:any namespace="##any" processContents="lax"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </XMLContent> </Content> </SupplementProfile> </pre> <pre> <ReturnHashInputData/> </pre> Das Element gibt an, dass f�r jedes <tt>dsig:SignedInfo/dsig:Reference</tt> Element jene Daten, die f�r die Hash-Berechnung der Signatur als Eingangsdaten verwendet werden, in der Antwort returniert werden sollen. <pre> <TrustProfileID>TrustProfile1</TrustProfileID> </VerifyXMLSignatureRequest> </pre> Abschlie�end wird ein am MOA-SP Server definiertes Profil angegeben, dass jene Zertifikate umfasst, die f�r diesen Request als vertrauensw�rdig anzusehen sind. <p> Die von diesem Request erzeugt Response ist in <a href="examples/requestsResponses/VerifyXMLSignatureResponse2.xml" target="_new"> VerifyXMLSignatureResponse2.xml</a> abgelegt. Zus�tzlich zu den Daten der Response des einfachen VerifyXMLSignatureRequests enth�lt diese Response f�r jedes <tt>dsig:SignedInfo/dsig:Reference</tt> Element ein <tt>HashInputData</tt> Element. </div> </td></tr></table> <br /><br /> <div id="VerifyCMSSignature" /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top" id="klein"> <p id="subtitel"> </p> <div id="slogan"> <b>Beispiel: </b><br /> <a href="examples/requestsResponses/VerifyCMSSignatureRequest.xml" target="_new">Request</a><br /> <a href="examples/requestsResponses/VerifyCMSSignatureResponse.xml" target="_new">Response</a><br /> <br /><br /> </div> </td> <td valign="top"> <p id="subtitel">Beispiel:<br/ > VerifyCMSSignatureRequest</p> <div id="block"> Das Beispiel in <a href="examples/requestsResponses/VerifyCMSSignatureRequest.xml" target="_new">VerifyCMSSignatureRequest.xml</a> zeigt einen einfachen <tt><VerifyCMSSignatureRequest></tt>. Die Bedeutung der einzelnen Elemente wird im folgenden beschrieben: <pre> <VerifyCMSSignatureRequest xmlns="http://reference.e-government.gv.at/ namespace/moa/20020822#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Signatories="1"> </pre> Das optionale Attribut <tt>Signatories</tt> enth�lt eine Liste von positiven Ganzzahlen und gibt an, welche Signaturen im CMS-Datenobjekt �berpr�ft werden sollen. <tt>Signatories="1"</tt> gibt an, dass die erste Signatur gepr�ft werden soll. Wird das Attribut nicht spezifiziert, dann wird ebenfalls die erste Signatur gepr�ft. <tt>Signatories="all"</tt> gibt an, dass alle im CMS-Objekt enthaltene Signaturen gepr�ft werden sollen. <pre> <DateTime>2003-04-04T09:30:47-05:00</DateTime> </pre> Das optionale Element <tt><DateTime></tt> gibt an f�r welchen Zeitpunkt die Signatur�berpr�fung durchgef�hrt werden soll. Ist das Element nicht im Request enthalten, dann wird die aktuelle Systemzeit verwendet. <pre> <CMSSignature>MIIGAAYJKo...mT9fmvKwdJOiA==</CMSSignature> </pre> Das Element <tt><CMSSignature></tt> enth�lt das CMS-Signaturobjekt in Base64-Kodierung. <br /><br /> Sind die signierten Daten nicht in der CMS-Signatur enthalten, m�ssen sie im <tt>DataObject</tt>-Element angegeben werden. Optional kann der MIME-Type dieser Daten spezifiziert werden. Die eigentlichen Daten m�ssen im <tt>Base64Content</tt>-Element in Base64-Kodierung vorliegen. <pre> <TrustProfileID>TrustProfile1<TrustProfileID> </pre> <tt>TrustProfile1</tt> referenziert ein im Konfigurationsfile des MOA-Server definiertes Profil, das jene Zertifikate umfasst, die f�r diese �berpr�fung als vertrauensw�rdig gelten. <p> Die von diesem Request erzeugt Response ist in <a href="examples/requestsResponses/VerifyCMSSignatureResponse.xml" target="_new"> VerifyCMSSignatureResponse.xml</a> abgelegt. Die Response enth�lt die selben Informationen wie die Response zum einfachen VerifyXMLSignatureRequest. </div> </td></tr></table> <br /><br /> <table width="650" border="0" cellpadding="10" cellspacing="0"> <tr> <td width="170" valign="top"><br /></td> <td valign="top"> <hr /> <div style="font-size:8pt; color:#909090">© 2003 <!-- Development Center, BRZ GmbH --></div> </td></tr></table> <br /> </div> </body> </html>