文章目录
- 第二十章 加密 SOAP 主体
- 加密概述
- 加密 `SOAP` 主体
第二十章 加密 SOAP 主体
本主题介绍如何加密 IRIS Web 服务和 Web 客户端发送的 SOAP 消息正文。
主题“加密安全标头元素”和“使用派生密钥令牌进行加密和签名”描述了如何加密安全标头元素以及加密 SOAP 主体的其他方法。
加密概述
IRIS 对 SOAP 消息加密的支持基于 WS-Security 1.1。反过来,WS-Security 遵循 XML 加密规范。根据后者规范,要加密 XML 文档:
- 生成一个对称密钥以供临时使用。
- 可以使用它来加密文档(或文档的选定部分)。
使用包含内容加密版本的 <EncryptedData> 元素替换文档的这些部分。
- 使用要向其发送文档的实体的公钥加密对称密钥。
可以从该实体的请求消息中包含的 X.509 证书中获取公钥。或者可以提前获取它。
- 在同一文档中的 <EncryptedKey>元素中包含加密的对称密钥。<EncryptedKey>元素直接或间接地提供信息,使接收者能够确定用于解密此元素的密钥。
此信息可以包含在 <EncryptedKey> 元素中,或者 <EncryptedKey>  元素可以包含对包含 X.509 证书或签名的 SAML 断言的二进制安全令牌的直接引用。在后一种情况下,必须在添加 <Signature>元素之前将安全令牌添加到消息中。
文档可以包含多个<EncryptedKey> 元素,适用于文档的不同加密部分。
其他主题介绍了加密 SOAP 消息部分内容的其他方法。消息本身的细节各不相同,但一般过程相同,并遵循 XML 加密规范:生成并使用对称密钥,加密对称密钥,并将加密的对称密钥包含在消息中。
加密 SOAP 主体
 
要加密 SOAP 消息的正文,可以使用此处的基本过程或小节中描述的变体。首先,下图总结了该过程:

具体过程如下:
- 可选择包含 %soap.inc包含文件,它定义了可能需要使用的宏。
- 获取包含将接收 SOAP消息的实体的公钥的凭证集,通常来自收到的入站消息。请参阅以编程方式检索凭证集。
例如:
 set credset=..SecurityIn.Signature.X509Credentials
请务必检查返回对象的类型,看它是否是 %SYS.X509Credential的实例,如以编程方式检索凭据集中所述。
- 创建包含与该凭证集关联的证书的二进制安全令牌。为此,请调用 %SOAP.Security.BinarySecurityToken的CreateX509Token()类方法。例如:
 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)
此方法返回代表 <BinarySecurityToken> 标头元素的 %SOAP.Security.BinarySecurityToken实例。
- 将此令牌添加到 WS-Security标头元素。为此,请调用Web客户端或Web服务的SecurityOut属性的AddSecurityElement()方法。对于方法参数,请使用您刚刚创建的令牌。例如:
 do ..SecurityOut.AddSecurityElement(bst)
- 根据二进制安全令牌创建加密密钥。为此,请调用 %XML.Security.EncryptedKey的 CreateX509()类方法。例如:
 set enckey=##class(%XML.Security.EncryptedKey).CreateX509(bst)
此方法生成一个对称密钥,使用它来加密 SOAP 主体,并返回 %XML.Security.EncryptedKey 的实例,该实例表示 <EncryptedKey>  标头元素。此标头元素包含对称密钥,由给定二进制安全令牌中包含的公钥加密。
- 可选择修改加密密钥实例以使用不同的算法。请参阅指定块加密算法和指定密钥传输算法。
- 将 <EncryptedKey>元素添加到WS-Security标头元素。为此,请调用Web客户端或Web服务的SecurityOut属性的AddSecurityElement()方法。对于要添加的元素,请指定%XML.Security.EncryptedKey的实例。
例如:
 do ..SecurityOut.AddSecurityElement(enckey)
此步骤还添加 <EncryptedData> 元素作为 <Body> 元素的子元素。
- 发送 SOAP消息。SOAP主体已加密,并包含WS-Security标头。
WS-Security 标头包括<BinarySecurityToken> and <EncryptedKey> 元素。



















