文章 姚 鑫 · 九月 30, 2024 2m read

第三十六章 结合加密和签名 - 使用对称密钥签名并加密

使用对称密钥签名并加密

签名然后加密(使用对称密钥时):

  1. 按照使用<DerivedKeyToken> 进行加密中的步骤进行操作。
  2. 按照使用<DerivedKeyToken> 进行签名中的步骤进行操作。

使用<DerivedKeyToken>元素

以下示例使用对称密钥进行签名和加密。它使用消息接收者的公钥创建一个 <EncryptedKey>元素,然后使用该元素生成两个 <DerivedKeyToken> 元素,一个用于签名,一个用于加密:

0
0 0
文章 姚 鑫 · 九月 29, 2024 3m read

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0
0 0
文章 姚 鑫 · 九月 26, 2024 2m read

第三十四章 使用派生密钥令牌进行加密和签名 - 使用 <DerivedKeyToken> 进行签名

要使用 <DerivedKeyToken>进行签名,请使用以下步骤:

  1. 如果想要签署任何安全标头元素,请创建这些安全标头元素。
  2. 创建 <DerivedKeyToken> 并将其添加到 WS-Security 标头,如创建和添加 <DerivedKeyToken> 中所述。

请注意,此步骤还会创建并添加 <DerivedKeyToken> 所基于的 <EncryptedKey> 元素。

  1. 根据派生的密钥令牌创建<Signature> 元素。为此,请调用 %XML.Security.SignatureCreate() 类方法。例如:
 set dsig=##class(%XML.Security.Signature).Create(dkt)

此方法返回 %XML.Security.Signature 的实例,该实例表示 <Signature> 标头元素。签名值通过 HMAC-SHA1 摘要算法计算,使用 <DerivedKeyToken> 隐含的对称密钥。

<Signature> 元素适用于消息的一组默认部分;可以指定一组不同的部分。

0
0 0
文章 姚 鑫 · 九月 25, 2024 1m read

第三十三章 使用派生密钥令牌进行加密和签名 - 使用 <DerivedKeyToken>

进行加密(一)

  1. 如果加密了任何安全标头元素,请将它们添加到 WS-Security 标头元素中。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。在这种情况下,需要两个参数:

a. 安全标头元素(而不是从中生成的的 %XML.Security.EncryptedData)。

b. 引用列表实例。第二个参数指定将第一个参数指定的项目放在何处。如果参数是 AB,则 IRIS 确保 AB 之后。指定此项以便收件人首先处理引用列表,然后再处理依赖于它的加密安全标头元素。

 do client.SecurityOut.AddSecurityElement(userToken,reflist)

如果仅加密了 SOAP 主体,系统会自动将 <EncryptedData> 元素作为 <Body>的子元素。

  1. 发送 SOAP 消息。请参阅添加安全标头元素中的一般注释。

例如,以下客户端代码对 SOAP 主体和 <UsernameToken>进行加密:

0
0 0
文章 姚 鑫 · 九月 24, 2024 2m read

第三十二章 使用派生密钥令牌进行加密和签名 - 使用 <DerivedKeyToken>

进行加密

要使用 <DerivedKeyToken> 进行加密,请使用以下步骤:

  1. 如果要加密一个或多个安全标头元素,请创建这些安全标头元素。.
  2. 创建 <DerivedKeyToken> 并将其添加到 WS-Security 标头,如创建和添加 <DerivedKeyToken> 中所述。

请注意,此步骤还会创建并添加 <EncryptedKey> 所基于的 <EncryptedKey> 元素。

  1. 对于要加密的每个元素,请根据该元素创建一个 <EncryptedData> 元素。为此,请调用 %XML.Security.EncryptedDataCreate() 类方法。在此过程中,请指定以下参数:

a. 派生密钥令牌 b. 要加密的项目。省略此参数可加密正文。 c. 指定 <EncryptedData> 元素如何引用 <DerivedKeyToken> 的宏。在此场景中,当前唯一支持的值是 $$$SOAPWSReferenceDerivedKey

