<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <meta http-equiv="content-type" content="">
  <link href="../../../css/axis-docs.css" rel="stylesheet" type="text/css" media="all" />
  <title>Rampart : WS-Security module for Axis2</title>
</head>

<body>
<h1>Securing SOAP Messages with Rampart</h1>

<p>Axis2 comes with a module based on Apache WSS4J [1] to provide WS-Security
features, called "Rampart". This document explains how to engage and
configure Rampart module.</p>

<h2>Content</h2>
<ul>
  <li><a href="#intro">Introduction</a></li>
    <li><a href="#1_1_config">Rampart-1.1 Configuration</a>
	<ul>
	<li><a href="#1_1_assetions">Rampart Specific Assertions</a></li>
	<li><a href="#1_1_service_config">Service Configration</a></li>
	<li><a href="#1_1_client_config">Client Confiuration</a></li>
	</ul></li>
  <li><a href="#1_0_config">Rampart-1.0 Configuration</a>
  <ul>
  <li><a href="#outflowsecurity">OutflowSecurity Parameter</a></li>
  <li><a href="#inflowsecurity">InflowSecurity Parameter</a></li>
  </ul></li>
  <li><a href="#references">References</a></li>
  <li><a href="#examples">Examples</a></li>
</ul>
<a name="intro"></a>

<h2>Introduction</h2>

<p>Since rampart module inserts handlers in the system specific security
phase, it must be engaged globally. These handlers can be configured 
using WS-SecurityPolicy[2] and Rampart specific policy assertions. 
Rampart-1.0 used two axis2 parameters for configuration and these are
still supported in the 1.1 release as well.</p>

<p>The rampart-1.1 release is available 
<a href="http://www.apache.org/dyn/closer.cgi/ws/rampart/1_1">here</a>.</p>

<p>First it should be engaged by inserting the following in the axis2.xml
file.</p>
<source><pre>    &lt;module ref="rampart"/&gt;</pre>
</source>
<p>The web admin interface can be used when Axis2 is deployed in a servlet
container such as Apache Tomcat.</p>

<p>At the server it is possible to provide security on a per service basis.
The configuration parameters should be set in the service.xml file of the
service. The client side config parameters should be set in the axis2.xml of
the client's Axis2 repository.</p>
<a id="1_1_config"></a>
<h2>Rampart-1.1 Configuration</h2>
<a id="1_1_assetions"></a>
<h3>Rampart Specific Assertions</h3>

<p>Rampart uses the standard WS-SecurityPolicy[2] assertions and also defines its own 
assertions to be able capture the configuration information that is not provided 
in WS-SecurityPolicy.</p>
<p>The Rampart specific assertion's xsd can be found <a href="sec-conf/rampart-config.xsd">here
</a>.</p>

<p>The <strong>ramp:RampartConfig</strong> assertion must be available as a one of the top 
level assertions of the policy as shown <a href="sec-conf/sample-policy.xml">here</a>.</p>
<a id="1_1_service_config"></a>
<h3>Service Configration</h3>

To configure the service one will simply have to add the policy element into the 
sevices.xml file. A sample service.xml file is available 
<a href="sec-conf/sample-services.xml">here</a>.
<a id="1_1_client_config"></a>
<h3>Client Confiuration</h3>
<p>On the client side, a policy object should be created and loaded into options. Creating the policy object can be done using a "policy.xml" file as follows.</p>
	
<pre>
	//Creating the object
  	StAXOMBuilder builder = new StAXOMBuilder(pathToPolicyfile);
        Policy clientPolicy = PolicyEngine.getPolicy(builder.getDocumentElement());
	//setting the object
	Options options = new Options();
        options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, clientPolicy);
</pre>
<a id="1_0_config"></a>
<h2>Rampart-1.0 Configuration</h2>

<p>Rampart module uses two parameters:</p>
<ul>
  <li><a href="outflowsecurity">OutflowSecurity</a></li>
  <li><a href="inflowsecurity">InflowSecurity</a></li>
