/* * Copyright 2003 Federal Chancellery Austria * MOA-SPSS has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ 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 */ 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]); } }