例如,加密 <UsernameToken>

0
0 0
文章 姚 鑫 · 九月 23, 2024 2m read

第三十一章 使用派生密钥令牌进行加密和签名 - 变体:创建隐式 <DerivedKeyToken>

变体:创建隐式 <DerivedKeyToken>

还可以创建隐式 <DerivedKeyToken>,这是引用 <DerivedKeyToken> 的快捷方法。在此方法中:

  • 消息中不包含 <DerivedKeyToken>
  • 在使用 <DerivedKeyToken> 的元素中,<SecurityTokenReference> 元素指定 Nonce 属性,该属性包含用于 <DerivedKeyToken>nonce 值。这向消息接收者表明派生密钥令牌是隐含的,并且是从引用的令牌派生的。

要创建隐式 <DerivedKeyToken>,请使用前面描述的一般过程,但有两处更改:

  1. 对于派生的密钥令牌实例,将 Implied 属性设置为 1
 set dkt.Implied=1
  1. 请勿将 <DerivedKeyToken> 元素添加到 WS-Security 标头元素。

使用 <DerivedKeyToken> 的方式与将其包含在消息中的方式完全相同。

变体:引用 <EncryptedKey>SHA1 哈希

0
0 0
文章 姚 鑫 · 九月 22, 2024 3m read

第三十章 使用派生密钥令牌进行加密和签名

IRIS 支持 WS-SecureConversation 1.4 定义的 <DerivedKeyToken> 元素。可以创建并使用<DerivedKeyToken> 元素进行加密和签名,作为前三个主题中描述的方法的替代。

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

概述

<DerivedKeyToken> 元素旨在携带发送者和接收者可以独立使用的信息来生成相同的对称密钥。这些方可以使用该对称密钥对 SOAP 消息的指定部分进行加密、签名或同时执行这两种操作。

要生成和使用 <DerivedKeyToken>,请执行以下操作:

  1. 生成一个对称密钥以供临时使用。
  2. 使用要向其发送消息的实体的公钥来加密对称密钥。这将创建一个 <EncryptedKey>元素。

可以从该实体的请求消息中包含的 X.509 证书中获取公钥。或者可以提前获取它。

  1. 通过 P_SHA1 算法从原始对称密钥计算出一个新的对称密钥。

这将创建一个引用 <EncryptedKey> 元素的 <DerivedKeyToken> 元素。

  1. 使用新的对称密钥进行加密或签名。

对这些活动使用不同的对称密钥被认为是一种很好的做法,这样就可以减少用于分析的数据量。

0
0 0
文章 姚 鑫 · 九月 19, 2024 2m read

第二十九章 添加数字签名 - 指定 <KeyInfo> 的规范化方法

默认情况下,<KeyInfo> 元素使用Exclusive XML Canonicalization进行规范化,<KeyInfo> 元素包括以下内容:

<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">

要使用包容性 XML 规范化来规范化此元素,请执行以下操作:

 Set sig.SignedInfo.CanonicalizationMethod.Algorithm=$$$SOAPWSc14n

其中 sig%XML.Security.Signature 的实例。

在这种情况下, <KeyInfo> 包含以下内容:

<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">

添加签名确认

0
0 0
文章 姚 鑫 · 九月 18, 2024 2m read

第二十八章 添加数字签名 - 指定摘要方法

指定摘要方法

默认情况下,签名的摘要值是通过 SHA-1 算法计算的,安全标头中的 <Signature> 元素包含如下内容:

   <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
   <DigestValue>waSMFeYMruQn9XHx85HqunhMGIA=</DigestValue>

可以为签名指定不同的摘要方法。为此,调用 %XML.Security.Signature 实例的 SetDigestMethod() 方法。对于参数,请使用以下宏之一(包含在 %soap.inc 文件中):

  • $$$SOAPWSsha1 (the default)

