可以对客户机端请求生成者(发送方)绑定配置签名信息。签名信息用于签署和验证包括 SOAP 主体、时间戳记信息和用户名令牌等在内的消息部件。要为请求签署配置客户机,请在配置该客户机时指定要进行数字签署的消息部件。
开始之前
WebSphere® Application Server 将 XML 数字签名与现有算法(如 RSA、HMAC 和 SHA1)配合使用。XML 签名定义许多用于描述密钥信息的方法并启用新方法的定义。完成这些步骤前,应熟悉 XML 数字签名以便对数字内容的数字签名进行签署和验证。
关于此任务
通过在 SOAP 消息中包含 XML 签名,实现以下几点:消息完整性和认证。完整性是指数字签名,而机密性是指加密。完整性减少数据跨因特网发送时遭修改的风险。WebSphere Application
Server 使用缺省生成者的签名信息来签署消息部件,例如主体、时间戳记和 Username 令牌。
对于签名信息,必须指定以下各项:
- 要签署的消息部件。
- 签名密钥的密钥信息所引用的密钥信息。
- 签名算法。
WebSphere Application
Server 提供绑定的缺省值。但是,管理员必须修改生产环境的缺省值。
WSSSignature API 将下列部件配置为签名部件:
表 1. 预先配置的签名部件. 使用签名信息来验证消息的部分。部件 |
描述 |
安全性令牌对象 |
此对象认证客户机。如果指定了此选项,那么签署消息。如果选择了登录配置认证方法,那么您可以使用安全性令牌对消息进行数字签名。 |
WSSTimestamp 对象 |
此对象将时间戳记添加到消息。时间戳记根据发送,然后接收消息的时间,确定消息是否有效。 |
WSSSignature 部件对象 |
此对象将签名部件添加至消息。 |
SOAP 头及作为目标的 QName |
此签名部件将由 QName 指定的头添加为验证部件。 |
WSS API 允许使用关键字或 XPath 表达式来指定要签署的消息部件。WebSphere Application
Server 支持使用下列关键字:
表 2. 受支持的签名关键字. 密钥信息用于指定已签署消息的哪些部分。关键字 |
引用 |
ADDRESSING_HEADERS |
Web Service 寻址 (WS-Addressing) 头。 |
BODY |
SOAP 消息主体。主体是消息的用户数据部分。 |
TIMESTAMP |
创建和到期时间戳记信息。 |
Web Services Security API (WSS API) 用于配置绑定文件的请求生成者(客户机端)部分的签名信息。要在客户机端配置签名信息,请使用 WSS API 或者通过管理控制台配置要签署的策略集。
如果使用 WSS API 进行配置,那么 WSSSignature 和 WSSSignPart API 将完成以下步骤,以便在配置客户机进行请求生成者签署时指定要以数字方式进行签署的消息部件:
过程
- WSSSignature API 添加 SOAP 消息中要进行数字签署的必需部件。 关键字或 XPath 表达式可用于指定必需的加密部件。
- WSSSignature API 设置签名方法算法。 缺省签名方法是 RSA_SHA1。WebSphere Application Server 支持以下预先配置的算法:
WebSphere Application
Server 不支持以下 DSA-SHA1 算法:http://www.w3.org/2000/09/xmldsig#dsa-sha1。
如果要保持与基本安全概要文件 (BSP) 一致,就不能使用 DSA-SHA1 算法。
签名中的任何 ds:SignatureMethod/@Algorithm 元素基于对称密钥,且必须具有值 RSA-SHA1 或 HMAC-SHA1。
对请求生成者配置指定的算法必须与对请求使用者配置指定的算法。
- WSSSignature API 设置规范方法。 缺省签名方法是 EXC_C14N。WebSphere Application Server 支持以下预先配置的算法:
- 排斥规范算法 EXC_C14N 的 URI:http://www.w3.org/2001/10/xml-exc-c14n#。
- 包含规范算法 C14N 的 URI:http://www.w3.org/2001/10/xml-c14n#。
您为生成者指定的规范算法必须匹配使用者的算法。
- WSSSignature API 添加安全性令牌。 此 API 添加有关要用于签名的安全性令牌的信息,例如:
- 安全性令牌的类。
- 回调处理程序。
- JAAS 登录配置的名称。
- WSSSignature API 设置安全性令牌的类型及令牌引用的类型。 WebSphere Application Server 支持以下预配置的令牌引用:
- SecurityToken.REF_STR
将安全性令牌引用表示为令牌引用类型。
- SecurityToken.REF_KEYID
将密钥标识引用表示为令牌引用类型。
- SecurityToken.REF_EMBEDDED
将嵌入式引用表示为令牌引用类型。
- SecurityToken.REF_THUMBPRINT
将指纹引用表示为令牌引用类型。
- 如果将 SecurityToken.REF_KEYID 设置为令牌引用的类型,那么 WSSSignature API 将设置密钥信息签名类型并配置由密钥信息引用对其进行引用的密钥信息。 WebSphere Application Server 支持以下内容:
- 指定不对 KeyInfo 元素进行签署。
- 指定对整个 <KeyInfo> 元素进行签署。
- 指定对 <KeyInfo> 元素的 <Keyinfochildelements> 子元素进行签署。
如果您未指定某个先前的签名类型,那么缺省情况下,WebSphere Application
Server 指定对整个 <KeyInfo> 元素进行签署。
如果选择 Keyinfo 或 Keyinfochildelements 并在后续步骤中选择 http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform
作为变换算法,那么 WebSphere Application Server 还签署引用的令牌。
生成者的密钥信息签名类型必须匹配使用者的签名类型。
- WSSSignature API 指定是否需要签名确认。 OASIS Web Service 安全性 (WS-Security) V1.1 规范定义签名确认的用法。如果使用的是 WS-Security V1.0,那么此功能不可用。
将存储签名确认值,以便在返回接收消息后使用此值来验证签名确认。如果响应消息应该将签名确认连接至 SOAP 消息,那么调用此方法。
- WSSSignPart API 指定部件引用。 该部件引用指定要进行数字签署的消息部件。
该部件引用对数字签名的消息部件进行引用。为签名指定 <PartReference> 元素时,部件属性指的是 <Integrity> 元素的名称。
可以在 <SigningInfo> 元素中指定多个 <PartReference> 元素。为签名验证指定 <PartReference> 元素时,它拥有两个子元素:<DigestTransform> 和 <Transform>。
- WSSSignPart API 指定摘要方法算法。 在 <SigningInfo> 元素中将使用 <DigestMethod> 元素中指定的摘要方法算法。
WebSphere Application Server 支持以下预先配置的摘要算法:
- http://www.w3.org/2000/09/xmldsig#sha1
- http://www.w3.org/2001/04/xmlenc#sha256
- http://www.w3.org/2001/04/xmlenc#sha512
- WSSSignPart API 指定变换算法。 变换算法针对签名,在 <Transform> 元素内指定。WebSphere Application Server 支持以下预先配置的变换算法:
您为生成者选择的变换算法必须匹配为使用者选择的变换算法。
要点: 如果以下两个条件都成立,那么 WebSphere Application Server 签署引用的令牌:
- 先前选择了 Keyinfo 或 Keyinfochildelements 选项
- 您将 http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform 选为变换算法。
- 如果您正确配置了客户机和服务器签名信息,但是在运行客户机时接收到 Soap 主体未签署的错误,那么您可能需要配置参与者。 使用管理控制台配置策略集,以便为服务器上的 Web Service 配置相同的参与者字符串,用于处理请求并回送响应。
客户机和服务器上的参与者信息都必须引用完全相同的字符串。当客户机与服务器上的参与者字段匹配时,会对请求或响应进行操作而不是向下游发送。
用 Web Service 充当到其他 Web Service 的网关时,参与者可能不同。但是,在所有其他情况中,确保客户机与服务器上的参与者信息匹配。当 Web Service 充当网关,而在通过网关传递请求时他们没有相同的已配置参与者时,Web Service 不处理来自客户机的消息。相反,这些 Web Service 向下游发送请求。包含正确参与者字符串的下游进程将处理该请求。对于响应,发生的情况相同。因此,验证相应的客户机和服务器参与者字段是否同步至关重要。
结果
在 WSSSignature 和 WSSSignPart API 完成这些步骤后,将对绑定文件的生成者部分配置签名信息。
示例
以下示例说明 WSS API 样本代码如何配置签名、如何生成回调处理程序以及如何将 X.509 令牌类型指定为安全性令牌:
WSSFactory factory = WSSFactory.getInstance();
// Instantiate a generation context
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Generate the callback handler and specify the X.509 token
X509GenerateCallbackHandler callbackhandler = generateCallbackHandler();
SecurityToken token = factory.newSecurityToken(X509Token.class,
callbackHandler);
// Set the signature information
WSSSignature sig = factory.newWSSSignature(token);
// Add the header using QName
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "To"));
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));
sig.addSignHeader(new QName("http://www.w3.org/2005/08/addressing", "Action"));
// Apply the signature
gencont.add(sig);
// Secure the message
gencont.process(msgctx);
下一步做什么
必须通过完成下列验证任务对客户机端请求使用者(接收方)绑定配置类似的签名信息:
- 验证签名。
- 选择签名算法方法。
- 根据需要更改或添加签署部件。
如果已经配置,请配置加密和解密信息或者配置使用者和生成者令牌。