aboutsummaryrefslogtreecommitdiff
path: root/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java
diff options
context:
space:
mode:
Diffstat (limited to 'spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java')
-rw-r--r--spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java213
1 files changed, 86 insertions, 127 deletions
diff --git a/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java b/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java
index ad7ecb6b6..484dfc313 100644
--- a/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java
+++ b/spss.handbook/clients/webservice/src/at/gv/egovernment/moa/spss/handbook/clients/webservice/HTTPSClientAuth.java
@@ -1,163 +1,122 @@
package at.gv.egovernment.moa.spss.handbook.clients.webservice;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.security.Security;
-import java.util.Vector;
-
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.rpc.Call;
-import javax.xml.rpc.Service;
-import javax.xml.rpc.ServiceFactory;
-
-import org.apache.axis.message.SOAPBodyElement;
-import org.apache.xml.serialize.OutputFormat;
-import org.apache.xml.serialize.XMLSerializer;
-import org.w3c.dom.Document;
-
-import com.sun.net.ssl.internal.ssl.Provider;
/**
* Diese Klasse implementiert einen einfachen Client für das MOA SP/SS Webservice mittels Apache Axis. Die
* Verbindung erfolgt gesichert über SSL, und zwar sowohl mit Server- und Clientauthentisierung.
*/
-public class HTTPSClientAuth
+public class HTTPSClientAuth extends HTTPSServerAuth
{
- // Zugangspunkt für Signaturerstellung (SS)
- private static final QName SERVICE_QNAME_ = new QName("SignatureCreation");
- private static final String SECURE_ENDPOINT_ = "https://localhost:8443/moa-spss/services/SignatureCreation";
-
- // Zugangspunkt für Signaturprüfung (SP)
-// private static final QName SERVICE_QNAME_ = new QName("SignatureVerification");
-// private static final String SECURE_ENDPOINT_ = "https://localhost:8443/moa-spss/services/SignatureVerification";
-
- // Datei mit dem zu sendenden XML-Request
- private static final String XML_REQUEST_FILENAME_ =
- "clients/webservice/resources/requests/CreateXMLSignatureRequest.Simple.xml";
-// "clients/webservice/resources/requests/CreateXMLSignatureRequest.Refs.xml";
-// "clients/webservice/resources/requests/CreateXMLSignatureRequest.Transforms.xml";
-// "clients/webservice/resources/requests/CreateXMLSignatureRequest.Supplements.xml";
-// "clients/webservice/resources/requests/VerifyCMSSignatureRequest.Simple.xml";
-// "clients/webservice/resources/requests/VerifyCMSSignatureRequest.Extended.xml";
-// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.Simple.xml";
-// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.Enveloped.xml";
-// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.Supplements.xml";
-// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.SigManifest.xml";
-// "clients/webservice/resources/requests/VerifyXMLSignatureRequest.XMLDSigManifest.xml";
-
- // SSL Konstanten
- public static final String HANDLER = "java.protocol.handler.pkgs";
-
+ // JSSE Konstanten
public static final String KEYSTORE = "javax.net.ssl.keyStore";
public static final String KEYSTOREPASSWORD = "javax.net.ssl.keyStorePassword";
public static final String KEYSTORETYPE = "javax.net.ssl.keyStoreType";
- public static final String TRUSTSTORE = "javax.net.ssl.trustStore";
- public static final String TRUSTSTOREPASSWORD = "javax.net.ssl.trustStorePassword";
- public static final String TRUSTSTORETYPE = "javax.net.ssl.trustStoreType";
-
/**
* Methode main.
*
* Enthält den Beispielcode der nötig ist um von Java aus auf MOA-SPSS zugreifen zu können. Der Zugriff
- * passiert über das AXIS-Framework. Die Verbindung ist eine SSL Verbindung mit Clientauthentisierung.
+ * passiert über das AXIS-Framework. Die Verbindung erfolgt gesichert über SSL, und zwar sowohl mit
+ * Server- und Clientauthentisierung.
*
- * @param args Wird nicht verwendet.
+ * @param args <ul>
+ * <li>
+ * args[0] enthält entweder die Bezeichnung "sign" oder "verify" zur Kennzeichnung,
+ * ob ein Signaturerstellungsrequest, oder ein Signaturprüfrequest gesendet werden soll.
+ * </li>
+ * <li>
+ * args[1] enthält einen Verweis auf eine Property-Datei, die die nähere Konfiguration
+ * für dieses Beispiel enthält. Der Verweis ist enthält entweder eine absolute oder eine
+ * relative Pfadangabe, wobei eine relative Angabe als relativ zum Arbeitsverzeichnis der
+ * Java VM interpretiert wird. Folgende Properties müssen in der Properties-Datei vorhanden
+ * sein:
+ * <ul>
+ * <li>
+ * <code>signServiceQName</code>: Name des Webservices, fix "SignatureCreation"
+ * </li>
+ * <li>
+ * <code>signServiceEndPoint</code>: Zugangspunkt des Webservices (URL)
+ * </li>
+ * <li>
+ * <code>signRequest</code>: Name des zu sendenden Signaturerstellungsrequests (entweder
+ * absolute oder relative Pfadangabe; eine relative Pfadangabe wird relativ zum
+ * Arbeitsverzeichnis der Java VM interpretiert)
+ * </li>
+ * <li>
+ * <code>verifyServiceQName</code>: Name des Webservices, fix "SignatureVerification"
+ * </li>
+ * <li>
+ * <code>verifyServiceEndPoint</code>: Zugangspunkt des Webservices (URL)
+ * </li>
+ * <li>
+ * <code>verifyRequest</code>: Name des zu sendenden Signaturprüfrequests (entweder
+ * absolute oder relative Pfadangabe; eine relative Pfadangabe wird relativ zum
+ * Arbeitsverzeichnis der Java VM interpretiert)
+ * </li>
+ * <li>
+ * <code>ssl.truststore.type</code>: Typ des JSSE-Truststores (entweder "JKS" für einen
+ * Java Key Store oder "PKCS12" für eine PKCS#12-Datei).
+ * </li>
+ * <li><code>ssl.truststore.type</code>: Relativer oder absoluter Pfad zum JSSE-Truststore.
+ * Ein relativer Pfad wird relativ zum Arbeitsverzeichnis der Java VM interpretiert).
+ * </li>
+ * <li><code>ssl.truststore.pwd</code>: Passwort für den JSSE-Truststore.
+ * </li>
+ * <li>
+ * <code>ssl.keystore.type</code>: Typ des JSSE-Keystores (entweder "JKS" für einen
+ * Java Key Store oder "PKCS12" für eine PKCS#12-Datei).
+ * </li>
+ * <li><code>ssl.keystore.type</code>: Relativer oder absoluter Pfad zum JSSE-Keystore.
+ * Ein relativer Pfad wird relativ zum Arbeitsverzeichnis der Java VM interpretiert).
+ * </li>
+ * <li><code>ssl.keystore.pwd</code>: Passwort für den JSSE-Keystore.
+ * </li>
+ * </ul>
+ * </li>
+ * </ul>
*/
public static void main(String[] args)
{
try
{
- configureSSL();
-
- // Datei mit Request einlesen
- FileInputStream inputStream = new FileInputStream(XML_REQUEST_FILENAME_);
-
- // Parser/DOMBuilder instanzieren
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(true);
- DocumentBuilder builder = factory.newDocumentBuilder();
-
- // XML Datei in einen DOM-Baum umwandeln
- Document root_request = builder.parse(inputStream);
-
- // AXIS-Server instanzieren
- Service service = ServiceFactory.newInstance().createService(SERVICE_QNAME_);
-
- // Call öffnen
- Call call = service.createCall();
-
- // Neues BodyElement anlegen und mit dem DOM-Baum füllen
- SOAPBodyElement body = new SOAPBodyElement(root_request.getDocumentElement());
- SOAPBodyElement[] params = new SOAPBodyElement[]
- {
- body
- };
-
- // Call mit Endpoint verknüpfen
- call.setTargetEndpointAddress(SECURE_ENDPOINT_);
-
- // Call auslösen und die Antworten speichern
- System.out.println("Calling ...");
- Vector responses = (Vector) call.invoke(params);
-
- // Erstes BodyElement auslesen
- SOAPBodyElement response = (SOAPBodyElement) responses.get(0);
-
- // Aus der Response den DOM-Baum lesen
- Document root_response = response.getAsDocument();
- System.out.println("Return ...");
-
- // XML-Formatierung konfiguieren
- OutputFormat format = new OutputFormat((Document) root_response);
- format.setLineSeparator("\n");
- format.setIndenting(false);
- format.setPreserveSpace(true);
- format.setOmitXMLDeclaration(false);
- format.setEncoding("UTF-8");
-
- // Ausgabe der Webservice-Antwort auf die Konsole
- XMLSerializer conSerializer = new XMLSerializer(System.out, format);
- conSerializer.serialize(root_response);
-
- // Ausgabe der Webservice-Antwort in Datei
- String responseFile = XML_REQUEST_FILENAME_.substring(0, XML_REQUEST_FILENAME_.lastIndexOf('.'))
- + ".response.xml";
- XMLSerializer fileSerializer = new XMLSerializer(new FileOutputStream(responseFile), format);
- fileSerializer.serialize(root_response);
+ // Prüfen, ob Beispiel korrekt verwendet wird
+ checkArgs(args, "HTTP");
+
+ // Initialisieren des Clients
+ HTTPSClientAuth httpClient = new HTTPSClientAuth(args);
+
+ // Ausführen der Serviceabfrage
+ httpClient.execute(args[0]);
}
catch (Exception e)
{
e.printStackTrace();
}
}
-
+
+ /**
+ * Erzeugt den MOA Client. Es erfolgt die Auswertung der übergebenen Aufrufparameter.
+ *
+ * @param args Die Aufrufparameter für das Beispiel. Siehe {@link HTTPSClientAuth#main(String[])}.
+ *
+ * @throws Exception wenn der MOA Client mit den übergebenen Aufrufparametern nicht korrekt erzeugt
+ * werden konnte.
+ */
+ protected HTTPSClientAuth(String[] args) throws Exception
+ {
+ super(args);
+ }
+
/**
* Konfiguriert JSSE für eine SSL-Verbindung mit Client- und Serverauthentisierung.
*/
- private static void configureSSL()
+ protected void configureSSL() throws Exception
{
- // Aktivieren Sie die nächste Zeile für detailliertes Logging des SSL-Verbindungsaufbaus
- // System.setProperty("javax.net.debug", "all");
+ super.configureSSL();
- Security.addProvider(new Provider());
- System.setProperty(HANDLER, "com.sun.net.ssl.internal.www.protocol");
-
// Konfiguriere Key-Store (enthält privaten Schlüssel und Zertifikat des Clients)
- System.setProperty(KEYSTORETYPE, "PKCS12");
- System.setProperty(KEYSTORE,
- "clients/webservice/resources/sslKeys/customer1/moa-ssl-kunde1(pwd=kunde1).p12");
-// "clients/webservice/resources/sslKeys/customer2/moa-ssl-kunde2(pwd=kunde2).p12");
- System.setProperty(KEYSTOREPASSWORD, "kunde1");
-// System.setProperty(KEYSTOREPASSWORD, "kunde2");
-
- // Konfiguriere Trust-Store (enthält SSL-Zertifikat des MOA Services, dem vertraut wird)
- System.setProperty(TRUSTSTORETYPE, "JKS");
- System.setProperty(TRUSTSTORE,
- "clients/webservice/resources/sslKeys/customer1/trustedServers(pwd=servers).keystore");
-// "clients/webservice/resources/sslKeys/customer2/trustedServers(pwd=servers).keystore");
- System.setProperty(TRUSTSTOREPASSWORD, "servers");
+ System.setProperty(KEYSTORETYPE, getProperty("ssl.keystore.type"));
+ System.setProperty(KEYSTORE, getProperty("ssl.keystore.loc"));
+ System.setProperty(KEYSTOREPASSWORD, getProperty("ssl.keystore.pwd"));
}
} \ No newline at end of file