加密的 SOAP 头
加密的头元素提供了加密 SOAP 头的标准方法。作为 OASIS SOAP 消息安全性规范的扩展之一,加密的头元素指示响应者已处理请求。加密 SOAP 头和部件有助于提供更安全的消息级安全性。
EncryptedHeader 或 <wsse11:EncryptedHeader> 元素是已更新的 Web Service 安全性 V1.1 标准中的一部分,和其他支持 V1.1 标准的供应商(例如 Microsoft .NET 和 DataPower®)之间存在互操作性。
将 EncryptedHeader 元素用于加密 SOAP 头块。EncryptedHeader 元素允许 Web Service 安全性符合 SOAP mustUnderstand 处理准则以及防止泄露有关 SOAP 头块的属性中包含的信息。
<wsse11:EncryptedHeader> 元素必须包含一个 <xenc:EncryptedData> 元素。每个加密的头元素中只允许存在一个 <xenc:EncryptedData> 元素。
加密的数据元素
正常情况下,编程模型(如 JAX-WS)串行 SOAP 消息到 Java™ 绑定对象,然后分派调用到应用程序代码。然而,如果已对 SOAP 消息进行加密,那么反序列化就会失败,原因是在加密之前,会用 XML 加密标准中的 EncryptedData XML 元素替换原始内容。
某些情况下,它适合于为接收方加密的 <wsse:Security> 头中包含的令牌。
- EncryptedHeader 元素必须包含一个 EncryptedData 元素。
- 可以使用 <xenc:EncryptedData> 元素来包含安全性令牌,并将其包含在 <wsse:Security> 头中。
- <xenc:EncryptedData> 一定不能包含引用包含的安全性令牌的 XML 标识。
- 所有的 <xenc:EncryptedData> 令牌必须具有嵌入的加密密钥,还必须被独立的加密密钥引用。
- 如果需要兼容 Basic Security Profile 1.1,那么 <xenc:EncryptedData> 元素必须包含标识属性。
加密的部件的策略声明
EncryptedParts 策略声明指定要对安全策略中的进行加密的头。下表描述了可用于 EncryptedParts 的元素和属性。
元素或属性 | 描述 |
---|---|
/sp:EncryptedParts/sp:Header | 可选。此可选元素指示必须保护特定 SOAP 头(或者一组 SOAP 头)。单个
EncryptedParts 元素中可包含多个 sp:Header 元素。
必须加密每个头(或一组头),并且此加密将通过使用 Web Service 安全性 V1.1 加密的头来加密元素。因此,如果服务不支持 WS-Secuirty 1.1 加密的头,那么不能通过使用消息级安全性来加密头。 如果要对局部名相同但名称空间名称不同的多个 SOAP 头进行加密,那么需要多个 sp:Header 元素,它们作为单个 sp:EncryptedParts 声明的一部分或作为独立 sp:EncryptedParts 声明的一部分。 |
/sp:EncryptedParts/sp:Header/@Name | 可选。此属性指示要受机密性保护的 SOAP 头的局部名。如果未指定此属性,那么将保护名称空间与 Namespace 属性相匹配的所有 SOAP 头。 |
/sp:EncryptedParts/sp:Header/@Namespace | 必需。此属性指示要受机密性保护的 SOAP 头的名称空间。 |
以下消息示例显示已对策略指定加密头的 EncryptedParts 策略声明的情况下,消息上的 EncryptedHeader 元素看上去的样子:
<S:Envelope xmlns:S="…" xmlns:wsse="…" xmlns:wsse11="…" xmlns:wsu="…"
xmlns:xenc="…" xmlns:ds="…">
<S:Header>
<wsse:Security>
<!-- Tokens etc. -->
<xenc:EncryptedKey>
<xenc:EncryptionMethod Algorithm="…"/>
<ds:KeyInfo>
… …
</ds:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>…</xenc:CipherValue>
</xenc:CipherData>
<xenc:ReferenceList>
<xenc:DataReference URI="#hdrID"/>
</xenc:ReferenceList>
</xenc:EncryptedKey>
</wsse:Security>
<wsse11:EncryptedHeader wsu:Id="hdrID">
<xenc:EncryptedData Id="encDataID">
<xenc:CipherData>
<xenc:CipherValue>…</xenc:CipherValue>
</xenc:CipherData>
…
</xenc:EncryptedData>
</wsse11:EncryptedHeader>
</S:Header>
<S:Body>
…
</S:Body>
</S:Envelope>
要加密 Web Service 安全性 V1.0 规范格式的头,请指定绑定中 <encryptionInfo> 上的 com.ibm.wsspi.wssecurity.encryptedHeader.generate.WSS1.0 属性值为 True。指定了此属性时,加密的目标头被 <EncryptedData> 元素替换,取而代之的是 <EncryptedHeader> 元素(包含 <EncryptedData> 元素)。
对与 WebSphere® Application Server V7.0 之前版本等价的 Web Service 安全性 V1.1 行为,在绑定中的 <encryptionInfo> 元素上指定 com.ibm.wsspi.wssecurity.encryptedHeader.generate.WSS1.1.pre.V7 属性值为 True。如果指定此属性,那么 <EncryptedHeader> 元素会包括 wsu:Id 参数,而 <EncryptedData> 元素会省略该 Id 参数。只有在不需要符合 Basic Security Profile 1.1 时,才应该使用此属性。
有关 EncryptedHeader 元素和 EncryptedData 元素的完整信息,请参阅 Web Service 安全性 V1.1 规范。