-$$$SOAPWSsha256

  • $$$SOAPWSsha384

  • $$$SOAPWSsha512

 do sig.SetDigestMethod($$$SOAPWSsha256)

指定签名方法

默认情况下,签名值是通过 RSA-SHA256 算法计算的,安全标头中的 <Signature> 元素包含如下内容:

0
0 0
文章 姚 鑫 · 九月 17, 2024 2m read

第二十七章 添加数字签名 - 变体:使用签名的 SAML 断言

要添加在签名的 SAML 断言中使用证书的数字签名,请执行以下操作:

  1. 可选择包含 %soap.inc 包含文件,它定义了可能需要使用的宏。
  2. 如果要对任何安全标头元素进行签名,请创建这些安全标头元素。例如:
 set utoken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
  1. 使用 Holder-of-key 方法的<SubjectConfirmation> 元素创建签名的 SAML 断言。请参阅创建和添加 SAML 令牌。
  2. 创建 <Signature> 元素。创建时,使用已签名的 SAML 断言作为 CreateX509() 类方法的第一个参数。例如:
 set signature=##class(%XML.Security.EncryptedKey).CreateX509(signedassertion)
  1. 将数字签名添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于参数,请指定上一步中创建的签名对象。例如:
 do ..SecurityOut.AddSecurityElement(dsig)
0
0 0
文章 姚 鑫 · 九月 15, 2024 4m read

第二十六章 添加数字签名 - 示例

示例

此示例显示了对其响应消息进行签名的 Web 服务。

为了使此示例在自己的环境中运行,请首先执行以下操作:

  • 为服务器创建证书。
  • 将此证书加载到服务器端的 IRIS 中,创建名为 servercred 的凭证。执行此操作时,还要加载私钥文件并提供其密码(这样 Web 服务在签署其响应消息时就不必提供该密码。)

Web 服务指的是具有此确切名称的 IRIS 凭证集。

0
0 0
文章 姚 鑫 · 九月 14, 2024 4m read

第二十五章 添加数字签名

本主题介绍如何向 IRIS Web 服务和 Web 客户端发送的 SOAP 消息添加数字签名。

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

主题使用派生密钥令牌进行加密和签名描述了向 SOAP 消息添加数字签名的另一种方法。

数字签名概述

可以使用数字签名来检测消息是否被篡改,或者简单地验证消息的某一部分是否确实由所列实体生成。与传统的手工签名一样,数字签名是对文档的附加,只有文档的创建者才能创建,并且不容易伪造。

IRISSOAP 消息的数字签名的支持基于 WS-Security1.1。反过来,WS-Security 遵循 XML 签名规范。根据后者的规范,要对 XML 文档进行签名:

  1. 使用摘要函数来计算文档一个或多个部分的哈希值。
  2. 将摘要值连接起来。
  3. 使用私钥加密串联摘要。(这是只有才能执行的计算。)
  4. 创建 <Signature> 元素,其中包含以下信息:
  • 对已签名部分的引用(以表明该签名适用于消息的哪些部分)。
  • 加密的摘要值。
  • 使接收者能够识别用于解密加密摘要值的公钥的信息。
0
0 0
文章 姚 鑫 · 九月 12, 2024 3m read

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

本主题介绍如何加密 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的实例,如以编程方式检索凭据集中所述。

0
0 0
文章 姚 鑫 · 九月 11, 2024 3m read

第二十二章 加密 SOAP 主体 - 变体:使用签名的 SAML 断言

要使用签名的 SAML 断言中的证书中包含的公钥进行加密,请执行以下操作:

  1. 跳过前面步骤中的步骤 1–4
  2. 使用 Holder-of-key 方法的 <SubjectConfirmation>元素创建签名的 SAML 断言。请参阅创建和添加 SAML 令牌。
  3. 创建 <EncryptedKey> 元素。执行此操作时,使用签名的 SAML 断言作为 CreateX509() 类方法的第一个参数。例如:
 set enckey=##class(%XML.Security.EncryptedKey).CreateX509(signedassertion)
  1. 继续前面步骤中的步骤5。

