From 9b34abab090eead44b964046a56eaa96701c1b1b Mon Sep 17 00:00:00 2001 From: gregor Date: Fri, 22 Apr 2005 09:25:46 +0000 Subject: =?UTF-8?q?API-Beispiel=20f=C3=BCr=20Signaturpr=C3=BCfung=20erstel?= =?UTF-8?q?lt;=20API-Beispiel=20f=C3=BCr=20Signaturpr=C3=BCfung=20umbenann?= =?UTF-8?q?t.=20Beispielsignatur=20f=C3=BCr=20Signaturpr=C3=BCfungsbeispie?= =?UTF-8?q?l=20angelegt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@316 d688527b-c9ab-4aba-bd8d-4036d912da1d --- .../handbook/clients/api/APIClientExample.java | 130 ------------------ .../handbook/clients/api/CreateXMLSignature.java | 130 ++++++++++++++++++ .../handbook/clients/api/VerifyXMLSignature.java | 147 +++++++++++++++++++++ 3 files changed, 277 insertions(+), 130 deletions(-) delete mode 100644 spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/APIClientExample.java create mode 100644 spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/CreateXMLSignature.java create mode 100644 spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/VerifyXMLSignature.java (limited to 'spss.handbook/clients/api/src/at') diff --git a/spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/APIClientExample.java b/spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/APIClientExample.java deleted file mode 100644 index a1e37fdd0..000000000 --- a/spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/APIClientExample.java +++ /dev/null @@ -1,130 +0,0 @@ -package at.gv.egovernment.moa.spss.handbook.clients.api; - -import java.io.ByteArrayInputStream; -import java.util.ArrayList; -import java.util.List; - -import org.w3c.dom.Element; - -import at.gv.egovernment.moa.spss.api.SPSSFactory; -import at.gv.egovernment.moa.spss.api.SignatureCreationService; -import at.gv.egovernment.moa.spss.api.common.Content; -import at.gv.egovernment.moa.spss.api.common.MetaInfo; -import at.gv.egovernment.moa.spss.api.xmlsign.CreateTransformsInfo; -import at.gv.egovernment.moa.spss.api.xmlsign.CreateTransformsInfoProfile; -import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureRequest; -import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureResponse; -import at.gv.egovernment.moa.spss.api.xmlsign.DataObjectInfo; -import at.gv.egovernment.moa.spss.api.xmlsign.SignatureEnvironmentResponse; -import at.gv.egovernment.moa.spss.api.xmlsign.SingleSignatureInfo; -import at.gv.egovernment.moa.util.DOMUtils; - -/** - * Dieses einfache Beispiel demonstriert grundlegend den Gebrauch der API von MOA SPSS. Es wird damit eine - * einfach aufgebaute XML-Signatur erzeugt. - */ -public class APIClientExample -{ - /** - * Methode main. - * - * Enthält beispielhaften Code zum grundlegenden Gebrauch der API von MOA SPSS. Es wird damit eine - * einfach aufgebaute XML-Signatur erzeugt. - * - * ACHTUNG: Stellen Sie bei Verwendung eines JDK 1.4.x sicher, dass Sie die System-Property - * java.endorsed.dirs auf jenes Verzeichnis gesetzt haben, in dem sich die XPath- - * und XSLT-Bibliothek Xalan-J befindet. - * - * @param args - * - * @throws Exception Sollten Fehler auftreten werden die Fehler an die Java-VM weitergeleitet. - */ - public static void main(String[] args) throws Exception - { - // Setzen der System-Properties - init(args); - - // Serverfunktionshandler instanzieren - SPSSFactory spf = SPSSFactory.getInstance(); - - // Zu signierende Daten in ein Contentobjekt einbinden (die Daten werden hier explizit angegeben, - // sollen aber in der Signatur mittels URL "http://uri.data.org" referenziert werden - byte[] data = "Dies sind Testdaten".getBytes("UTF-8"); - ByteArrayInputStream bis = new ByteArrayInputStream(data); - Content cont = spf.createContent(bis, "http://uri.data.org"); - - // Metainformationen zu den zu signierenden Daten erstellen - MetaInfo mi = spf.createMetaInfo("text/plain", "Testdaten", null, null); - - // Transformationen erstellen (hier werden keine Transformationen angewandt) - CreateTransformsInfo cti = spf.createCreateTransformsInfo(null, mi); - CreateTransformsInfoProfile ct = spf.createCreateTransformsInfoProfile(cti, null); - - // Datenobjekt aufbauen - DataObjectInfo doi = spf.createDataObjectInfo(DataObjectInfo.STRUCTURE_DETACHED, false, cont, ct); - - // Erstellen eines SingleSignatureInfo-Containers (enthält alle Angaben zur Erstellung *einer* - // Signatur - List dataobjectinfolist = new ArrayList(); - dataobjectinfolist.add(doi); - SingleSignatureInfo ssi = spf.createSingleSignatureInfo(dataobjectinfolist, null, false); - - // Erstellen des Request-Objekts (Schlüsselbezeichner, Liste von SingleSignatureInfo-Containern) - List singlesignatureinfolist = new ArrayList(); - singlesignatureinfolist.add(ssi); - CreateXMLSignatureRequest cxsreq = spf.createCreateXMLSignatureRequest("KG_allgemein", - singlesignatureinfolist); - - // Signatureerstellungsservice instanzieren und aufrufen - SignatureCreationService scs = SignatureCreationService.getInstance(); - CreateXMLSignatureResponse cxsres = scs.createXMLSignature(cxsreq); - - // Response auswerten - List elements = cxsres.getResponseElements(); - SignatureEnvironmentResponse ser = (SignatureEnvironmentResponse) elements.get(0); - - // Auswertung des ersten (und einzigen) SignatureEnvironmentResponse-Containers - int response_type = ser.getResponseType(); - - if (response_type == SignatureEnvironmentResponse.ERROR_RESPONSE) - { - // Fehlerfall - System.out.println("Bei der Erstellung der Signatur ist ein Fehler aufgetreten."); - } - else - { - // Signaturerstellung erfolgreich - System.out.println("Signaturerstellung erfolgreich:"); - - Element se = ser.getSignatureEnvironment(); - System.out.println(DOMUtils.serializeNode(se)); - } - } - - /** - * Setzt die notwendigen System-Properties für die Konfiguration der MOA SP/SS API. - * - * @param args Siehe @link APIClientExample#main(String[]). - */ - private static void init(String[] args) - { - if (args == null || args.length != 2) - { - System.out.println("Verwendung: APIClientExample "); - } - System.setProperty("moa.spss.server.configuration", args[0]); - System.setProperty("log4j.configuration", "file:" + args[1]); - } -} \ No newline at end of file diff --git a/spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/CreateXMLSignature.java b/spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/CreateXMLSignature.java new file mode 100644 index 000000000..33924bc01 --- /dev/null +++ b/spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/CreateXMLSignature.java @@ -0,0 +1,130 @@ +package at.gv.egovernment.moa.spss.handbook.clients.api; + +import java.io.ByteArrayInputStream; +import java.util.ArrayList; +import java.util.List; + +import org.w3c.dom.Element; + +import at.gv.egovernment.moa.spss.api.SPSSFactory; +import at.gv.egovernment.moa.spss.api.SignatureCreationService; +import at.gv.egovernment.moa.spss.api.common.Content; +import at.gv.egovernment.moa.spss.api.common.MetaInfo; +import at.gv.egovernment.moa.spss.api.xmlsign.CreateTransformsInfo; +import at.gv.egovernment.moa.spss.api.xmlsign.CreateTransformsInfoProfile; +import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureRequest; +import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureResponse; +import at.gv.egovernment.moa.spss.api.xmlsign.DataObjectInfo; +import at.gv.egovernment.moa.spss.api.xmlsign.SignatureEnvironmentResponse; +import at.gv.egovernment.moa.spss.api.xmlsign.SingleSignatureInfo; +import at.gv.egovernment.moa.util.DOMUtils; + +/** + * Dieses einfache Beispiel demonstriert grundlegend den Gebrauch der API von MOA SP/SS. Es wird damit eine + * einfach aufgebaute XML-Signatur erzeugt. + */ +public class CreateXMLSignature +{ + /** + * Methode main. + * + * Enthält beispielhaften Code zum grundlegenden Gebrauch der API von MOA SP/SS. Es wird damit eine + * einfach aufgebaute XML-Signatur erzeugt. + * + * ACHTUNG: Stellen Sie bei Verwendung von J2SE 1.4.x bzw. 5.x sicher, dass Sie die System-Property + * java.endorsed.dirs auf jenes Verzeichnis gesetzt haben, in dem sich die XPath- + * und XSLT-Bibliothek Xalan-J befindet. + * + * @param args
    + *
  • + * args[0] enthält einen Verweis auf die Konfigurations-Datei von MOA SP/SS Der Verweis + * enthält entweder eine absolute oder eine relative Pfadangabe, wobei eine relative + * Angabe als relativ zum Arbeitsverzeichnis der Java VM interpretiert wird. + *
  • + *
  • + * args[1] enthält einen Verweis auf die Konfigurations-Datei von Log4J, dem Logging- + * Framework, das von MOA SP/SS verwendet wird. Der Verweis enthält entweder eine + * absolute oder eine relative Pfadangabe, wobei eine relative Angabe als relativ zum + * Arbeitsverzeichnis der Java VM interpretiert wird. + *
  • + *
+ * + * @throws Exception Sollten Fehler auftreten werden die Fehler an die Java-VM weitergeleitet. + */ + public static void main(String[] args) throws Exception + { + // Setzen der System-Properties + init(args); + + // Serverfunktionshandler instanzieren + SPSSFactory spf = SPSSFactory.getInstance(); + + // Zu signierende Daten in ein Contentobjekt einbinden (die Daten werden hier explizit angegeben, + // sollen aber in der Signatur mittels URL "http://uri.data.org" referenziert werden + byte[] data = "Dies sind Testdaten".getBytes("UTF-8"); + ByteArrayInputStream bis = new ByteArrayInputStream(data); + Content cont = spf.createContent(bis, "http://uri.data.org"); + + // Metainformationen zu den zu signierenden Daten erstellen + MetaInfo mi = spf.createMetaInfo("text/plain", "Testdaten", null, null); + + // Transformationen erstellen (hier werden keine Transformationen angewandt) + CreateTransformsInfo cti = spf.createCreateTransformsInfo(null, mi); + CreateTransformsInfoProfile ct = spf.createCreateTransformsInfoProfile(cti, null); + + // Datenobjekt aufbauen + DataObjectInfo doi = spf.createDataObjectInfo(DataObjectInfo.STRUCTURE_DETACHED, false, cont, ct); + + // Erstellen eines SingleSignatureInfo-Containers (enthält alle Angaben zur Erstellung *einer* + // Signatur + List dataobjectinfolist = new ArrayList(); + dataobjectinfolist.add(doi); + SingleSignatureInfo ssi = spf.createSingleSignatureInfo(dataobjectinfolist, null, false); + + // Erstellen des Request-Objekts (Schlüsselbezeichner, Liste von SingleSignatureInfo-Containern) + List singlesignatureinfolist = new ArrayList(); + singlesignatureinfolist.add(ssi); + CreateXMLSignatureRequest cxsreq = spf.createCreateXMLSignatureRequest("KG_allgemein", + singlesignatureinfolist); + + // Signatureerstellungsservice instanzieren und aufrufen + SignatureCreationService scs = SignatureCreationService.getInstance(); + CreateXMLSignatureResponse cxsres = scs.createXMLSignature(cxsreq); + + // Response auswerten + List elements = cxsres.getResponseElements(); + SignatureEnvironmentResponse ser = (SignatureEnvironmentResponse) elements.get(0); + + // Auswertung des ersten (und einzigen) SignatureEnvironmentResponse-Containers + int response_type = ser.getResponseType(); + + if (response_type == SignatureEnvironmentResponse.ERROR_RESPONSE) + { + // Fehlerfall + System.out.println("Bei der Erstellung der Signatur ist ein Fehler aufgetreten."); + } + else + { + // Signaturerstellung erfolgreich + System.out.println("Signaturerstellung erfolgreich:"); + + Element se = ser.getSignatureEnvironment(); + System.out.println(DOMUtils.serializeNode(se)); + } + } + + /** + * Setzt die notwendigen System-Properties für die Konfiguration der MOA SP/SS API. + * + * @param args Siehe @link CreateXMLSignature#main(String[]). + */ + private static void init(String[] args) + { + if (args == null || args.length != 2) + { + System.out.println("Verwendung: CreateXMLSignature "); + } + System.setProperty("moa.spss.server.configuration", args[0]); + System.setProperty("log4j.configuration", "file:" + args[1]); + } +} \ No newline at end of file diff --git a/spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/VerifyXMLSignature.java b/spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/VerifyXMLSignature.java new file mode 100644 index 000000000..fed8ba9f2 --- /dev/null +++ b/spss.handbook/clients/api/src/at/gv/egovernment/moa/spss/handbook/clients/api/VerifyXMLSignature.java @@ -0,0 +1,147 @@ +package at.gv.egovernment.moa.spss.handbook.clients.api; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.HashMap; + +import at.gv.egovernment.moa.spss.MOAException; +import at.gv.egovernment.moa.spss.api.SPSSFactory; +import at.gv.egovernment.moa.spss.api.SignatureVerificationService; +import at.gv.egovernment.moa.spss.api.common.Content; +import at.gv.egovernment.moa.spss.api.common.SignerInfo; +import at.gv.egovernment.moa.spss.api.xmlverify.VerifySignatureInfo; +import at.gv.egovernment.moa.spss.api.xmlverify.VerifySignatureLocation; +import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureRequest; +import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureResponse; + +/** + * Dieses einfache Beispiel demonstriert grundlegend den Gebrauch der API von MOA SP/SS. + * Es wird damit eine einfach aufgebaute XML-Signatur geprüft. + */ + +public class VerifyXMLSignature +{ + /** + * Methode main. + * + * Enthält beispielhaften Code zum grundlegenden Gebrauch der API von MOA SP/SS. + * Es wird damit eine einfach aufgebaute XML-Signatur geprüft. + * + * ACHTUNG: Stellen Sie bei Verwendung von J2SE 1.4.x bzw. 5.x sicher, dass Sie die System-Property + * java.endorsed.dirs auf jenes Verzeichnis gesetzt haben, in dem sich die XPath- + * und XSLT-Bibliothek Xalan-J befindet. + * + * @param args
    + *
  • + * args[0] enthält einen Verweis auf die Konfigurations-Datei von MOA SP/SS Der Verweis + * enthält entweder eine absolute oder eine relative Pfadangabe, wobei eine relative + * Angabe als relativ zum Arbeitsverzeichnis der Java VM interpretiert wird. + *
  • + *
  • + * args[1] enthält einen Verweis auf die Konfigurations-Datei von Log4J, dem Logging- + * Framework, das von MOA SP/SS verwendet wird. Der Verweis enthält entweder eine + * absolute oder eine relative Pfadangabe, wobei eine relative Angabe als relativ zum + * Arbeitsverzeichnis der Java VM interpretiert wird. + *
  • + *
  • + * args[2] enthält Pfad und Dateiname des XML-Dokuments mit der darin enthaltenen, zu + * prüfenden XML-Signatur. Verwenden Sie z.B. das mit diesem Handbuch mitgelieferte + * Beispiel clients/api/signatures/SimpleSignature.xml. + *
  • + *
+ */ + public static void main(String[] args) + { + // Setzen der System-Properties + init(args); + + // Factory und Service instanzieren + SPSSFactory spssFac = SPSSFactory.getInstance(); + SignatureVerificationService sigVerifyService = SignatureVerificationService.getInstance(); + + // Content aus Dokument mit zu prüfender Signatur erstellen + FileInputStream sigDocFIS = null; + try + { + sigDocFIS = new FileInputStream(args[2]); + } + catch (FileNotFoundException e1) + { + System.err.println("XML-Dokument mit zu prüfender Signatur nicht gefunden: " + args[2]); + System.exit(-1); + } + Content sigDocContent = spssFac.createContent(sigDocFIS, null); + + // Position der zu prüfenden Signatur im Dokument angeben + // (Nachdem im XPath-Ausdruck ein NS-Präfix verwendet wird, muss in einer Lookup-Tabelle + // der damit bezeichnete Namenraum mitgegeben werden) + HashMap nSMap = new HashMap(); + nSMap.put("dsig", "http://www.w3.org/2000/09/xmldsig#"); + VerifySignatureLocation sigLocation = spssFac.createVerifySignatureLocation("//dsig:Signature", nSMap); + + // Zu prüfendes Dokument und Signaturposition zusammenfassen + VerifySignatureInfo sigInfo = spssFac.createVerifySignatureInfo(sigDocContent, sigLocation); + + // Prüfrequest zusammenstellen + VerifyXMLSignatureRequest verifyRequest = spssFac.createVerifyXMLSignatureRequest( + null, // Wird Prüfzeit nicht angegeben, wird aktuelle Zeit verwendet + sigInfo, + null, // Keine Ergänzungsobjekte notwendig + null, // Signaturmanifest-Prüfung soll nicht durchgeführt werden + false, // Hash-Inputdaten, d.h. tatsächlich signierte Daten werden nicht zurückgeliefert + "Test-Signaturdienste"); // ID des verwendeten Vertrauensprofils + + VerifyXMLSignatureResponse verifyResponse = null; + try + { + // Aufruf der Signaturprüfung + verifyResponse = sigVerifyService.verifyXMLSignature(verifyRequest); + } + catch (MOAException e) + { + // Service liefert Fehler + System.err.println("Die Signaturprüfung hat folgenden Fehler geliefert:"); + System.err.println("Fehlercode: " + e.getMessageId()); + System.err.println("Fehlernachricht: " + e.getMessage()); + System.exit(-1); + } + + // Auswertung der Response + System.out.println(); + System.out.println("Ergebnisse der Signaturprüfung:"); + System.out.println(); + + // Besondere Eigenschaften des Signatorzertifikats + SignerInfo signerInfo = verifyResponse.getSignerInfo(); + System.out.println("*** Ist Zertifikat des Signators qualifiziert? " + ((signerInfo.isQualifiedCertificate()) ? "ja" : "nein")); + System.out.println("*** Ist Zertifikat des Signators von einer Behörde? " + ((signerInfo.isPublicAuthority()) ? "ja" : "nein")); + + // Ergebnisse von Signatur- und Zertifikatsprüfung + System.out.println(); + System.out.println("Ergebniscode der Signaturprüfung: " + verifyResponse.getSignatureCheck().getCode()); + System.out.println("Ergebniscode der Zertifikatsprüfung: " + verifyResponse.getCertificateCheck().getCode()); + + // Signatorzertifikat + System.out.println(); + System.out.println("*** Zertifikat des Signators:"); + System.out.println("Aussteller: " + signerInfo.getSignerCertificate().getIssuerDN()); + System.out.println("Subject: " + signerInfo.getSignerCertificate().getSubjectDN()); + System.out.println("Seriennummer: " + signerInfo.getSignerCertificate().getSerialNumber()); + } + + /** + * Setzt die notwendigen System-Properties für die Konfiguration der MOA SP/SS API. + * + * @param args Siehe @link VerifyXMLSignature#main(String[]). + */ + private static void init(String[] args) + { + if (args == null || args.length != 3) + { + System.out.println("Verwendung: VerifyXMLSignature "); + System.exit(-1); + } + System.setProperty("moa.spss.server.configuration", args[0]); + System.setProperty("log4j.configuration", "file:" + args[1]); + } +} \ No newline at end of file -- cgit v1.2.3