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

文章目录

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

本主题介绍如何加密 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)
相关推荐
向往风的男子1 小时前
【mysql】mysql之读写分离以及分库分表
数据库·mysql
FakeOccupational1 小时前
nodejs 007:错误npm error Error: EPERM: operation not permitted, symlink
前端·npm·node.js
奶糖 肥晨1 小时前
react是什么?
前端·react.js·前端框架
亦舒.1 小时前
JSDelivr & NPM CDN 国内加速节点
前端·npm·node.js
代码搬运媛1 小时前
code eintegrity npm err sha512
前端·npm·node.js
阳光开朗_大男孩儿1 小时前
DBUS属性原理
linux·服务器·前端·数据库·qt
挠背小能手1 小时前
达梦数据库SCHEMA使用初探
数据库·oracle
acrel___wy1 小时前
小商品市场配电系统安全用电解决方案
安全·系统安全
楠神说软件测试2 小时前
接口自动化框架入门(requests+pytest)
运维·数据库·自动化
惟长堤一痕2 小时前
医学数据分析实训 项目一 医学数据采集
数据库