<!--
  ~  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>
    <properties>
        <title></title>
    </properties>
    <head>
       
    </head>
  <body>
  <h1>WS Security Specifications</h1>
  <h2>WSS: SOAP Message Security </h2>
    <ul>
        <li><a href="http://www.oasis-open.org/committees/download.php/5941/oasis-200401-wss-soap-message-security-1.0.pdf">
            SOAP Message Security 1.0 </a></li>
        <li><a href="http://www.oasis-open.org/committees/download.php/16790/wss-v1.1-spec-os-SOAPMessageSecurity.pdf">
            SOAP Message Security 1.1 </a></li>
    </ul>
  <h2>WS Security Policy</h2>
    <ul>
        <li><a href="http://specs.xmlsoap.org/ws/2005/07/securitypolicy/ws-securitypolicy.pdf">
        WS-SecurityPolicy 1.1</a></li>
    </ul>
  <h2>Web Services Trust Language (WS-Trust)</h2>
    <ul>
        <li><a href="http://specs.xmlsoap.org/ws/2005/02/trust/WS-Trust.pdf">
        WS Trust 1.0 </a></li>
    </ul>
  <h2>WS Secure Conversation</h2>
      <ul>
        <li><a href="http://specs.xmlsoap.org/ws/2005/02/sc/WS-SecureConversation.pdf">
        WS Secure Conversation 1.0 </a></li>
      </ul>  
  <h2>WS-SX specifications</h2>
    <ul>
        <li><a href="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/ws-securitypolicy-1.2-spec-os.pdf">
        WS-SecurityPolicy 1.2 </a></li>
        <li><a href="http://docs.oasis-open.org/ws-sx/ws-trust/200512/ws-trust-1.3-os.pdf">
        WS Trust 1.3</a></li>
        <li><a href="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/ws-secureconversation-1.3-os.pdf">
        WS Secure Conversation 1.3</a></li>
    </ul>
  </body>
 </document>