</ul>
The configuration that can go in each of these parameters are described
below: <a name="outflowsecurity"></a>

<h3>OutflowSecurity Parameter</h3>
This parameter is used to configure the outflow security handler. The outflow
handler can be invoked more than once in the outflow one can provide
configuration for each of these invocations. The 'action' element describes
one of these configurations. Therefore the 'OutflowSecurity' parameter can
contain more than one 'action' elements. The schema of this 'action' element
is available <a href="sec-conf/out-action.xsd">here</a>.

<p>An outflow configuration to add a timestamp, sign and encrypt the message
once, is shown in<a href="#ex1"> Example 1</a> and <a href="#ex1"> Example
2</a> shows how to sign the message twice by chaining the outflow handler
(using two 'action' elements)</p>

<p>Following is a description of the elements that can go in an 'action'
element of the OutflowSecurity parameter</p>
<br>


<table border="1">
  <tbody>
    <tr>
      <td><b>Parameter</b></td>
      <td><b>Description</b></td>
      <td><b>Example</b></td>
    </tr>
    <tr>
      <td>items</td>
      <td>Security actions for the inflow</td>
      <td>Add a Timestamp, Sign the SOAP body and Encrypt the SOAP body <br>
        &lt;items&gt; Timestamp Signature Encrypt&lt;/items&gt;</td>
    </tr>
    <tr>
      <td>user</td>
      <td>The user's name</td>
      <td>Set alias of the key to be used to sign<br>
        &lt;user&gt; bob&lt;/user&gt;</td>
    </tr>
    <tr>
      <td>passwordCallbackClass</td>
      <td>Callback class used to provide the password required to create the
        UsernameToken or to sign the message</td>
      <td>&lt;passwordCallbackClass&gt;
        org.apache.axis2.security.PWCallback&lt;/passwordCallbackClass&gt;</td>
    </tr>
    <tr>
      <td>signaturePropFile</td>
      <td>property file used to get the signature parameters such as crypto
        provider, keystore and its password</td>
      <td>Set example.properties file as the signature property file<br>
        &lt;signaturePropFile&gt;
      example.properties&lt;/signaturePropFile&gt;</td>
    </tr>
    <tr>
      <td>signatureKeyIdentifier</td>
      <td>Key identifier to be used in referring the key in the signature</td>
      <td>Use the serial number of the certificate<br>
        &lt;signatureKeyIdentifier&gt;
        IssuerSerial&lt;/signatureKeyIdentifier&gt;</td>
    </tr>
    <tr>
      <td>encryptionKeyIdentifier</td>
      <td>Key identifier to be used in referring the key in encryption</td>
      <td>Use the serial number of the certificate <br>
        &lt;encryptionKeyIdentifier&gt;IssuerSerial&lt;/encryptionKeyIdentifier&gt;</td>
    </tr>
    <tr>
      <td>encryptionUser</td>
      <td>The user's name for encryption.</td>
      <td><br>
        &lt;encryptionUser&gt;alice&lt;/encryptionUser&gt;</td>
    </tr>
    <tr>
      <td>encryptionSymAlgorithm</td>
      <td>Symmetric algorithm to be used for encryption</td>
      <td>Use AES-128<br>
        &lt;encryptionSymAlgorithm&gt;
        http://www.w3.org/2001/04/xmlenc#aes128-cbc&lt;/encryptionSymAlgorithm&gt;</td>
    </tr>
    <tr>
      <td>encryptionKeyTransportAlgorithm</td>
      <td>Key encryption algorithm</td>
      <td>Use RSA-OAEP<br>
        &lt;parameter name="encryptionSymAlgorithm"&gt;
        http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p&lt;/parameter&gt;</td>
    </tr>
    <tr>
      <td>signatureParts</td>
      <td>Sign multiple parts in the SOAP message</td>
      <td>Sign Foo and Bar elements qualified by "http://app.ns/ns"<br>
        &lt;signatureParts&gt;
        {Element}{http://app.ns/ns}Foo;{Element}{http://app.ns/ns}Bar
        &lt;/signatureParts&gt;</td>
    </tr>
    <tr>
      <td>optimizeParts</td>
      <td>MTOM Optimize the elements specified by the XPath query</td>
      <td>Optimize the CipherValue<br>
        &lt;optimizeParts&gt;
        //xenc:EncryptedData/xenc:CipherData/xenc:CipherValue
        &lt;/optimizeParts&gt;</td>
    </tr>
  </tbody>
</table>
<a name="inflowsecurity"></a>

<h3>InflowSecurity Parameter</h3>

<p>This parameter is used to configure the inflow security handler. The
'action' element is used to encapsulate the configuration elements here as
well. The schema of the 'action' element is available here. <a
href="#ex3">Example 3</a> shows the configuration to decrypt, verify
signature and validate timestamp.</p>

<table border="1">
  <tbody>
    <tr>
      <td><b>Parameter</b></td>
      <td><b>Description</b></td>
      <td><b>Example</b></td>
    </tr>
    <tr>
      <td>items</td>
      <td>Security actions for the inflow</td>
      <td>first the incoming message should be decrypted and then the
        signatures should be verified and should be checked for the
        availability of the Timestamp <br>
        &lt;items&gt; Timestamp Signature Encrypt&lt;/items&gt;</td>
    </tr>
    <tr>
      <td>passwordCallbackClass</td>
      <td>Callback class used to obtain password for decryption and
        UsernameToken verification</td>
      <td><br>
        &lt;passwordCallbackClass&gt;
        org.apache.axis2.security.PWCallback&lt;/passwordCallbackClass&gt;</td>
    </tr>
    <tr>
      <td>signaturePropFile</td>
      <td>Property file used for signature verification</td>
      <td><br>
        &lt;signaturePropFile&gt;
      sig.properties&lt;/signaturePropFile&gt;</td>
    </tr>
    <tr>
      <td>decryptionPropFile</td>
      <td>Property file used for decryption</td>
      <td><br>
        &lt;decryptionPropFile&gt;
      dec.properties&lt;/decryptionPropFile&gt;</td>
    </tr>
  </tbody>
</table>
<br>


<p>Please note that the '.properties' files used in properties such as
OutSignaturePropFile are the same property files that are using in the WSS4J
project. Following shows the properties defined in a sample property file</p>
<source><pre>        org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
        org.apache.ws.security.crypto.merlin.keystore.type=pkcs12
        org.apache.ws.security.crypto.merlin.keystore.password=security
        org.apache.ws.security.crypto.merlin.keystore.alias=16c73ab6-b892-458f-abf5-2f875f74882e
        org.apache.ws.security.crypto.merlin.alias.password=security
        org.apache.ws.security.crypto.merlin.file=keys/x509.PFX.MSFT
    </pre>
</source>org.apache.ws.security.crypto.provider defines the implementation of
the org.apache.ws.security.components.crypto.Crypto interface to provide the
crypto information required by WSS4J. The other properties defined are the
configuration properties used by the implementation class
(org.apache.ws.security.components.crypto.Merlin). <a name="ref"></a> <a
name="references"></a>

<h2>References</h2>

<p>1. <a href="http://ws.apache.org/wss4j">Apache WSS4J -Home</a></p>
<a name="examples"></a>
<p>2. <a href="http://specs.xmlsoap.org/ws/2005/07/securitypolicy/ws-securitypolicy.pdf">ws-securitypolicy.pdf</a></p>
<a name="examples"></a>


<h2>Examples</h2>

<p id="ex1">Example 1: An outflow configuration to add a timestamp, sign and
encrypt the message once</p>

<p><img alt="" src="sec-conf/out-sample.png"></p>

<p id="ex2">Example 2: An outflow configuration to sign the message twice and
add a timestamp</p>

<p><img alt="" src="sec-conf/out-sample2.png"></p>

<p id="ex3">Example 3: An inflow configuration to decrypt, verify signature
and validate timestamp</p>

<p><img alt="" src="sec-conf/in-sample.png"></p>
</body>
</html>
