# SOAP XML Encryption von Axis Stubs



## misiu (31. März 2006)

Hallo zusammen,

ich habe Probleme bei der Verschlüsselung eines XML Files. Ich habe mittels WSDL2Java die erforderlichen Client-Klassen erstellt. Ich kann erfolgreich den Stub erzeugen und unverschlüsselte Request beim entsprechenden Webservice funktionieren auch.
Nun möchte ich aber den Body des SOAP-Request mit einem X.509 Zertifikat verschlüsseln und finde dazu leider keine Beispiele. Wie kann ich die entsprechenden Informationen in den Header des SOAP-Request integrieren? Der Stub stellt mir ja keine derartige Methode zur Verfügung. Hat jemand von euch derartiges schon realisiert oder hat jemand eine Idee?

Grüße

Jan


----------



## Thomas Darimont (31. März 2006)

Hallo!

Dazu musst du dir eigene Handler schreiben / bzw. einen schon implementierten verwenden:
http://www.javamagazin.de/itr/online_artikel/psecom,id,481,nodeid,11.html
Hier noch ein interessantes Paper zu WS-Security allgemein:
http://www.st.informatik.tu-darmstadt.de/database/seminars/data/WS-Security.pdf?id=155

Gruss Tom


----------



## misiu (3. April 2006)

Hallo Tom,

danke für deinen Hinweis, ich konnte es heute erst ausprobieren. Erst hatte ich noch eine Exception von OpenSAML, hab aber das jar-File in den Classpath von Axis integriert und nun funktioniert auch der Request. Also danke nochmal und noch eine schöne Woche.

Gruß

Jan


----------



## Thomas Darimont (3. April 2006)

Hi,

koenntest du vielleicht kurz beschreiben, was du jetzt gemacht hast?

Gruss Tom


----------



## misiu (3. April 2006)

Also ich hab jetzt 2 Dateien erstellt. 

Einmal die _client_crypto.properties_:

******************
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=geheim
org.apache.ws.security.crypto.merlin.keystore.alias=foo
org.apache.ws.security.crypto.merlin.file=Path-to-KeyStore/keystore.jks

******************

Zum anderen die _client_deploy.wsdd_:

******************
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <transport name="http" pivot="javarg.apache.axis.transport.http.HTTPSender" />
  <globalConfiguration>
   <requestFlow>
    <handler type="javarg.apache.ws.axis.security.WSDoAllSender">
     <parameter name="action" value="Encrypt" />
     <parameter name="encryptionPropFile" value="client_crypto.properties" />
     <parameter name="encryptionKeyIdentifier" value="DirectReference" />
     <parameter name="encryptionUser" value="foo" />
    </handler>
   </requestFlow>
 </globalConfiguration>
</deployment>

******************
Damit wird das Zertifikat aus dem Keystore geladen und defaultmäßig der Body des Request verschlüsselt.
Danach wird dann durch folgende Zeile das Konfigurationsfile geladen:

******************
EngineConfiguration config = new FileProvider("client_deploy.wsdd");

******************

und danach an den Konstruktor der ServiceLocator-Klasse übergeben:

******************
SomeServiceLocator loc = new SomeServiceLocator(config);

******************

Nun kann man den Stub für den Request erzeugen und damit arbeiten:

******************
SomeServiceStub service = loc.getPort();

******************

Ich hoffe das war einigermaßen verständlich und auch richtig von mir.

Gruß

Jan


----------

