<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
  ~  Licensed to the Apache Software Foundation (ASF) under one
  ~  or more contributor license agreements.  See the NOTICE file
  ~  distributed with this work for additional information
  ~  regarding copyright ownership.  The ASF licenses this file
  ~  to you under the Apache License, Version 2.0 (the
  ~  "License"); you may not use this file except in compliance
  ~  with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~  Unless required by applicable law or agreed to in writing,
  ~  software distributed under the License is distributed on an
  ~   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~  KIND, either express or implied.  See the License for the
  ~  specific language governing permissions and limitations
  ~  under the License.
  -->

<document xmlns="http://maven.apache.org/XDOC/2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">

	<properties>
		
	</properties>

	<body>
        <h1>Apache Rampart - Axis2 Security Module</h1>
		<section name="Welcome to Apache Rampart">
			<p>Rampart is the security module of Axis2. It secures SOAP messages
according to specifications in the WS-Security stack. Rampart implements the
following specifications:</p>
		</section>
		
		<section name="Features of Rampart Latest Version">
		
		    <ul>
                <li><p>WS - Security 1.0</p></li>
                <li><p>WS - Security 1.1</p></li>
                <li><p>WS - Secure Conversation - February 2005</p></li>
                <li><p>WS - Security Policy - 1.1 - July 2005</p></li>
                <li><p>WS - Security Policy - 1.2</p></li>
                <li><p>WS - Trust - February 2005</p></li>
                <li><p>WS - Trust - WS-SX spec - EXPERIMENTAL</p></li>
            </ul>
        </section>
        
        <section name="Apache Rampart News">
        <h3>April 26, 2012 : Apache Rampart 1.6.2 released</h3>
        <p>Apache Rampart 1.6.2 is a maintenance release that update WSS4J to version 1.6.4 and OpenSAML to version 2.5.1. Apache Rampart 1.6.2 ensure compatibility with the latest Axis2 1.6.2 release.</p>

        <h3>Sep 24, 2011 : Apache Rampart 1.5.2 and 1.6.1 released</h3>
        <p>Both releases update WSS4J to version 1.5.12 and ensure compatibility with the latest
        Axis2 releases from the corresponding branches. Rampart 1.5.2 is supported with Axis2 1.5.6
        and Rampart 1.6.1 is supported with Axis2 1.6.1. Please note that Rampart 1.6.1 will not
        work with Axis2 1.6.0 and that users of Axis2 1.6.1 are required to update to Rampart 1.6.1,
        i.e. Rampart 1.6.0 doesn't work with Axis2 1.6.1.</p>
        
		<h3>Jun 06, 2011 : Apache Rampart 1.6.0 released</h3>
        <p>Apache Rampart 1.6.0 was released with lots of bug fixes.</p>
    
		<h3>Jan 10, 2011 : Apache Rampart 1.5.1 released</h3>
        <p>Apache Rampart 1.5.1 was released with lots of bug fixes.</p>

		<h3>Feb 01, 2010 : Apache Rampart 1.5 released</h3>
        <p>Apache Rampart 1.5 was released with lots of bug fixes and new features.</p>
        <p>New features include</p>
            <ul>
                <li>SAML 2.0 support - Issuance </li>
                <li>Key store caching</li>
                <li>Signing / Encrypting with multiple keys</li>
                <li>Tests for negative scenarios</li>
            </ul>
        <h3>Jun 12, 2008 : Apache Rampart 1.4 released</h3>  
        <p>Apache Rampart 1.4 was released with lots of bug fixes and new features.</p>
        <p>New features include</p>
            <ul>
                <li>WS Security 1.1</li>
                <ul>
                   <li>Encrypted headers</li>
                   <li>Encrypted SHA1 references</li>
                </ul>
                <li>WS Security Policy 1.2 support</li>
                <li>WS Trust</li>
                <ul>
                    <li>Renew binding</li>
                    <li>Validation binding</li>
                </ul>
                <li>New configuration options</li>
                <ul>
                    <li>Ability to plug in Custom policy validators</li>
                    <li>Ability to define certAlias different from username for signature</li>
                    <li>Ability turn off mili second precision</li>
                </ul>
                <li>Ability to secure messages faults </li>
                <li>Increased interoperability with WCF 3.5 </li>
            </ul>   
        </section>
	</body>
</document>
