0


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

文章目录

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

本主题介绍如何加密

Web

服务和

Web

客户端发送的消息中的

WS-Security

标头内的元素。(此处描述的工具也可单独使用或与安全标头元素结合使用来加密

SOAP

主体。)

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

使用派生密钥令牌进行加密和签名主题描述了加密

SOAP

消息部分内容的另一种方法。

加密安全标头元素

与上一主题中显示的加密技术不同,加密

WS-Security

标头元素的过程要求您指定

<EncryptedData>

元素如何连接到相应的

<EncryptedKey>

元素。

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

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

请务必检查返回对象的类型,看它是否是

%SYS.X509Credential

的实例,如以编程方式检索凭据集中所述。

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

此方法生成一个对称密钥,返回

%XML.Security.EncryptedKey

的实例,该实例表示

<EncryptedKey> 

标头元素。此标头元素包含对称密钥,由给定凭证集中的公钥加密。

第二个参数指定此密钥是否加密

SOAP

主体(除了密钥的任何其他用途之外)。值

$$$SOAPWSEncryptNone

表示此密钥不会用于加密

SOAP

主体。如果省略此参数,则

SOAP

主体也会被加密。

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

a. 调用

%XML.Security.DataReference

Create()

类方法并提供加密数据实例作为参数。

b. 调用加密密钥实例的

AddReference()

方法并提供数据引用作为参数。

 set dataref=##class(%XML.Security.DataReference).Create(encdata)doenckey.AddReference(dataref)

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

如果此

<EncryptedKey>

也加密

SOAP

主体,它会自动在

<Body>

中包含对

<EncryptedData>

元素的引用。

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

a. 要包含的安全标头元素(而不是基于该元素

%XML.Security.EncryptedData

的实例)。

b. 加密密钥实例。第二个参数指定第一个参数指定的项的放置位置。如果参数为

A

B

,则

IRIS

确保

A

B

之后。指定此项以便收件人首先处理加密密钥,然后再处理依赖于它的加密安全标头元素。

do..SecurityOut.AddSecurityElement(userToken,enckey)
标签: 安全 前端 数据库

本文转载自: https://blog.csdn.net/yaoxin521123/article/details/142201232
版权归原作者 yaoxin521123 所有, 如有侵权,请联系我们删除。

“第二十三章 加密安全标头元素”的评论:

还没有评论