文章
· 九月 8 阅读大约需 3 分钟

第二十章 加密 SOAP 主体

第二十章 加密 SOAP 主体

本主题介绍如何加密 IRIS Web 服务和 Web 客户端发送的 SOAP 消息正文。

主题“加密安全标头元素”和“使用派生密钥令牌进行加密和签名”描述了如何加密安全标头元素以及加密 SOAP 主体的其他方法。

加密概述

IRISSOAP 消息加密的支持基于 WS-Security 1.1。反过来,WS-Security 遵循 XML 加密规范。根据后者规范,要加密 XML 文档:

  1. 生成一个对称密钥以供临时使用。
  2. 可以使用它来加密文档(或文档的选定部分)。

使用包含内容加密版本的 <EncryptedData> 元素替换文档的这些部分。

  1. 使用要向其发送文档的实体的公钥加密对称密钥。

可以从该实体的请求消息中包含的 X.509 证书中获取公钥。或者可以提前获取它。

  1. 在同一文档中的 <EncryptedKey> 元素中包含加密的对称密钥。 <EncryptedKey> 元素直接或间接地提供信息,使接收者能够确定用于解密此元素的密钥。

此信息可以包含在 <EncryptedKey> 元素中,或者 <EncryptedKey> 元素可以包含对包含 X.509 证书或签名的 SAML 断言的二进制安全令牌的直接引用。在后一种情况下,必须在添加 <Signature>元素之前将安全令牌添加到消息中。

文档可以包含多个<EncryptedKey> 元素,适用于文档的不同加密部分。

其他主题介绍了加密 SOAP 消息部分内容的其他方法。消息本身的细节各不相同,但一般过程相同,并遵循 XML 加密规范:生成并使用对称密钥,加密对称密钥,并将加密的对称密钥包含在消息中。

加密 SOAP 主体

要加密 SOAP 消息的正文,可以使用此处的基本过程或小节中描述的变体。首先,下图总结了该过程:

具体过程如下:

  1. 可选择包含 %soap.inc 包含文件,它定义了可能需要使用的宏。
  2. 获取包含将接收 SOAP 消息的实体的公钥的凭证集,通常来自收到的入站消息。请参阅以编程方式检索凭证集。

例如:

 set credset=..SecurityIn.Signature.X509Credentials

请务必检查返回对象的类型,看它是否是 %SYS.X509Credential的实例,如以编程方式检索凭据集中所述。

  1. 创建包含与该凭证集关联的证书的二进制安全令牌。为此,请调用 %SOAP.Security.BinarySecurityTokenCreateX509Token() 类方法。例如:
 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)

此方法返回代表 <BinarySecurityToken>标头元素的 %SOAP.Security.BinarySecurityToken实例。

  1. 将此令牌添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于方法参数,请使用您刚刚创建的令牌。例如:
 do ..SecurityOut.AddSecurityElement(bst)
  1. 根据二进制安全令牌创建加密密钥。为此,请调用 %XML.Security.EncryptedKey的 CreateX509() 类方法。例如:
 set enckey=##class(%XML.Security.EncryptedKey).CreateX509(bst)

此方法生成一个对称密钥,使用它来加密 SOAP 主体,并返回 %XML.Security.EncryptedKey 的实例,该实例表示 <EncryptedKey> 标头元素。此标头元素包含对称密钥,由给定二进制安全令牌中包含的公钥加密。

  1. 可选择修改加密密钥实例以使用不同的算法。请参阅指定块加密算法和指定密钥传输算法。
  2. <EncryptedKey> 元素添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于要添加的元素,请指定 %XML.Security.EncryptedKey 的实例。

例如:

 do ..SecurityOut.AddSecurityElement(enckey)

此步骤还添加 <EncryptedData> 元素作为 <Body> 元素的子元素。

  1. 发送 SOAP 消息。SOAP 主体已加密,并包含 WS-Security 标头。

WS-Security 标头包括<BinarySecurityToken> and <EncryptedKey> 元素。

讨论 (0)1
登录或注册以继续