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

文章目录

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

本主题介绍如何加密 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)
相关推荐
ZC跨境爬虫1 分钟前
跟着 MDN 学 HTML day_58:(构建行星数据表——HTML表格高级实战指南)
前端·javascript·ui·html·音视频
Donk_672 分钟前
iSCSI 服务器
运维·服务器·数据库
kyriewen5 分钟前
用户打开飞行模式都能打开你的网站?Service Worker 做离线缓存,PWA 实战
前端·javascript·面试
我是汪先生6 分钟前
学习 day8 memory
前端
devilnumber6 分钟前
如何在java的Lambda中安全地修改外部变量?
java·安全·lambda
打码人的日常分享7 分钟前
大模型及智能体安全风险防范与治理策略(PPT)
运维·网络·数据库·安全·云计算·制造
hughnz10 分钟前
钻井“自动化”的终点就是钻井自主化的起点
运维·数据库·python
CHANG_THE_WORLD11 分钟前
PE 文件 数据目录
linux·服务器·数据库
CLX050515 分钟前
CSS如何制作响应式图片集布局_利用object-fit填充空间
jvm·数据库·python
栉甜16 分钟前
APIs学习
前端·javascript·css·学习·html