
WS-SecureConversation 1.3
OASIS Standard
1 March 2007
Artifact Identifier:
ws-secureconversation-1.3-os
Location:
This Version:
http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/ws-secureconversation-1.3-os.doc
http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/ws-secureconversation-1.3-os.pdf
http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/ws-secureconversation-1.3-os.html
Previous Version:
Latest Version:
http://docs.oasis-open.org/ws-sx/ws-secureconversation/v1.3/ws-secureconversation.doc
http://docs.oasis-open.org/ws-sx/ws-secureconversation/v1.3/ws-secureconversation.pdf
http://docs.oasis-open.org/ws-sx/ws-secureconversation/v1.3/ws-secureconversation.html
Technical Committee:
OASIS Web Services Secure Exchange TC
Chair(s):
Kelvin Lawrence, IBM
Chris Kaler, Microsoft
Editor(s):
Anthony Nadalin, IBM
Marc Goodner, Microsoft
Martin Gudgin, Microsoft
Abbie Barbir, Nortel
Hans Granqvist, VeriSign
Related work:
Declared XML namespace(s):
Abstract:
This specification defines extensions that build on [WS-Security] to provide a framework for requesting and issuing security tokens, and to broker trust relationships.
Status:
This document was last revised or approved by the WS-SX TC on the above date. The level of approval is also listed above. Check the current location noted above for possible later revisions of this document. This document is updated periodically on no particular schedule.
Technical Committee members should send comments on this specification to the Technical Committee’s email list. Others should send comments to the Technical Committee by using the “Send A Comment” button on the Technical Committee’s web page at http://www.oasis-open.org/committees/ws-sx.
For information on whether any patents have been disclosed that may be essential to implementing this specification, and any offers of patent licensing terms, please refer to the Intellectual Property Rights section of the Technical Committee web page (http://www.oasis-open.org/committees/ws-sx/ipr.php.
The non-normative errata page for this specification is located at http://www.oasis-open.org/committees/ws-sx.
Notices
Copyright © OASIS® 1993–2007. All Rights Reserved. OASIS trademark, IPR and other policies apply.
All capitalized terms in the following text have the meanings assigned to them in the OASIS Intellectual Property Rights Policy (the "OASIS IPR Policy"). The full Policy may be found at the OASIS website.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published, and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this section are included on all such copies and derivative works. However, this document itself may not be modified in any way, including by removing the copyright notice or references to OASIS, except as needed for the purpose of developing any document or deliverable produced by an OASIS Technical Committee (in which case the rules applicable to copyrights, as set forth in the OASIS IPR Policy, must be followed) or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
OASIS requests that any OASIS Party or any other party that believes it has patent claims that would necessarily be infringed by implementations of this OASIS Committee Specification or OASIS Standard, to notify OASIS TC Administrator and provide an indication of its willingness to grant patent licenses to such patent claims in a manner consistent with the IPR Mode of the OASIS Technical Committee that produced this specification.
OASIS invites any party to contact the OASIS TC Administrator if it is aware of a claim of ownership of any patent claims that would necessarily be infringed by implementations of this specification by a patent holder that is not willing to provide a license to such patent claims in a manner consistent with the IPR Mode of the OASIS Technical Committee that produced this specification. OASIS may include such claims on its website, but disclaims any obligation to do so.
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS' procedures with respect to rights in any document or deliverable produced by an OASIS Technical Committee can be found on the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this OASIS Committee Specification or OASIS Standard, can be obtained from the OASIS TC Administrator. OASIS makes no representation that any information or list of intellectual property rights will at any time be complete, or that any claims in such list are, in fact, Essential Claims.
The name "OASIS" is a trademark of OASIS, the owner and developer of this specification, and should be used only to refer to the organization and its official outputs. OASIS welcomes reference to, and implementation and use of, specifications, while reserving the right to enforce its marks against misleading uses. Please see http://www.oasis-open.org/who/trademark.php for above guidance.
Table of Contents
2 Security Context Token (SCT)
3 Establishing Security Contexts
3.2 SCT Request Example without Target Scope
3.3 SCT Request Example with Target Scope
8 Associating a Security Context
B. Token Discovery Using RST/RSTR
The mechanisms defined in [WS-Security] provide the basic mechanisms on top of which secure messaging semantics can be defined for multiple message exchanges. This specification defines extensions to allow security context establishment and sharing, and session key derivation. This allows contexts to be established and potentially more efficient keys or new key material to be exchanged, thereby increasing the overall performance and security of the subsequent exchanges.
The [WS-Security] specification focuses on the message authentication model. This approach, while useful in many situations, is subject to several forms of attack (see Security Considerations section of [WS-Security] specification).
Accordingly, this specification introduces a security context and its usage. The context authentication model authenticates a series of messages thereby addressing these shortcomings, but requires additional communications if authentication happens prior to normal application exchanges.
The security context is defined as a new [WS-Security] token type that is obtained using a binding of [WS-Trust].
Compliant services are NOT REQUIRED to implement everything defined in this specification. However, if a service implements an aspect of the specification, it MUST comply with the requirements specified (e.g. related "MUST" statements).
The primary goals of this specification are:
· Define how security contexts are established
· Describe how security contexts are amended
· Specify how derived keys are computed and passed
It is not a goal of this specification to define how trust is established or determined.
This specification is intended to provide a flexible set of mechanisms that can be used to support a range of security protocols. Some protocols may require separate mechanisms or restricted profiles of this specification.
The following list identifies the key driving requirements:
· Derived keys and per-message keys
· Extensible security contexts
The [URI] that MUST be used by implementations of this specification is:
http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512
Table 1 lists XML namespaces that are used in this specification. The choice of any namespace prefix is arbitrary and not semantically significant.
Table 1: Prefixes and XML Namespaces used in this specification.
|
Prefix |
Namespace |
Specification(s) |
|
S11 |
[SOAP] |
|
|
S12 |
[SOAP12] |
|
|
wsu |
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd |
|
|
wsse |
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd |
|
|
wst |
[WS-Trust] |
|
|
wsc |
http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512 |
This specification |
|
wsa |
||
|
ds |
||
|
xenc |
The schema [XML-Schema1], [XML-Schema2] for this specification can be located at:
http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/ws-secureconversation.xsd
In this document, reference is made to the wsu:Id attribute in the utility schema. These were added to the utility schema with the intent that other specifications requiring such an ID or timestamp could reference it (as is done here).
Claim – A claim is a statement made about a client, service or other resource (e.g. name, identity, key, group, privilege, capability, etc.).
Security Token – A security token represents a collection of claims.
Security Context – A security context is an abstract concept that refers to an established authentication state and negotiated key(s) that may have additional security-related properties.
Security Context Token – A security context token (SCT) is a wire representation of that security context abstract concept, which allows a context to be named by a URI and used with [WS-Security].
Signed Security Token – A signed security token is a security token that is asserted and cryptographically endorsed by a specific authority (e.g. an X.509 certificate or a Kerberos ticket).
Proof-of-Possession Token – A proof-of-possession (POP) token is a security token that contains secret data that can be used to demonstrate authorized use of an associated security token. Typically, although not exclusively, the proof-of-possession information is encrypted with a key known only to the recipient of the POP token.
Digest – A digest is a cryptographic checksum of an octet stream.
Signature - A signature [XML-Signature] is a value computed with a cryptographic algorithm and bound to data in such a way that intended recipients of the data can use the signature to verify that the data has not been altered and/or has originated from the signer of the message, providing message integrity and authentication. The signature can be computed and verified with symmetric key algorithms, where the same key is used for signing and verifying, or with asymmetric key algorithms, where different keys are used for signing and verifying (a private and public key pair are used).
Security Token Service - A security token service (STS) is a Web service that issues security tokens (see [WS-Security]). That is, it makes assertions based on evidence that it trusts, to whoever trusts it (or to specific recipients). To communicate trust, a service requires proof, such as a signature, to prove knowledge of a security token or set of security token. A service itself can generate tokens or it can rely on a separate STS to issue a security token with its own trust statement (note that for some security token formats this can just be a re-issuance or co-signature). This forms the basis of trust brokering.
Request Security Token (RST)– A RST is a message sent to a security token service to request a security token.
Request Security Token Response (RSTR) – A RSTR is a response to a request for a security token. In many cases this is a direct response from a security token service to a requestor after receiving an RST message. However, in multi-exchange scenarios the requestor and security token service may exchange multiple RSTR messages before the security token service issues a final RSTR message. One or more RSTRs are contained within a single RequestSecurityTokenResponseCollection (RSTRC).
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
Namespace URIs of the general form "some-URI" represents some application-dependent or context-dependent URI as defined in [URI ].
This specification uses the following syntax to define outlines for messages:
· The syntax appears as an XML instance, but values in italics indicate data types instead of literal values.
· Characters are appended to elements and attributes to indicate cardinality:
o "?" (0 or 1)
o "*" (0 or more)
o "+" (1 or more)
· The character "|" is used to indicate a choice between alternatives.
· The characters "(" and ")" are used to indicate that contained items are to be treated as a group with respect to cardinality or choice.
· The characters "[" and "]" are used to call out references and property names.
· Ellipses (i.e., "...") indicate points of extensibility. Additional children and/or attributes MAY be added at the indicated extension points but MUST NOT contradict the semantics of the parent and/or owner, respectively. By default, if a receiver does not recognize an extension, the receiver SHOULD ignore the extension; exceptions to this processing rule, if any, are clearly indicated below.
· XML namespace prefixes (see Table 1) are used to indicate the namespace of the element being defined.
Elements and Attributes defined by this specification are referred to in the text of this document using XPath 1.0 expressions. Extensibility points are referred to using an extended version of this syntax:
In this document reference is made to the wsu:Idattribute and the wsu:Created and wsu:Expires elements in a utility schema ( http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd). The wsu:Id attribute and the wsu:Created and wsu:Expires elements were added to the utility schema with the intent that other specifications requiring such an ID type attribute or timestamp element could reference it (as is done here).
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate Requirement Levels", RFC 2119, Harvard University, March 1997.
http://www.ietf.org/rfc/rfc2119.txt .
[RFC2246] IETF Standard, "The TLS Protocol", January 1999. http://www.ietf.org/rfc/rfc2246.txt
[SOAP] W3C Note, "SOAP: Simple Object Access Protocol 1.1", 08 May 2000.
http://www.w3.org/TR/2000/NOTE-SOAP-20000508/.
[SOAP12] W3C Recommendation, "SOAP 1.2 Part 1: Messaging Framework", 24 June 2003.
http://www.w3.org/TR/2003/REC-soap12-part1-20030624/
[URI] T. Berners-Lee, R. Fielding, L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax", RFC 3986, MIT/LCS, Day Software, Adobe Systems, January 2005.
http://www.ietf.org/rfc/rfc3986.txt
[WS-Addressing] W3C Recommendation, "Web Services Addressing (WS-Addressing)", 9 May 2006.
http://www.w3.org/TR/2006/REC-ws-addr-core-20060509.
[WS-Security] OASIS Standard, "OASIS Web Services Security: SOAP Message Security 1.0 (WS-Security 2004)", March 2004.
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf
OASIS Standard, "OASIS Web Services Security: SOAP Message Security 1.1 (WS-Security 2004)", February 2006.
http://www.oasis-open.org/committees/download.php/16790/wss-v1.1-spec-os-SOAPMessageSecurity.pdf
[WS-Trust] OASIS Committee Draft, “WS-Trust 1.3”, September 2006
http://docs.oasis-open.org/ws-sx/ws-trust/200512
[XML-Encrypt] W3C Recommendation, "XML Encryption Syntax and Processing", 10 December 2002.
http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/.
[XML-Schema1] W3C Recommendation, "XML Schema Part 1: Structures Second Edition", 28 October 2004.
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/.
[XML-Schema2] W3C Recommendation, "XML Schema Part 2: Datatypes Second Edition", 28 October 2004.
http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/.
[XML-Signature] W3C Recommendation, "XML-Signature Syntax and Processing", 12 February 2002.
http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/
[WS-MEX] "Web Services Metadata Exchange (WS-MetadataExchange)", BEA, Computer Associates, IBM, Microsoft, SAP, Sun Microsystems, Inc., webMethods, September 2004.
[WS-Policy] W3C Member Submission, "Web Services Policy 1.2 - Framework", 25 April 2006.
http://www.w3.org/Submission/2006/SUBM-WS-Policy-20060425/
[WS-PolicyAttachment] W3C Member Submission, "Web Services Policy 1.2 - Attachment" , 25 April 2006.
http://www.w3.org/Submission/2006/SUBM-WS-PolicyAttachment-20060425/
While message authentication is useful for simple or one-way messages, parties that wish to exchange multiple messages typically establish a security context in which to exchange multiple messages.A security context is shared among the communicating parties for the lifetime of a communications session.
In this specification, a security context is represented by the <wsc:SecurityContextToken> security token. In the [WS-Security] and [WS-Trust] framework, the following URI is used to represent the token type:
http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/sct
The Security Context Token does not support references to it using key identifiers or key names. All references MUST either use an ID (to a wsu:Idattribute) or a <wsse:Reference> to the <wsc:Identifier>element.
Once the context and secret have been established (authenticated), the mechanisms described in Derived Keys can be used to compute derived keys for each key usage in the secure context.
The following illustration represents an overview of the syntax of the <wsc:SecurityContextToken> element. It should be noted that this token supports an open content model to allow context-specific data to be passed.
<wsc:SecurityContextToken wsu:Id="..." xmlns:wsc="..." xmlns:wsu="..." ...>
<wsc:Identifier>...</wsc:Identifier>
<wsc:Instance>...</wsc:Instance>
...
</wsc:SecurityContextToken>
The following describes elements and attributes used in a <wsc:SecurityContextToken> element.
/wsc:SecurityContextToken
This element is a security token that describes a security context.
/wsc:SecurityContextToken/wsc:Identifier
This required element identifies the security context using an absolute URI. Each security context URI MUST be unique to both the sender and recipient. It is RECOMMENDED that the value be globally unique in time and space.
/wsc:SecurityContextToken/wsc:Instance
When contexts are renewed and given different keys it is necessary to identify the different key instances without revealing the actual key. When present this optional element contains a string that is unique for a given key value for this wsc:Identifier. The initial issuance need not contain a wsc:Instance element, however, all subsequent issuances with different keys MUST have a wsc:Instance element with a unique value.
/wsc:SecurityContextToken/@wsu:Id
This optional attribute specifies a string label for this element.
/wsc:SecurityContextToken/@{any}
This is an extensibility mechanism to allow additional attributes, based on schemas, to be added to the element.
/wsc:SecurityContextToken/{any}
This is an extensibility mechanism to allow additional elements (arbitrary content) to be used.
The <wsc:SecurityContextToken> token elements MUST be preserved. That is, whatever elements contained within the tag on creation MUST be preserved wherever the token is used. A consumer of a <wsc:SecurityContextToken> token MAY extend the token by appending information. Consequently producers of <wsc:SecurityContextToken> tokens should consider this fact when processing previously generated tokens. A service consuming (processing) a <wsc:SecurityContextToken> token MAY fault if it discovers an element or attribute inside the token that it doesn't understand, or it MAY ignore it. The fault code wsc:UnsupportedContextToken is RECOMMENDED if a fault is raised. The behavior is specified by the services policy [WS-Policy] [WS-PolicyAttachment]. Care should be taken when adding information to tokens to ensure that relying parties can ensure the information has not been altered since the SCT definition does not require a specific way to secure its contents (which as noted above can be appended to).
Security contexts, like all security tokens, can be referenced using the mechanisms described in [WS-Security] (the <wsse:SecurityTokenReference> element referencing the wsu:Idattribute relative to the XML base document or referencing using the <wsc:Identifier> element's absolute URI). When a token is referenced, the associated key is used. If a token provides multiple keys then specific bindings and profiles must describe how to reference the separate keys. If a specific key instance needs to be referenced, then the global attribute wsc:Instance is included in the <wsse:Reference> sub-element (only when using <wsc:Identifier>references) of the <wsse:SecurityTokenReference> element as illustrated below:
<wsse:SecurityTokenReference xmlns:wsse="..." xmlns:wsc="...">
<wsse:Reference URI="uuid:... " wsc:Instance="..."/>
</wsse:SecurityTokenReference>
The following sample message illustrates the use of a security context token. In this example a context has been established and the secret is known to both parties. This secret is used to sign the message body.
(001) <?xml version="1.0" encoding="utf-8"?>
(002)
<S11:Envelope xmlns:S11="..." xmlns:ds="..."
xmlns:wsse="..."
xmlns:wsu="..." xmlns:wsc="...">
(003) <S11:Header>
(004) ...
(005) <wsse:Security>
(006) <wsc:SecurityContextToken wsu:Id="MyID">
(007) <wsc:Identifier>uuid:...</wsc:Identifier>
(008) </wsc:SecurityContextToken>
(009) <ds:Signature>
(010) ...
(011) <ds:KeyInfo>
(012) <wsse:SecurityTokenReference>
(013) <wsse:Reference URI="#MyID"/>
(014) </wsse:SecurityTokenReference>
(015) </ds:KeyInfo>
(016) </ds:Signature>
(017) </wsse:Security>
(018) </S11:Header>
(019) <S11:Body wsu:Id="MsgBody">
(020)
<tru:StockSymbol
xmlns:tru="http://fabrikam123.com/payloads">
QQQ
</tru:StockSymbol>
(021) </S11:Body>
(022) </S11:Envelope>
Let's review some of the key sections of this example:
Lines (003)-(018) contain the SOAP message headers.
Lines (005)-(017) represent the <wsse:Security> header block. This contains the security-related information for the message.
Lines (006)-(008) specify a security token that is associated with the message. In this case it is a security context token. Line (007) specifies the unique ID of the context.
Lines (009)-(016) specify the digital signature. In this example, the signature is based on the security context (specifically the secret/key associated with the context). Line (010) represents the typical contents of an XML Digital Signature which, in this case, references the body and potentially some of the other headers expressed by line (004).
Lines (012)-(014) indicate the key that was used for the signature. In this case, it is the security context token included in the message. Line (013) provides a URI link to the security context token specified in Lines (006)-(008).
The body of the message is represented by lines (019)-(021).
A security context needs to be created and shared by the communicating parties before being used. This specification defines three different ways of establishing a security context among the parties of a secure communication.
Security context token created by a security token service – The context initiator asks a security token service to create a new security context token. The newly created security context token is distributed to the parties through the mechanisms defined here and in [WS-Trust]. For this scenario the initiating party sends a <wst:RequestSecurityToken> request to the token service and a <wst:RequestSecurityTokenResponseCollection>containing a <wst:RequestSecurityTokenResponse> is returned. The response contains a <wst:RequestedSecurityToken> containing (or pointing to) the new security context token and a <wst:RequestedProofToken> pointing to the "secret" for the returned context. The requestor then uses the security context token (with [WS-Security]) when securing messages to applicable services.
Security context token created by one of the communicating partiesand propagated with a message– The initiator creates a security context token and sends it to the other parties on a message using the mechanisms described in this specification and in [WS-Trust]. This model works when the sender is trusted to always create a new security context token. For this scenario the initiating party creates a security context token and issues a signed unsolicited <wst:RequestSecurityTokenResponse> to the other party. The message contains a <wst:RequestedSecurityToken> containing (or pointing to) the new security context token and a <wst:RequestedProofToken> pointing to the "secret" for the security context token. The recipient can then choose whether or not to accept the security context token. As described in [WS-Trust], the <wst:RequestSecurityTokenResponse> element MAY be in the <wst:RequestSecurityTokenResponseCollection>within a body or inside a header block. It should be noted that unless delegation tokens are used, this scenario requires that parties trust each other to share a secret key (and non-repudiation is probably not possible). As receipt of these messages may be expensive, and because a recipient may receive multiple messages, the…/wst:RequestSecurityTokenResponse/@Context attribute in [WS-Trust] allows the initiator to specify a URI to indicate the intended usage (allowing processing to be optimized).
Security context token created through negotiation/exchanges – When there is a need to negotiate or participate in a sequence of message exchanges among the participants on the contents of the security context token, such as the shared secret, this specification allows the parties to exchange data to establish a security context. For this scenario the initiating party sends a <wst:RequestSecurityToken> request to the other party and a <wst:RequestSecurityTokenResponse> is returned. It is RECOMMENDED that the framework described in [WS-Trust] be used; however, the type of exchange will likely vary. If appropriate, the basic challenge-response definition in [WS-Trust] is RECOMMENDED. Ultimately (if successful), a final response contains a <wst:RequestedSecurityToken> containing (or pointing to) the new security context and a <wst:RequestedProofToken> pointing to the "secret" for the context.
If an SCT is received, but the key sizes are not supported, then a fault SHOULD be generated using the wsc:UnsupportedContextToken fault code unless another more specific fault code is available.