消息加密示例

在此示例中,Web 客户端(未显示)发送签名的请求消息,而 Web 服务发送加密响应。

Web 服务从请求消息签名中的客户端证书中获取公钥,并使用该公钥在其响应中添加一个加密的 <EncryptedKey> 元素。 <EncryptedKey> 元素使用客户端的公钥加密,它包含用于加密响应消息正文的对称密钥。

Web服务如下:

0
0 0
文章 姚 鑫 · 九月 10, 2024 3m read

第二十一章 加密 SOAP 主体 - 变体:使用可识别证书的信息

<BinarySecurityToken> 包含序列化、base-64 编码格式的证书。可以忽略此令牌,而改用标识证书的信息;接收方使用此信息从相应位置检索证书。为此,请使用上述步骤,并进行以下更改:

  • 跳过步骤 34。也就是说,不要添加 <BinarySecurityToken>
  • 在步骤 5(创建加密密钥)中,使用步骤 1 中设置的凭据(而不是二进制安全令牌)作为 CreateX509() 的第一个参数。例如:
 set enckey=##class(%XML.Security.EncryptedKey).CreateX509(credset,,referenceOption)

对于第三个参数(referenceOption),可以指定<Signature> 元素如何使用证书。

如果指定一个凭据集作为第一个参数(正如我们在此变体中所做的那样),则referenceOption的默认值为$$$SOAPWSReferenceThumbprint。 可以选择指定一个值,如本节所述。 可以使用除$$$SOAPWSReferenceDirect之外的任何值。

X.509 证书的参考选项

WS-Security 标头简介部分介绍了在 SOAP 消息中使用证书的一种方法。在该示例中,数字签名由两个标头元素组成:

0
0 0
文章 姚 鑫 · 九月 9, 2024 2m read

第十七章 手动添加安全元素

本主题主要介绍如何手动向 IRIS Web 服务和 IRIS Web 客户端发送的消息中添加安全元素。

以下主题提供了有关特定安全任务的详细信息。

添加安全标头元素

