6.2.3. 指定 AsymmetricBinding 策略
概述
非对称绑定策略使用非对称密钥算法(公钥/私钥组合)实现 SOAP 消息保护,并在 SOAP 层这样做。非对称绑定的加密和签名算法与 SSL/TLS 使用的加密和签名算法类似。然而,一个关键区别在于,SOAP 消息保护允许您选择消息的特定部分来保护(例如,单个标头、正文或附加),而传输层安全性则只能在整个消息上运行。
策略主题
非对称绑定策略必须应用到端点策略主体(请参阅 “端点策略主题”一节)。例如,如果带有 ID 的非对非对称绑定策略( MutualCertificate10SignEncrypt_IPingService_policy
),您可以按照以下方法应用策略到端点绑定中:
<wsdl:binding name="MutualCertificate10SignEncrypt_IPingService" type="i0:IPingService">
<wsp:PolicyReference URI="#MutualCertificate10SignEncrypt_IPingService_policy"/>
...
</wsdl:binding>
语法
AsymmetricBinding
元素使用以下语法:
<sp:AsymmetricBinding xmlns:sp="..." ... > <wsp:Policy xmlns:wsp="..."> ( <sp:InitiatorToken> <wsp:Policy> ... </wsp:Policy> </sp:InitiatorToken> ) | ( <sp:InitiatorSignatureToken> <wsp:Policy> ... </wsp:Policy> </sp:InitiatorSignatureToken> <sp:InitiatorEncryptionToken> <wsp:Policy> ... </wsp:Policy> </sp:InitiatorEncryptionToken> ) ( <sp:RecipientToken> <wsp:Policy> ... </wsp:Policy> </sp:RecipientToken> ) | ( <sp:RecipientSignatureToken> <wsp:Policy> ... </wsp:Policy> </sp:RecipientSignatureToken> <sp:RecipientEncryptionToken> <wsp:Policy> ... </wsp:Policy> </sp:RecipientEncryptionToken> ) <sp:AlgorithmSuite ... > ... </sp:AlgorithmSuite> <sp:Layout ... > ... </sp:Layout> ? <sp:IncludeTimestamp ... /> ? <sp:EncryptBeforeSigning ... /> ? <sp:EncryptSignature ... /> ? <sp:ProtectTokens ... /> ? <sp:OnlySignEntireHeadersAndBody ... /> ? ... </wsp:Policy> ... </sp:AsymmetricBinding>
策略示例
例 6.4 “Asymmetric Binding 的示例” 演示了支持使用签名和加密的非对称绑定的示例,其中签名和加密是使用公钥/私钥对(使用非对称加密)进行的签名和加密。此示例不指定消息的哪些部分应该被签名并加密。有关如何进行此操作的详情,请参考 第 6.2.5 节 “指定到加密和签名的消息部分”。
例 6.4. Asymmetric Binding 的示例
<wsp:Policy wsu:Id="MutualCertificate10SignEncrypt_IPingService_policy"> <wsp:ExactlyOne> <wsp:All> <sp:AsymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> <wsp:Policy> <sp:InitiatorToken> <wsp:Policy> <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <sp:WssX509V3Token10/> </wsp:Policy> </sp:X509Token> </wsp:Policy> </sp:InitiatorToken> <sp:RecipientToken> <wsp:Policy> <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never"> <wsp:Policy> <sp:WssX509V3Token10/> </wsp:Policy> </sp:X509Token> </wsp:Policy> </sp:RecipientToken> <sp:AlgorithmSuite> <wsp:Policy> <sp:Basic256/> </wsp:Policy> </sp:AlgorithmSuite> <sp:Layout> <wsp:Policy> <sp:Lax/> </wsp:Policy> </sp:Layout> <sp:IncludeTimestamp/> <sp:EncryptSignature/> <sp:OnlySignEntireHeadersAndBody/> </wsp:Policy> </sp:AsymmetricBinding> <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> <wsp:Policy> <sp:MustSupportRefKeyIdentifier/> <sp:MustSupportRefIssuerSerial/> </wsp:Policy> </sp:Wss10> </wsp:All> </wsp:ExactlyOne> </wsp:Policy>
sp:InitiatorToken
initiator 令牌 引用发起方拥有的公钥/私钥-对。此令牌使用如下:
- 令牌的私钥签名信息从启动器发送到接收者。
- 令牌的公钥验证接收方收到的签名。
- 令牌的公钥加密从接收者发送到启动器的消息。
- 令牌的私钥解密发起方接收的消息。
混淆,此令牌由发起方 和 接收者使用。但是,只有启动器有权访问私钥,因此在这种情况下,令牌可以被认为是属于发起方。在 第 6.2.2 节 “基本签名和加密(cenario)” 中,initiator 令牌是证书 Alice。
这个元素应包含嵌套的 wsp:Policy
元素和 sp:X509Token
元素,如下所示。sp:IncludeToken
属性设为 AlwaysToRecipient
,它指示运行时包含 Alice 的公钥,并将每个消息发送到接收者。如果接收者希望使用启动器的证书来执行身份验证,这个选项很有用。最深嵌套的元素 WssX509V3Token10
是可选的。它指定 X.509 证书应符合哪些规格版本。此处可以指定以下替代(或 none):
- sp:WssX509V3Token10
- 此可选元素是一个策略断言,表示应使用 X509 版本 3 令牌。
- sp:WssX509Pkcs7Token10
- 此可选元素是一个策略断言,表示应使用 X509 PKCS7 令牌。
- sp:WssX509PkiPathV1Token10
- 此可选元素是一个策略断言,表示应使用 X509 PKI Path Version 1 令牌。
- sp:WssX509V1Token11
- 此可选元素是一个策略断言,表示应使用 X509 版本 1 令牌。
- sp:WssX509V3Token11
- 此可选元素是一个策略断言,表示应使用 X509 版本 3 令牌。
- sp:WssX509Pkcs7Token11
- 此可选元素是一个策略断言,表示应使用 X509 PKCS7 令牌。
- sp:WssX509PkiPathV1Token11
- 此可选元素是一个策略断言,表示应使用 X509 PKI Path Version 1 令牌。
sp:RecipientToken
接收者令牌 引用由接收者拥有的公钥/私钥-对。此令牌使用如下:
- 令牌的公钥加密从启动器发送到接收者的消息。
- 令牌的私钥解密接收方接收的消息。
- 令牌的私钥签名从接收者发送到发起方。
- 令牌的公钥验证发起方接收的签名。
混淆,该令牌由接收者 和 启动器使用。但是,只有接收者可以访问私钥,因此使用这个意义,令牌可以被认为属于接收者。在 第 6.2.2 节 “基本签名和加密(cenario)” 中,接收者令牌是证书 Bob。
这个元素应包含嵌套的 wsp:Policy
元素和 sp:X509Token
元素,如下所示。sp:IncludeToken
属性设为 Never
,因为不需要在回复消息中包含 Bob 的公钥。
在 Apache CXF 中,不需要在消息中发送 Bob 或 Alice 的令牌,因为 Bob 的证书和 Alice 的证书在两端均提供,请参阅 第 6.2.6 节 “提供加密密钥和签名密钥”。
sp:AlgorithmSuite
这个元素指定了用于签名和加密的加密算法套件。有关可用算法套件的详情,请参考 第 6.2.7 节 “指定 Algorithm Suite”。
SP:布局
此元素指定是否在 SOAP 消息中添加安全性标头的顺序实施任何条件。sp:Lax
元素指定没有对安全标头顺序实施的条件。sp:Lax
的替代方案是 sp:Strict
,sp:LaxTimestampFirst
, 或 sp:LaxTimestampLast
。
sp:IncludeTimestamp
如果策略中包含此元素,则运行时会将 wsu:Timestamp
元素添加到 wsse:Security
标头。默认情况下 不包含 时间戳。
sp:EncryptBeforeSigning
如果消息部分同时受到加密和签名,则需要指定执行这些操作的顺序。默认顺序是在加密前签名。但是,如果您将这个元素包含在非对称策略中,则这个顺序将更改为在签名前加密。
隐式,此元素也会影响解密和签名验证操作的顺序。例如,如果在加密前发送消息符号的发件人,则消息的接收器必须在验证签名前进行解密。
sp:EncryptSignature
这个元素指定必须加密消息签名(通过加密令牌,如 第 6.2.6 节 “提供加密密钥和签名密钥”所述)。默认为 false。
邮件签名 是通过签署消息的各种部分直接获取的签名,如消息正文、邮件标题或独立元素(请参阅 第 6.2.5 节 “指定到加密和签名的消息部分”)。有时,消息签名被称为 主签名,因为 WS-SecurityPolicy 规格还支持端到端支持令牌的概念,该令牌用于签署主签名。因此,如果 sp:EndorsingTokens
元素应用于端点,您可以有一个签名链:主签名(签名信息本身)和辅助签名(为主签名签名签名)。
有关各种支持令牌的详情,请参考 “SupportingTokens assertions”一节。
sp:ProtectTokens
此元素指定签名必须包含用于生成该签名的令牌。默认为 false。
sp:OnlySignEntireHeadersAndBody
此元素指定签名 只应用于 整个正文或整个标头,不适用于标题的正文或子元素的子元素。启用这个选项时,您可以有效地防止使用 sp:SignedElements
断言(请参阅 第 6.2.5 节 “指定到加密和签名的消息部分”)。