第二十三章 加密安全标头元素

文章目录

第二十三章 加密安全标头元素

本主题介绍如何加密 Web 服务和 Web 客户端发送的消息中的 WS-Security 标头内的元素。(此处描述的工具也可单独使用或与安全标头元素结合使用来加密 SOAP 主体。)

通常,会同时执行加密和签名。为简单起见,本主题仅介绍加密。有关结合加密和签名的信息,请参阅结合加密和签名。

使用派生密钥令牌进行加密和签名主题描述了加密 SOAP 消息部分内容的另一种方法。

加密安全标头元素

与上一主题中显示的加密技术不同,加密 WS-Security 标头元素的过程要求您指定 <EncryptedData> 元素如何连接到相应的 <EncryptedKey> 元素。

要加密安全标头元素,请执行以下操作:

  1. 可选择包含 %soap.inc 包含文件,它定义了可能需要使用的宏。
  2. 创建要加密的标头元素。例如:
java 复制代码
 set userToken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
  1. 获取包含将接收 SOAP 消息的实体的公钥的凭证集。请参阅以编程方式检索凭证集。
java 复制代码
 set credset=..SecurityIn.Signature.X509Credentials

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

  1. 根据凭证集创建加密密钥。为此,调用 %XML.Security.EncryptedKeyCreateX509() 类方法,并可选择指定第二个参数。例如:
java 复制代码
 set enckey=##class(%XML.Security.EncryptedKey).CreateX509(credset,$$$SOAPWSEncryptNone)

此方法生成一个对称密钥,返回 %XML.Security.EncryptedKey 的实例,该实例表示 <EncryptedKey> 标头元素。此标头元素包含对称密钥,由给定凭证集中的公钥加密。

第二个参数指定此密钥是否加密 SOAP 主体(除了密钥的任何其他用途之外)。值 $$$SOAPWSEncryptNone 表示此密钥不会用于加密 SOAP 主体。如果省略此参数,则 SOAP 主体也会被加密。

  1. 可选择修改加密密钥实例以使用不同的算法。请参阅指定块加密算法和指定密钥传输算法。
  2. 对于每个要加密的安全标头元素,根据该元素创建一个 <EncryptedData> 元素。为此,调用 %XML.Security.EncryptedDataCreate() 类方法。在此过程中,仅指定第二个参数,即要加密的安全标头元素。例如:
java 复制代码
 set encdata=##class(%XML.Security.EncryptedData).Create(,userToken)
  1. 对于 <EncryptedKey>,添加对 <EncryptedData> 元素的引用。对每个 <EncryptedData> 元素执行以下操作:

a. 调用 %XML.Security.DataReferenceCreate() 类方法并提供加密数据实例作为参数。

b. 调用加密密钥实例的 AddReference() 方法并提供数据引用作为参数。

java 复制代码
 set dataref=##class(%XML.Security.DataReference).Create(encdata)
 do enckey.AddReference(dataref)

此步骤更新加密密钥实例以包含指向加密数据实例的指针。

如果此 <EncryptedKey> 也加密 SOAP 主体,它会自动在 <Body> 中包含对 <EncryptedData> 元素的引用。

  1. <EncryptedKey> 元素添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于要添加的元素,指定 %XML.Security.EncryptedKey 的实例。
java 复制代码
 do ..SecurityOut.AddSecurityElement(enckey)
  1. 将加密的安全标头元素添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。在本例中,指定两个参数:

a. 要包含的安全标头元素(而不是基于该元素 %XML.Security.EncryptedData 的实例)。

b. 加密密钥实例。第二个参数指定第一个参数指定的项的放置位置。如果参数为 AB,则 IRIS 确保 AB 之后。指定此项以便收件人首先处理加密密钥,然后再处理依赖于它的加密安全标头元素。

java 复制代码
 do ..SecurityOut.AddSecurityElement(userToken,enckey)
相关推荐
夜郎king6 小时前
HTML5 SVG 实现日出日落动画与实时天气可视化
前端·html5·svg 日出日落
倒流时光三十年6 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
liann1196 小时前
3.1_网络——基础
网络·安全·web安全·http·网络安全
独行soc6 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
码农小卡拉6 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
小羊不会打字6 小时前
CANN 生态中的模型安全加固:`secure-model-deploy` 项目实践指南
安全·neo4j
怣506 小时前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql
wjhx7 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
独行soc7 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
夏幻灵7 小时前
HTML5里最常用的十大标签
前端·html·html5