密钥信息
在 SOAP 消息的安全性头中,<ds:KeyInfo> 元素用来描述用于处理该消息的一个或多个部分的密钥或证书所在的位置。用于数字签名的 <ds:KeyInfo> 元素描述公用证书,而用于加密的 <ds:KeyInfo> 元素描述专用密钥。
WS-Security 绑定中的密钥信息类型指定了不同的机制,这些机制通过使用 <ds:KeyInfo> 元素中的
<wsse:SecurityTokenReference> 元素引用安全性令牌。WS-Security 绑定中提供了下列密钥信息类型:
- 安全性令牌引用
- 密钥标识
- X509 签发者名称和签发者序列
- 嵌入式令牌
- 指纹(仅适用于 JAX-WS)
- 密钥名称(仅适用于 JAX-RPC)
与数字签名相关联的密钥信息的缺省值为安全性令牌引用。与加密相关联的密钥信息的缺省值为密钥标识。
安全性令牌引用和嵌入式令牌是直接将 X.509 证书放入消息中的唯一选项。所有其他选项在消息中放入一个对于密钥或证书唯一的标识,消息接收方使用此标识从其环境中选择密钥或证书来评估消息。
下面是 WS-Security 运行时针对每种密钥信息类型发出的 <ds:KeyInfo>
元素的示例:
- 安全性令牌引用
- 消息中其他位置的安全性令牌通过使用统一资源标识 (URI) 直接进行引用。以下 XML 片段是在 SOAP 消息中针对 X.509v3 令牌的安全性令牌引用密钥信息类型生成的 <KeyInfo> 元素的示例:
<wsse:BinarySecurityToken EncodingType="...#Base64Binary" ValueType="...#X509v3" wsu:Id="SomeCert"> .... </wsse:BinarySecurityToken> ... <ds:KeyInfo> <wsse:SecurityTokenReference> <wsse:Reference URI='#SomeCert' ValueType="...#X509v3" /> </wsse:SecurityTokenReference> </ds:KeyInfo>
注意: 如 Web Service 互操作性组织(WS-I)基本安全概要文件 V1 草案中表明的以及先前示例中显示的那样,SECURE_ENVELOPE 中的 wsse:Reference 元素必须具有 ValueType 属性。 - 密钥标识
- 安全性令牌通过使用唯一地标识令牌的不透明值进行引用。用于生成 <KeyIdentifier> 元素值的算法取决于令牌类型。例如,您可以使用请求评论 (RFC) 3280 的因特网工程任务组织 (IETF) 中定义的公用密钥的标识。在 SOAP 消息中为此密钥信息类型生成以下 <KeyInfo> 元素:
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <wsse:SecurityTokenReference> <wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/2004/01 /oasis-200401-wss-x509-token-profile-1.0#X509v3SubjectKeyIdentifier"> /62wXO... </wsse:KeyIdentifier> </wsse:SecurityTokenReference> </ds:KeyInfo>
- X509 签发者名称和签发者序列
- 安全性令牌通过 X.509 证书的签发者名称和签发者序列号进行引用。在 SOAP 消息中为此密钥信息类型生成以下 <KeyInfo> 元素:
<ds:KeyInfo> <wsse:SecurityTokenReference> <ds:X509Data> <ds:X509IssuerSerial> <ds:X509IssuerName>CN=Jones, O=IBM, C=US</ds:X509IssuerName> <ds:X509SerialNumber>1040152879</ds:X509SerialNumber> </ds:X509IssuerSerial> </ds:X509Data> </wsse:SecurityTokenReference> </ds:KeyInfo>
- 嵌入式令牌
- 在 <SecurityTokenReference> 元素中直接嵌入了安全性令牌。在 SOAP 消息中为此密钥信息类型生成以下 <KeyInfo> 元素:
<ds:KeyInfo> <wsse:SecurityTokenReference> <wsse:Embedded wsu:Id=”tok1” /> … </wsse:Embedded> </wsse:SecurityTokenReference> </ds:KeyInfo>
- 指纹
- 如果选择了指纹,那么将使用 ValueType 为 #ThumbPrintSHA1 的
KeyIdentifier 元素。此密钥信息类型与 X.509 令牌配合使用。X.509 密钥或证书通过证书的基本 64 位编码指纹进行引用。
以下 XML 片段是在 SOAP 消息中针对此密钥信息类型生成的 <KeyInfo> 元素的示例:
<ds:KeyInfo> <wsse:SecurityTokenReference> <wsse:KeyIdentifier EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/oasis-wss480soap-message-security-1.1#ThumbPrintSHA1" >B5o2elsan6IhbxxYgZ62pPFnUIc=</wsse:KeyIdentifier> </wsse:SecurityTokenReference> </ds:KeyInfo>
- 密钥名
- 安全性令牌通过使用与令牌中的身份断言匹配的名称进行引用。建议您不要使用此密钥类型,因为它可能导致多个安全性令牌与指定的名称匹配。在 SOAP 消息中为此密钥信息类型生成以下 <KeyInfo> 元素:
<ds:KeyInfo> <ds:KeyName>CN=Group1</ds:KeyName> </ds:KeyInfo>
通常,当您使用密钥散列消息认证代码 (HMAC) 数字签名算法(例如,此 XML 签名模式)时,请使用密钥名称。
“Web Service 安全性”部分中的 Web Service 安全性:SOAP 消息安全性 1.0 (WS-Security 2004) OASIS 标准对每类密钥信息都进行了描述。