要将安全元素添加到 WS-Security 标头元素,请在 Web 客户端或 Web 服务中使用以下常规过程:

  1. 创建适用类的实例。为此,可以使用名为 Create()CreateX509() 的方法(具体取决于类)。该实例表示 WS-Security 标头元素之一,例如 <Username> or <EncryptedKey>
  2. 通过更新 Web 客户端或 Web 服务的 SecurityOut 属性,将每个实例添加到 WS-Security 标头元素。为此,请调用 AddSecurityElement() 方法。
  3. 发送 SOAP 消息。WS-Security 标头包含在消息中,并包含添加到其中的元素。
  4. 对于后续传出消息:
  • 对于 Web 客户端,SecurityOut 属性保持不变,以便此实例的后续出站消息包含添加的安全标头。如果不希望这样,请将 SecurityOut 属性设置为 null
  • 对于 Web 服务,在第一个出站 SOAP 消息之后,SecurityOut属性会自动设置为null`。

标题元素的顺序

0
0 0
文章 姚 鑫 · 九月 8, 2024 3m read

第二十章 加密 SOAP 主体

本主题介绍如何加密 IRIS Web 服务和 Web 客户端发送的 SOAP 消息正文。

主题“加密安全标头元素”和“使用派生密钥令牌进行加密和签名”描述了如何加密安全标头元素以及加密 SOAP 主体的其他方法。

加密概述

IRISSOAP 消息加密的支持基于 WS-Security1.1。反过来,WS-Security 遵循 XML 加密规范。根据后者规范,要加密 XML 文档:

  1. 生成一个对称密钥以供临时使用。
  2. 可以使用它来加密文档(或文档的选定部分)。

使用包含内容加密版本的 <EncryptedData> 元素替换文档的这些部分。

  1. 使用要向其发送文档的实体的公钥加密对称密钥。

可以从该实体的请求消息中包含的 X.509 证书中获取公钥。或者可以提前获取它。

  1. 在同一文档中的 <EncryptedKey> 元素中包含加密的对称密钥。 <EncryptedKey> 元素直接或间接地提供信息,使接收者能够确定用于解密此元素的密钥。

此信息可以包含在 <EncryptedKey> 元素中,或者 <EncryptedKey> 元素可以包含对包含 X.509 证书或签名的 SAML 断言的二进制安全令牌的直接引用。在后一种情况下,必须在添加 <Signature>元素之前将安全令牌添加到消息中。

0
0 0
文章 姚 鑫 · 九月 7, 2024 2m read

第十九章 添加时间戳和用户名令牌 - 时间戳和用户名令牌示例

时间戳和用户名令牌示例

此示例显示了一个需要密码验证的 Web 服务,以及一个在其请求消息中发送时间戳和用户名令牌的 Web 客户端。

注意:此示例以明文形式发送用户名和密码。

为了使此示例在自己的环境中运行,请首先执行以下操作:

  • 对于 Web 服务所属的 Web 应用程序,将该应用程序配置为仅支持密码验证:
  1. 从管理门户主页,选择系统管理 > 安全 > 应用程序 > Web 应用程序。
  2. 选择 Web 应用程序。
  3. 仅选择密码选项,然后选择保存。
  • 如果不使用默认设置,请编辑客户端以使用适当的 IRIS 用户名和密码。

Web服务如下:

0
0 0
文章 姚 鑫 · 九月 6, 2024 3m read

第十八章 添加时间戳和用户名令牌

本主题讨论时间戳和用户令牌。

概述

时间戳是 WS-Security 标头中的 <Timestamp> 安全元素。严格来说,时间戳不是安全元素。但是,可以使用它来避免重放攻击。时间戳对于自定义日志记录也很有用。

用户名令牌是 WS-Security 标头中的 <UsernameToken> 安全元素;它带有用户名。它还可以带有相应的密码(可选为摘要形式)。通常使用它进行身份验证,即允许 IRIS Web 客户端使用需要密码的 Web 服务。

注意:默认情况下,WS-Security 标头元素以明文形式发送。要保护 <UsernameToken> 中的密码,应该使用 SSL/TLS、加密 <UsernameToken>(如其他地方所述),或者使用这些技术的某种组合。

添加时间戳

要将时间戳添加到 WS-Security 标头元素,请在 Web 客户端或 Web 服务中执行以下操作:

  1. 调用 %SOAP.Security.Timestamp的 Create() 类方法。此方法需要一个可选参数(以秒为单位的过期间隔)。默认过期间隔为 300 秒。例如:
 set ts=##class(%SOAP.Security.Timestamp).Create()
0
0 0
文章 姚 鑫 · 九月 3, 2024 2m read

第十四章 WS-Policy 配置类详细信息 - 配置 XData 块的详细信息(一)

配置 XData 块的详细信息

本节介绍 Web 服务或客户端配置类的 XData 块的内容。

<configuration>, <service>, <method>, <request>, and <response>元素都必须位于以下命名空间中:

"http://www.intersystems.com/configuration"

在本主题中,前缀 cfg 指的是该命名空间。

<configuration>

<configuration> 元素是 XData 块中的根元素。此元素包括以下项目:

Attribute or ElementPurpose
name(可选)此配置的名称。如果指定,则必须与 XData 块的名称匹配。
<service>(可选)将策略与 IRIS Web 服务或 Web 客户端关联。

<service>

<service> 元素将策略与 IRIS Web 服务或 Web 客户端关联。此元素包括以下项目:

0
0 0
文章 姚 鑫 · 九月 2, 2024 1m read

第十三章 WS-Policy 配置类详细信息 - 添加扩展属性

添加扩展属性

除了 cfg:wsdlElement 属性(前面讨论过)之外,可能还需要在策略元素中的以下元素中添加扩展属性:

  • <sp:X509Token> (在 <sp:InitiatorToken> or <sp:RecipientToken> 内)

    在此元素中,为 cfg:FindFieldcfg:FindValue 属性指定一个值,这些值指定用于此令牌的 IRIS 凭证集。

    • cfg:FindField 属性指定要搜索的字段的名称。通常为 Alias
    • cfg:FindValue 属性指定该字段的值。如果 cfg:FindFieldAlias,则这是 IRIS 凭证集的名称。

例如:

<sp:X509Token IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never" 
              cfg:FindField="Alias" 
              cfg:FindValue="servercred">
  <wsp:Policy>
    <sp:WssX509V3Token11/>
  </wsp:Policy>
</sp:X509Token>
0
0 0
文章 姚 鑫 · 九月 1, 2024 1m read

第十二章 WS-Policy 配置类详细信息 - 配置类基础知识

作为参考,本主题包含有关 IRIS 用于存储 WS-Policy 信息的配置类的详细信息。

配置类基础知识

要手动创建 WS-Policy 配置类,请创建 %SOAP.Configuration 的子类。在此类中,添加 XData 块,如下所示:

XData service
{
<cfg:configuration xmlns:cfg="http://www.intersystems.com/configuration" name="service">
...

XData 块具有以下一般结构:

XData service
{
<cfg:configuration ...>
   <service ...>
      <method ...>
         <request ...>
         <response ...>
...

<service>, <method>, <request>, and <response> 元素均可包含适用于该级别的策略信息。<service> 元素是必需的,但其他元素是可选的。

0
0 0
文章 姚 鑫 · 八月 29, 2024 2m read

第十一章 创建和使用策略 - 在运行时指定策略

在运行时指定策略

对于 IRIS Web 客户端,可以指定运行时要使用的策略;这将覆盖任何策略配置类。要在运行时指定策略,请设置 Web 客户端实例的 PolicyConfiguration 属性。该值必须具有以下形式:

Configuration class name:Configuration name

其中,配置类名称是策略配置类的完整包和类名,如本主题前面所述,配置名称是该类中策略的 <configuration> 元素的 name 属性的值

抑制不支持的策略的编译错误

默认情况下,当编译配置类时,如果配置包含 IRIS 不支持的任何策略表达式, IRIS 会发出错误。要避免此类错误,请在配置类中包含以下内容:

Parameter REPORTANYERROR=0;

当从 WSDL 生成 Web 客户端或 Web 服务时,如果 IRIS 还生成配置类,则会将此参数设置包含在该类中。

只要有一个受支持的策略替代方案,就可以忽略不受支持的替代方案。

编辑生成的策略

如果从 WSDL 生成配置类,并且 WSDL 位于 IRIS 此实例的外部,则必须编辑配置类以包含有关要使用的证书和 SSL/TLS 配置的信息。或者可以在运行时指定此信息。

下表给出了详细信息:

0
0 0
文章 姚 鑫 · 八月 28, 2024 2m read

第十章 创建和使用策略 - 在运行时添加证书

在运行时添加证书

如果 Web 服务或客户端必须以编程方式选择并包含证书,请使用以下过程:

  1. 检索 %SYS.X509Credentials 的实例,如以编程方式检索凭据集中所述。

例如:

 set credset=##class(%SYS.X509Credentials).GetByAlias(alias,password)

 set credset=..SecurityIn.Signature.X509Credentials 
  1. 创建 %SOAP.Security.BinarySecurityToken 实例,其中包含来自该凭证集的证书。例如:
 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)

其中 credentials 是在上一步中检索到的凭证集。

这将返回一个代表 <BinarySecurityToken> 元素的对象,该元素以序列化的 base-64 编码形式携带证书。

  1. 调用Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于方法参数,请使用之前创建的二进制安全令牌。例如:
 do ..SecurityOut.AddSecurityElement(bst)
0
0 0
文章 姚 鑫 · 八月 28, 2024 2m read

第九章 创建和使用策略 - 创建并附加策略

创建并附加策略

要创建策略并将其附加到Web 服务或客户端,请创建并编译配置类。有多种方法可以创建此类:

  • 使用 GeneratePolicyFromWSDL() 方法从 WSDL 生成配置类。如果 Web 服务或客户端类已存在,并且您不想重新生成,则适用此选项。
  • 为现有的 Web 服务或客户端手动创建配置类。

如果从 WSDL 生成策略类,则可能需要按下一节所述对其进行编辑。

WSDL 生成策略

在某些情况下,可能已经有客户端类,但没有相应的配置类。例如,如果从 WSDL 生成客户端类,而 WSDL 后来被修改为包含 WS-Policy 信息,则可能会发生这种情况。在这种情况下,可以使用 %SOAP.WSDL.Reader中的实用程序方法单独生成配置类,如下所示:

  1. 创建 %SOAP.WSDL.Reader 的实例。
  2. 根据需要设置该实例的属性。请参阅 %SOAP.WSDL.Reader 类文档。

不要使用 Process() 方法。

  1. 调用实例的 GeneratePolicyFromWSDL() 方法。

此方法具有以下签名:

0
0 0
文章 姚 鑫 · 八月 26, 2024 3m read

第八章 创建和使用策略

本主题介绍如何在 IRIS 中使用 WS-Policy 支持。WS-Policy 使您能够指定要使用或预期的 WS-Security 标头。它还使能够指定 WS-Addressing 标头和 MTOM 的使用(在创建 Web 服务和 Web 客户端中描述)。可以在单独的类中创建策略,而不是直接编辑 Web 服务或 Web 客户端。在大多数情况下,不需要进行低级编程。

概述

IRIS 中,Web 服务或客户端的策略(或策略集合)包含在单独的配置类中,即 %SOAP.Configuration的子类。编译该类时,策略生效。

通常不需要编码。但是,在某些情况下,可以通过编程指定详细信息,而不是将该元素硬编码到策略中。

配置类的作用

当编译配置类时,Web 服务或客户端的未来操作将受到如下影响:

  • Web 服务或客户端根据策略的详细信息在出站消息中包含额外的标头元素。
  • Web 服务或客户端根据策略验证传入的 SOAP 消息。这包括在适当的情况下解密传入的消息。
  • 如果合适,Web 服务或客户端可以选择加密传出消息。
  • 对于 Web 服务,WSDL 会自动受到影响。具体来说,会添加 <wsp:Policy> 元素,并且命名空间声明包括以下内容:
xmlns:wsp="http://www.w3.org/ns/ws-policy"
0
0 0
文章 姚 鑫 · 八月 25, 2024 2m read

第七章 设置和其他常见活动 - 从入站消息中检索证书

从入站消息中检索证书

如果收到已进行数字签名的 SOAP 消息,则相关证书可在 %SYS.X509Credentials 的实例中找到。可以检索该证书。操作方法如下:

  1. 首先通过 Web 服务或 Web 客户端的 SecurityIn 属性访问 WS-Security 标头元素。这将返回 %SOAP.Security.Header 的实例。
  2. 然后执行以下操作之一:
  • 在实例中访问 %SOAP.Security.HeaderSignature 属性,该属性引用安全标头元素中的第一个 <Signature> 元素。
  • 在实例中使用 %SOAP.Security.HeaderFindElement() 方法访问实例中 %SOAP.Security.Header的第一个 <Signature> 元素。

无论哪种情况,结果都是在包含数字签名的 %XML.Security.Signature 实例。

  1. 访问签名对象的 X509Credentials 属性。
  2. 检查返回对象的类型,看它是否是 %SYS.X509Credentials 的实例。
 if $CLASSNAME(credset)'="%SYS.X509Credentials" {set credset=""}
0
0 0