第三十五章 结合加密和签名

文章目录

第三十五章 结合加密和签名

可以在同一条消息中加密和签名。在大多数情况下,只需组合前面主题中给出的方法即可。本主题讨论了多种场景。

使用非对称密钥签名并加密

要签名然后加密(使用非对称密钥时),请执行以下操作:

  1. 按照添加数字签名中的步骤进行操作。
  2. 按照加密安全标头元素中的步骤进行操作。

或者按照加密 SOAP 主体中的步骤进行操作。

使用非对称密钥加密并签名

要仅加密 SOAP 主体,然后添加数字签名(使用非对称密钥时),请执行以下操作:

  1. 按照加密 SOAP 主体中的步骤进行操作。
  2. 按照添加数字签名中的步骤进行操作。

要加密任何安全标头元素,然后添加数字签名(使用非对称密钥时),必须使用顶级 <ReferenceList> 元素(在文档的其他地方不需要)。在这种情况下,请执行以下操作:

  1. 按照加密安全标头元素中的步骤 1 --- 4 进行操作。
  2. 对于要加密的每个安全标头元素,根据该元素创建一个 <EncryptedData> 元素。为此,请调用 %XML.Security.EncryptedData的 Create() 类方法。在此过程中,指定所有三个参数:

a. 在前面的步骤中创建的加密密钥实例。

b. 要加密的安全标头元素。

c. $$$SOAPWSReferenceEncryptedKey,指定 <EncryptedData> 如何使用加密密钥实例。

java 复制代码
 set refopt=$$$SOAPWSReferenceEncryptedKey
 set encdata=##class(%XML.Security.EncryptedData).Create(enckey,userToken,refopt)
  1. 创建 <ReferenceList> 元素。为此调用 %XML.Security.ReferenceList的 %New() 方法。例如:
  2. 在此 <ReferenceList> 中,创建一个指向 <EncryptedData> 元素的Reference>。为此,请对每个 <EncryptedData> 执行以下操作:

a. 调用 %XML.Security.DataReference的 Create() 类方法,并指定加密数据实例作为参数。此方法返回 %XML.Security.DataReference的实例。

b. 调用引用列表实例的 AddReference() 方法并指定数据引用实例作为参数。

java 复制代码
 set dataref=##class(%XML.Security.DataReference).Create(encdata)
 do reflist.AddReference(dataref)
  1. 将 <ReferenceList> 元素添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于要添加的元素,请指定您的引用列表实例。例如:
java 复制代码
 do ..SecurityOut.AddSecurityElement(reflist)

注意:在添加其他项目之前,必须先添加 <ReferenceList> 元素。

  1. 将 <EncryptedKey> 元素添加到 WS-Security 标头元素。使用 AddSecurityElement()。例如:

    do ..SecurityOut.AddSecurityElement(enckey)

  2. 将加密的安全标头元素添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。在本例中,指定两个参数:

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

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

java 复制代码
 do ..SecurityOut.AddSecurityElement(userToken,enckey)

或者,如果加密的安全标头元素是<Signature>,,则使用 AddSecurityElement()。

  1. 按照步骤添加数字签名。
  2. 发送 SOAP 消息。请参阅添加安全标头元素中的一般注释。
相关推荐
Wang's Blog6 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
国科安芯7 小时前
一颗当两颗用:ASC4T245S 的“两组独立 2 位 + 控制挂靠 VCCA“账
网络·电平转换·抗辐射·在轨服务
冯胤清7 小时前
《Jev-IDS:网络入侵检测一种系统模型》论文深度分析总结
网络
福兮说8 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
\光辉岁月/8 小时前
5.java-数组
java·开发语言
谢亮_vipxieliang8 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
郑州光合科技余经理8 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_962071578 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
code2cat8 小时前
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态
java·并发编程·不可变对象·atomicreference
91刘仁德8 小时前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http