diff options
Diffstat (limited to 'spss.server/doc/moa_spss/sp-anwendung.htm')
-rw-r--r-- | spss.server/doc/moa_spss/sp-anwendung.htm | 1079 |
1 files changed, 1079 insertions, 0 deletions
diff --git a/spss.server/doc/moa_spss/sp-anwendung.htm b/spss.server/doc/moa_spss/sp-anwendung.htm new file mode 100644 index 000000000..4adccb46d --- /dev/null +++ b/spss.server/doc/moa_spss/sp-anwendung.htm @@ -0,0 +1,1079 @@ +<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>
\ No newline at end of file |