diff options
| author | pdanner <pdanner@d688527b-c9ab-4aba-bd8d-4036d912da1d> | 2007-09-04 10:29:42 +0000 | 
|---|---|---|
| committer | pdanner <pdanner@d688527b-c9ab-4aba-bd8d-4036d912da1d> | 2007-09-04 10:29:42 +0000 | 
| commit | 9e71760a80a7b2cc25ac4700a5d6b6c4d5582eb8 (patch) | |
| tree | 1970625f2c58a3a88be236fac129cef3cfd17659 /spss/handbook/clients/api/src/main | |
| parent | 29866bdc9e8b2cab619cd151f32b036c35debbfe (diff) | |
| download | moa-id-spss-9e71760a80a7b2cc25ac4700a5d6b6c4d5582eb8.tar.gz moa-id-spss-9e71760a80a7b2cc25ac4700a5d6b6c4d5582eb8.tar.bz2 moa-id-spss-9e71760a80a7b2cc25ac4700a5d6b6c4d5582eb8.zip | |
re-arranged handbook project step1
git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@980 d688527b-c9ab-4aba-bd8d-4036d912da1d
Diffstat (limited to 'spss/handbook/clients/api/src/main')
2 files changed, 277 insertions, 0 deletions
| diff --git a/spss/handbook/clients/api/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/api/CreateXMLSignature.java b/spss/handbook/clients/api/src/main/java/at/gv/egovernment/moa/spss/handbook/clients/api/CreateXMLSignature.java new file mode 100644 index 000000000..2534e4913 --- /dev/null +++ b/spss/handbook/clients/api/src/main/java/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  +   * <code>java.endorsed.dirs</code> auf jenes Verzeichnis gesetzt haben, in dem sich die XPath- +   * und XSLT-Bibliothek <em>Xalan-J</em> befindet. +   *  +   * @param args <ul> +   *             <li> +   *             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.  +   *             </li> +   *             <li> +   *             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.  +   *             </li> +   *             </ul> +   *  +   * @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 = "Diese Daten werden signiert.".getBytes("UTF-8"); +    ByteArrayInputStream bis = new ByteArrayInputStream(data); +    Content cont = spf.createContent(bis, null); + +    // Metainformationen zu den zu signierenden Daten erstellen +    MetaInfo mi = spf.createMetaInfo("text/plain", null, 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_ENVELOPING, 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 <MOASPSSConfigFile> <Log4JConfigFile>"); +    } +    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/main/java/at/gv/egovernment/moa/spss/handbook/clients/api/VerifyXMLSignature.java b/spss/handbook/clients/api/src/main/java/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/main/java/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  +   * <code>java.endorsed.dirs</code> auf jenes Verzeichnis gesetzt haben, in dem sich die XPath- +   * und XSLT-Bibliothek <em>Xalan-J</em> befindet. +   *  +   * @param args <ul> +   *             <li> +   *             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.  +   *             </li> +   *             <li> +   *             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.  +   *             </li> +   *             <li> +   *             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 <code>clients/api/signatures/SimpleSignature.xml</code>. +   *             </li> +   *             </ul> +   */ +  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 <MOASPSSConfigFile> <Log4JConfigFile> <XMLDocWithSignature>"); +      System.exit(-1); +    } +    System.setProperty("moa.spss.server.configuration", args[0]); +    System.setProperty("log4j.configuration", "file:" + args[1]); +  } +}
\ No newline at end of file | 
