文章 姚 鑫 · 十月 22, 2024 1m read

第五十三章 安全元素的详细信息 - 详情

的目的是携带可由消息接收者验证的数字签名。可以使用数字签名来检测消息更改,或者只是验证消息的某个部分是否确实由列出的实体生成。与传统的手写签名一样,数字签名是对文档的附加,只能由文档的创建者创建,并且不易伪造。

以下显示了部分示例:

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
   <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
      </CanonicalizationMethod>
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256"></SignatureMethod>
      <Reference URI="#Timestamp-48CEE53E-E6C3-456C-9214-B7D533B2663F">
         <Transforms>
            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
         </Transforms>
         <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
         <DigestValue>waSMFeYMruQn9XHx85HqunhMGIA=</DigestValue>
      </Reference>
      <Reference URI="#Body-73F08A5C-0FFD-4FE9-AC15-254423DBA6A2">
         <Transforms>
            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
         </Transforms>
         <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
         <DigestValue>wDCqAzy5bLKKF+Rt0+YV/gxTQws=</DigestValue>
      </Reference>
   </SignedInfo>
   <SignatureValue>j6vtht/[parts omitted]trCQ==</SignatureValue>
   <KeyInfo>
      <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <Reference URI="#SecurityToken-411A262D-990E-49F3-8D12-7D7E56E15081" 
                    ValueType="[parts omitted]oasis-200401-wss-x509-token-profile-1.0#X509v3">
         </Reference>
      </SecurityTokenReference>
   </KeyInfo>
</Signature>
0
0 121
文章 姚 鑫 · 十月 21, 2024 1m read

第五十二章 安全元素的详细信息 - 详情

的作用是携带加密数据,部分示例如下:

<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" 
               Id="Enc-143BBBAA-B75D-49EB-86AC-B414D818109F" 
               Type="http://www.w3.org/2001/04/xmlenc#Content">
   <EncryptionMethod Algorithm="[parts omitted]#aes128-cbc"></EncryptionMethod>
   <CipherData>
      <CipherValue>MLwR6hvKE0gon[parts omitted]8njiQ==</CipherValue>
   </CipherData>
</EncryptedData>

详情

该元素的各部分如下:

  • Id 是元素的唯一标识符。 IRIS 会自动生成此标识符。
  • 表示用于加密该数据的算法。
  • 携带加密数据,作为 元素中的值。在此示例中,值 MLwR6hvKE0gon[parts divided]8njiQ== 为加密数据。
  • (未包含在示例中 标识对称密钥。
0
0 91
文章 姚 鑫 · 十月 20, 2024 2m read

第五十一章 安全元素的详细信息 - 详情

详情

该元素的各部分如下:

  • 表示用于加密对称密钥的算法。

IRIS 中,可以指定密钥传输算法(由 的 Algorithm 属性显示)。请参阅指定密钥传输算法。

  • 标识用于加密此对称密钥的密钥。在 IRIS 中, 包含 ,其具有以下形式之一:
    • WS-Security 标头中较早位置的 的引用,如前面的示例所示。
    • 用于唯一标识证书的信息,该证书可能是邮件收件人所拥有的。例如, 可以包含证书的 指纹,如下所示:

在这两种情况下,相应的公钥都用于加密此 元素中携带的对称密钥。

如果加密使用顶级 元素,则省略此元素;请参阅 。

  • 携带加密后的对称密钥,作元素中的值。本例中的值 WtE[parts divided]bSyvg== 即为加密后的对称密钥。
  • 表示此消息中使用此 元素中携带的对称密钥加密的部分或多个部分。具体而言, 的 URI 属性指向消息中其他地方的 元素的 Id 属性。

根据使用的技术,可能不包含此元素。可以通过顶级 元素链接 和相应的 ;请参阅 。

消息中的位置

<EncryptedKey> 元素应包含在 <Security> 中,位于其使用的任何 <BinarySecurityToken> 之后,以及引用它的所有 <EncryptedData> 和 <DerivedKeyToken> 元素之前。

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

第五十章 安全元素的详细信息

本主题讨论 SOAP 消息中较常见的安全元素,特别是 IRIS Web 服务和客户端可以发送的变体。此信息旨在帮助那些不经常使用 SOAP 的人重温记忆。此处的详细信息也可能有助于故障排除。

的目的是携带消息中其他元素使用的安全凭证,供消息接收者使用。安全凭证以序列化、编码的形式携带。以下显示了部分示例:

<BinarySecurityToken wsu:Id="SecurityToken-4EC1997A-AD6B-48E3-9E91-8D50C8EA3B53" 
                     EncodingType="[parts omitted]#Base64Binary" 
                     ValueType="[parts omitted]#X509v3">
             MIICnDCCAYQ[parts omitted]ngHKNhh
</BinarySecurityToken>

详细

该元素的各部分如下:

  • Id 是此令牌的唯一标识符,包含该标识符以便此消息中的其他元素可以引用此令牌。如有必要, IRIS 会自动生成此标识符。
  • EncodingType 表示用于生成 <`BinarySecurityToken>IRIS中使用的唯一编码是base-64` 编码。
0
0 92
文章 姚 鑫 · 十月 16, 2024 1m read

第四十九章 解决安全问题 - 可能出现的错误

可能出现的错误

本节讨论 IRIS Web 服务和 Web 客户端中可能出现的与安全相关的错误:

  • 如果刚刚生成了 IRIS Web 服务或客户端,则可能尚未配置为识别 WS-Security 标头。在这种情况下,当您尝试执行 Web 方法时,会收到如下一般错误:
<ZSOAP>zInvokeClient+269^%SOAP.WebClient.1

将以下内容添加到Web服务或客户端并重新编译:

Parameter SECURITYIN="REQUIRE";

这种一般错误也可能是由于错误地调用 方法(例如,在 Web 方法没有返回值时引用返回值)造成的。

如果使用 ,则此项不适用。

  • 在其他情况下,当您尝试执行 方法时,可能会收到以下安全错误:
ERROR #6454: No supported policy alternative in configuration 
Policy.Client.Demo1SoapConfig:service
  • 入站消息可能未通过验证。如果是这样, 日志会指出这一点。例如:
0
0 136
文章 姚 鑫 · 十月 15, 2024 2m read

第四十八章 解决安全问题

本主题提供信息来帮助识别 IRISSOAP 安全问题的原因。

有关与安全无关的问题的信息,请参阅 IRIS 中的 问题故障排除。

故障排除所需的信息

要解决 SOAP 问题,通常需要以下信息:

  • WSDL 及其引用的所有外部文档。
  • (在出现与消息相关的问题的情况下)某种形式的消息记录或跟踪。有以下选择:
Option Usable with SSL/TLS? Shows HTTP headers? Comments
IRIS SOAP log Yes No 对于安全错误,此日志显示的详细信息比 SOAP 故障中包含的更多。
Web Gateway trace Yes Yes 对于使用 MTOM(MIME 附件)的 SOAP 消息问题,查看 HTTP 标头至关重要。
Third-party tracing tools No Depends on the tool 一些跟踪工具还显示较低级别的详细信息,例如实际发送的数据包,这在进行故障排除时至关重要。

发生安全错误时要检查的项目

这 中的 SOAP 问题故障排除中进行了讨论。

  • 在极少数情况下, SOAP 客户端会使用 `HTTP 身份验证,请注意,可以启用身份验证的日志记录;请参阅提供登录凭据。

正确处理故障也非常有用,这样就可以收到最好的信息。请参阅

0
0 95
文章 姚 鑫 · 十月 14, 2024 2m read

第四十七章 创建和添加 SAML 令牌 -

要添加带有 (其中包含 元素)的 ,请执行以下操作:

  1. 按照以编程方式检索凭证集中所述,创建 %SYS.X509Credentials 的实例。

或者使用与签署断言时使用的相同凭证集。

  1. 设置 SAML 断言对象的 Subject 属性的 NameID 属性。
  2. 调用 断言对象的 属性的 AddEncryptedKeyConfirmation() 方法。
method AddEncryptedKeyConfirmation(credentials As %X509.Credentials) as %Status

对于参数,请使用之前创建的 %SYS.X509Credentials实例。

BinarySecret 作为密钥持有者

要添加以 作为 Holder-of-key 的 ,请执行以下操作:

  1. 签署 SAML 断言时,请按如下方式创建签名:

其中断言是 SAML 断言。请注意,在此场景中使用 方法。 引用选项创建对 断言的引用。

  1. 创建 。为此,请调用 的 Create() 方法:
set binsec=##class(%SOAP.WST.BinarySecret).Create()
  1. 调用 断言对象的 属性的 方法:

对于 ,请使用在上一步中创建的 。

0
0 104
公告 Claire Zheng · 十月 13, 2024

开发者社区的成员,大家好!

我们都喜欢编码,但我们应该时不时地放下代码去锻炼身体! InterSystems 步行挑战将帮助您恢复精力、增强体质。 历史悠久的 Salt Road 在几个世纪以前连接起欧洲,沿着这条传奇的贸易路线,踏上从吕贝克到吕讷堡的虚拟赛道。

赢取跑步机、智能手表和奖牌等精美礼品。

👟🚶🧑‍🦼系紧鞋带,放下工作,更好地编码! 🔋💻💪

📅日期:9 月 23 日 - 10 月 20 日(可能有变动)

想加入吗? 详细信息如下。

0
0 205
文章 姚 鑫 · 十月 13, 2024 2m read

第四十六章 创建和添加 SAML 令牌 - 使用方法 Holder-of-key

添加元素

要将 元素添加到 %SAML.Assertion 实例,执行以下操作:

  1. 创建 %SAML.Subject 的新实例。
  2. 根据需要设置主题的属性。
  3. 将断言对象的 Subject 属性设置为等于此实例。

添加 元素

要将 元素添加到的 %SAML.Assertion 实例,请使用以下某个小节中的步骤。

使用方法 Holder-of-key

要使用 Holder-of-key 方法添加 ,请执行以下操作:

  1. 按照以编程方式检索凭证集中所述,创建 %SYS.X509Credentials 的实例。

或者使用与签署断言时使用的相同凭证集。

  1. 可以选择创建并添加包含与给定凭据集关联的证书的二进制安全令牌。

要创建令牌,调用 的 类方法。例如:

 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)

其中 是在上一步中创建的凭证集。

要将此令牌添加到 WS-Security 标头元素,请调用 客户端或 Web 服务的 属性的 方法。

0
0 91
文章 姚 鑫 · 十月 11, 2024 2m read

第四十五章 创建和添加 SAML 令牌 - 变体:不使用

变体:不使用

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

  • 跳过步骤 23。也就是说,不要创建和添加 .。
  • 在步骤 中,使用凭证集(而不是二进制安全令牌)作为 的第一个参数。例如:
 set assertion=##class(%SAML.Assertion).CreateX509(credset,referenceOption)

对于 referenceOption,可选择指定一个值,如 X.509 凭证的参考选项中所述。可以使用除 $$$SOAPWSReferenceDirect 之外的任意值。

如果指定凭证集作为第一个参数(正如我们在这个变体中所做的那样),则默认引用选项是证书的指纹。

变体:创建未签名的 SAML 断言

要创建未签名的 断言,请使用上述步骤,并进行以下更改:

  • 跳过步骤 1、 和 。也就是说,不要创建和添加 .。
  • 对于步骤 ,请使用 方法而不是 CreateX509()。此方法不带参数。例如:
 set assertion=##class(%SAML.Assertion).Create()

此方法返回 的一个实例。 会自动设置此实例的 和 属性。S 属性为空。

0
0 94
公告 Claire Zheng · 十月 10, 2024

各位社区成员,大家好

Global Masters 已开启!
使用 InterSystems SSO 登录
使用 >> [此链接] << 访问平台,并使用您的 InterSystems SSO 登录。
请注意,在最近的测试中,我们发现一些用户在尝试通过这种方式登录时会遇到错误。 我们目前正在与供应商共同调查问题原因。 如果您遇到此类错误,请通过私信联系我,我将向您发送手动邀请!
测试版免责声明

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

第四十四章 创建和添加 SAML 令牌

本主题描述如何将SAML 令牌添加到 WS-Security 标头元素。

另请参阅 %SAML.Assertion 的类参考和相关类。

未实现完整的 支持。 IRIS 中的 SAML 支持仅指 中的 支持中列出的详细信息。

概述

借助 支持,可以将 令牌添加到 标头元素。

可以选择将此 令牌用作签名或加密的密钥材料。如果这样做, 将遵循 令牌配置文件规范。密钥材料来自 断言的 <SubjectConfirmation> 元素(带有 方法)和 <SubjectConfirmationData> 或 <KeyInfoConfirmationData>(带有 <KeyInfo> 子元素)。

或者,可以使用 方法添加 <SubjectConfirmation>;在这种情况下,主题不包含密钥。为了保护这种情况下断言,建议您添加从消息签名到 令牌的安全令牌引用。

基本步骤

要创建 SAML 令牌并将其添加到出站 消息,可以使用此处的基本过程或小节中描述的变体。

  1. 可选择包含 %soap.inc 包含文件,它定义了可能需要使用的宏。
  2. 创建 %SYS.X509Credentials 的实例,如以编程方式检索凭据集中所述。

此 凭证集必须包含自己的证书。例如:

 Set x509alias = "servercred" 
 Set pwd = "mypassword" 
 Set credset = ##class(%SYS.X509Credentials).GetByAlias(x509alias,pwd)
0
0 102
文章 Nicky Zhu · 十月 10, 2024 7m read

本演示程序用于展示如何采用自定义FHIR profile来验证数据合规性。自定义FHIR实施指南基于FHIR R4版本开发,在本例中实现了对Organization资源的扩展并用于验证数据的合规性。

安装

  1. 通过Git clone下载本项目。
  2. 执行docker-compose up -d构建并启动容器,初次执行时需执行需10~15分钟(视配置变化)。将构建InterSystems IRIS for Health镜像,安装FHIR服务器,导入自定义FHIR规范,使自定义FHIR 规范可用于验证数据。
  3. 在Postman中导入TestCases中的测试用例文件,查看各类FHIR约束的测试效果
  4. 容器启动后可查看自定义IG内容

项目代码结构

FHIRValidation
├─ ExampleIG                        
│  ├─ ig.ini
│  ├─ input
│  │  ├─ fsh
│  │  │  ├─ alias.fsh
│  │  │  ├─ codesystems.fsh
│  │  │  ├─ organization.fsh
│  │  │  └─ valuesets.fsh
│  │  └─ pagecontent
│  │     └─ index.md
│  └─ sushi-config.yaml
├─ README.md
├─ README_zh.md
├─ TestCases
│  └─ FHIR Profile-based Validation  testcases.postman_collection.json
├─ docker-compose.yml
└─ image-iris
   ├─ Dockerfile
   └─ src
      ├─ FullIG
      ├─ IGPackages
      │  ├─ hl7.fhir.uv.extensions.r4#5.1.0.tgz
      │  ├─ hl7.terminology.r4#6.0.2.tgz
      │  └─ package.tgz
      └─ init
         └─ init.sh

0
0 346
文章 姚 鑫 · 十月 9, 2024 3m read

第四十三章 使用 WS-ReliableMessaging - 对 WS-ReliableMessaging 标头进行签名

WS-ReliableMessaging 标头进行签名

可以通过以下任一方式签署 WS-ReliableMessaging 标头。

使用 SecurityContextToken 对标头进行签名

如果还使用 WS-SecureConversation,则 Web 客户端的 SecurityContextToken 属性包含一个对称密钥,可以使用该密钥对 标头元素进行签名。为此,请在调用 实例的 方法,并将 属性作为参数传递:

 do createsequence.AddSTR(client.SecurityContextToken)

在调用 之前执行此操作。

签署消息时签署标头

还可以使用与签署消息其余部分相同的方式签署 标头。为此,在调用 的 或 方法时,将值 添加到 参数。 宏包含在 文件中。

修改 服务以支持

要修改 服务以支持 ,请修改 方法以便它们执行以下操作:

  • 验证入站请求消息是否包含 WS-ReliableMessaging 标头。
  • 验证 WS-ReliableMessaging 标头是否已签名。

请注意 会自动检查任何签名是否有效。请参阅验证和解密入站消息。

  • 可选择指定 服务类的参数来微调
0
0 78
文章 Jingwei Wang · 十月 9, 2024 2m read

Foreign Table 的概念

Foreign Table 是 IRIS SQL 中一种特殊类型的表。它不代表 IRIS 本地全局管理的数据,而是投射出来的,由 “外部服务器 ”管理的外部数据。从 SQL 的角度来看,外部表与普通表一样,可以在查询中使用,没有任何特定限制。

在数据编织中可以帮助整合不同的来源的数据,以支持各种应用、分析并提供智能洞察力。

Foreign Table 和 Linked Table 的区别

Linked Table

  • Lined Table 不能读取外部文件
  • 对于 JDBC 和 ODBC 的数据源是分开的

Foreign Table

  • 可以读取外部文件
  • 不局限于同一类型的数据源

Foreign Table 的用例

  • 当某个数据集时由外部应用程序在外部数据库中管理,而你的 IRIS 查询需要在该外部数据集中查找某些内容时,您可以使用某种 ETL 流程将数据加载到 IRIS 中,但如果外部数据经常更新,而你的查询需要访问当前的版本,那么这个过程可能会变得很棘手。可以通过 Foreign Table 将数据投射到 IRIS 并在查询时从外部源检索当前数据来解决这个问题。
  • 当您要使用某些基于文件的大型数据集,您只需要偶尔查询一下,用来建立报告或训练模型。
0
0 171
文章 姚 鑫 · 十月 8, 2024 2m read

第四十二章 使用 WS-ReliableMessaging

IRIS 支持 WS-ReliableMessaging 规范的部分内容,如简介中所述。此规范提供了一种按顺序可靠地传递一系列消息的机制。本页介绍如何手动使用可靠消息传递。

Web 客户端发送一系列消息

要将一系列消息从 客户端可靠地发送到支持 WS-ReliableMessagingWeb 服务,请执行以下操作:

  1. 根据需要指定 Web 客户端的安全标头元素。

如果正在使用 ,请启动安全对话。

  1. 调用 %SOAP.RM.CreateSequenceCreate() 类方法。这将返回该类的一个实例。

此方法具有以下签名:

classmethod Create(addressingNamespace As %String, 
                   oneWay As %Boolean = 0, 
                   retryInterval As %Float = 1.0, 
                   maxRetryCount As %Integer = 8, 
                   expires As %xsd.duration, 
                   SSLSecurity As %Boolean = 0) as %SOAP.RM.CreateSequence
0
0 95
文章 Louis Lu · 十月 8, 2024 5m read

挑战

在使用FHIR进行开发的过程中,我们会面对海量的FHIR规范中定义的数据结构,具体来说在FHIR规范中定义了超过150个资源、700多个资源内元素。每个定义里都包括了对自身结构的描述以及数据约束、数据绑定值集等。对于一个开发人员要记住这些内容非常困难。

同时FHIR数据,特别是Json格式的FHIR数据是典型的“有向图”结构,它的资源中嵌套元素定义、集合以及复杂的资源间“关系”,在这些复杂结构的数据间导航并操作,非常困难。

解决方案

在InterSystems IRIS for Health 2024.1之前,我们会将FHIR数据以Json文档的方式载入 %DynamicAbstractObject,例如下面的代码

   set##class

可以看到这样的处理有下面不方便的地方:

  • 只能使用自己的方式解析、导航FHIR结构
  • 不能从IDE中获取提示信息
  • 没有数据类型安全
  • 没有上下文敏感的文档
  • 没有调试debug的支持

在InterSystems IRIS for Health 2024.1版本之后,引入了FHIR 对象模型。

FHIR 对象模型概览

在 HS.FHIRModel.R4 包下,每一个FHIR R4资源都对应一个ObjectScript类。比如 HS.FHIRModel.R4.

0
0 246
InterSystems 官方 Michael Lei · 十月 7, 2024

我们最近在向量搜索抢险体验计划中提供了新版的 InterSystems IRIS,新版本采用了新的基于分层可导航小世界 (HNSW) 索引算法的近似最近邻索引。 这一新增功能可对大型向量数据集进行高效的近似最近邻搜索,从而显著提高查询性能和可扩缩性。

HNSW 算法旨在通过构建基于图形的结构来优化高维数据的向量搜索,从而更快地在大型向量集合中找到近似邻。 无论您使用的是推荐系统、自然语言处理,还是其他机器学习应用,HNSW 都能显著缩短搜索时间,同时允许您调整准确度水平,但准确度提高的代价是查询时间变慢。

HNSW 的主要优点包括:

    •    即使数据集规模不断扩大,也能加快搜索速度
    •    减少内存占用,同时保持高准确度
    •    与现有的 IRIS 向量搜索功能无缝集成

如何开始使用

最新版本现已通过向量搜索抢先体验计划提供。 要参与,请在此处注册,下载新版本并开始测试。 我们正在持续增强向量搜索的功能,因此您的反馈至关重要!

我们鼓励您探索性能改进方法,并与社区分享您的想法。 如果您在抢先体验阶段遇到任何问题或有任何反馈,请联系我。

祝您编码愉快!

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

第四十一章 创建安全对话 - 使用

Web 服务使用 , 做出响应后,客户端实例和服务实例可以访问相同的对称密钥。有关此密钥的信息包含在两个实例的 SecurityContextToken 属性中。建议的程序如下:

  1. 在客户端中,将 SecurityOut 属性设置为 null,以删除请求消息中使用的安全标头。

Web 服务中不需要这样做,因为 Web 服务会在每次调用后自动清除安全标头。

  1. (可选)将 添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 属性的 方法。例如:
 set SCT=..SecurityContextToken
 do ..SecurityOut.AddSecurityElement(SCT)

如果在下一步创建派生密钥令牌时使用 引用选项,则此步骤是必需的。否则,此步骤不是必需的。

  1. 根据 创建一个新的 。为此,调用 %SOAP.WSSC.DerivedKeyToken 的 方法,如下所示:
 set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(SCT,refOpt)

在这种情况下,必须指定 Create() 的第一个参数,并且 refOpt

0
0 112
文章 姚 鑫 · 十月 7, 2024 3m read

第四十章 创建安全对话 - 启用 IRIS Web 服务以支持 WS-SecureConversation

启用 IRIS Web 服务以支持 WS-SecureConversation

Web 客户端向 服务发送请求安全对话的消息时,安全对话就开始了。作为响应,Web 服务发送双方都可以使用的 。

要使 服务能够使用此令牌进行响应,请重写 服务的 OnStartSecureConversation() 方法。此方法具有以下签名:

Method OnStartSecureConversation(RST As %SOAP.WST.RequestSecurityToken) As 
                          %SOAP.WST.RequestSecurityTokenResponseCollection

该方法应该执行以下操作:

  1. 加密 SOAP 主体。OnStartSecureConversation() 发送的消息包含必须保护的信息;此信息在 主体中携带。

根据需要,可以选择采用其他方式保护消息安全。

  1. (可选)调用 %SOAP.WST.EntropyCreateBinarySecret() 方法。此方法返回表示随机服务器熵的该类的实例。该方法接受一个参数,即熵的大小(以字节为单位)。

该实例表示 元素和其中包含的 。

0
0 140
文章 姚 鑫 · 十月 4, 2024 3m read

第三十九章 创建安全对话

IRIS 支持安全对话,遵循 WS-SecureConversation 1.3 规范。本页介绍如何手动创建安全对话。

概述

在安全对话中,Web 客户端向 服务发出初始请求并接收包含 <`SecurityContextToken>` 的消息。此元素包含双方都可以使用的对称密钥的信息。此信息指的是只有双方知道的共享密钥。然后双方可以在后续交换中使用对称密钥,直到令牌过期或客户端取消令牌。

双方不应该直接使用 执行这些任务(不推荐),而应该从中生成一个 ,然后使用它进行加密、签名、解密和签名验证。

共享密钥可以通过以下任一方式指定:

  • 双方共同提供随机熵值。这是典型的情况。
  • 由客户端,如果客户端提供了一个随机的客户端熵值。
  • 由服务提供,如果服务提供了随机的服务熵值。

开始安全对话

Web 客户端启动安全对话。要在 IRIS 中执行此操作,请在 Web 客户端中执行以下操作:

  1. 加密 SOAP 主体。客户端发送的请求包含必须保护的信息;此信息在 SOAP 主体中携带。

根据需要,可以选择采用其他方式保护请求消息。

  1. 在调用 %SOAP.WST.EntropyCreateBinarySecret() 方法。此方法返回表示随机客户端熵的该类的实例。该方法接受一个参数,即熵的大小(以字节为单位)。
 set clientEntropy=##class(%SOAP.WST.Entropy).CreateBinarySecret(32)
0
0 86
文章 姚 鑫 · 十月 3, 2024 3m read

第三十八章 验证和解密入站消息 - 实例身份验证和 WS-Security

实例身份验证和 WS-Security

了解 IRIS 网络服务有两个独立的机制在起作用是很有用的:IRIS 服务器和网络服务代码。

  • 在管理门户中,您可以为 Web 应用程序指定允许的身份验证模式,从而控制对 %Service_WebGateway 服务的访问。(有关详细信息,请参阅时间戳和用户名令牌示例。有关更多背景信息,请参阅 Web 应用程序。)如果您选择密码选项,则 Web 应用程序可以接受 用户名/密码对;这称为实例身份验证。
  • 除此之外, 服务还可以要求 用户名/密码对。

这些机制协同工作如下:

  1. 收到消息后, 服务将检查是否存在名为 的标头元素,而不会检查该元素的内容。
  2. 如果不存在 标头元素并且 参数等于 ,则 Web 服务将发出故障并退出。
  3. 如果 标头元素包含 元素:
  • 如果为 Web 应用程序选择了密码选项,则 服务将读取 元素,从中获取用户名和密码,并登录到 应用程序。

服务对 参数的任何值( 除外)都执行此操作。

用户名可在 特殊变量和 服务的 Username 属性中找到。密码不可用。

  • 如果没有选择密码选项,则不会登录。

注意:如果关联(和编译)配置类中存在安全策略,则 参数将被忽略。

检索安全标头元素

在某些情况下,可能希望为 标头元素添加自定义处理。

0
0 91
公告 Michael Lei · 十月 2, 2024
您好,欢迎阅读 九月 2024 开发人员社区通讯。
统计信息
✓ 九月发布了 45 篇新帖子:
39篇新文章
4个新公告
2个新问题

✓ 九月有 47 位新成员加入
✓ 所有时间发布了 2,208 篇帖子
✓ 所有时间有 2,024 位成员加入

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

第三十七章 验证和解密入站消息

本主题介绍如何验证 IRIS Web 服务或 Web 客户端收到的消息中的安全元素(并自动解密任何加密内容)。

概述

IRIS 网络服务和网络客户端可以验证入站 消息的 WS-Security 标头元素,以及自动解密入站消息。

服务和 客户端还可以处理已签名的 SAML 断言令牌并验证其签名。但是,验证 断言的详细信息是您的应用程序的责任。

如果使用安全策略,所有上述活动都是自动的。

在所有场景中, 都使用其根颁发机构证书集合;请参阅设置和其他常见活动。

验证 标头

要验证任何入站 SOAP 消息中包含的 标头元素,请执行以下操作:

  1. Web 服务或 Web 客户端中,设置 参数。使用以下值之一:
    • REQUIREWeb 服务或 Web 客户端验证 标头元素,如果不匹配或缺少此元素,则会发出错误。
    • — 服务或 Web 客户端验证 W 标头元素。

在这两种情况下, 服务或 Web 客户端都会验证 , and 标头元素。它还会验证标头中 断言中的 签名(如果有)。如果合适,还会解密消息。

如果验证失败,则返回错误。

SECURITYIN 参数还有两个可能的值,可用于测试和故障排除:

  • — 服务或客户端忽略除 之外的 标头元素,如 身份验证和 WS-Security 中所述。

为了向后兼容,此值是默认值。

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

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

使用对称密钥签名并加密

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

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

使用元素

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

 // create UsernameToken
  set userToken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")

  //get credentials of message recipient
  set x509alias = "servernopassword"
  set cred = ##class(%SYS.X509Credentials).GetByAlias(x509alias) 

  //get EncryptedKey element
  set enc=##class(%XML.Security.EncryptedKey).CreateX509(cred,$$$SOAPWSEncryptNone)
  do client.SecurityOut.AddSecurityElement(enc)

  // get derived keys
  set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(enc,$$$SOAPWSReferenceEncryptedKey)
  do client.SecurityOut.AddSecurityElement(dkenc)
  set dksig=##class(%SOAP.WSSC.DerivedKeyToken).Create(enc,$$$SOAPWSReferenceEncryptedKey)
  do client.SecurityOut.AddSecurityElement(dksig)

  // create and add signature
  set sig=##class(%XML.Security.Signature).Create(dksig,,$$$SOAPWSReferenceDerivedKey)
  do client.SecurityOut.AddSecurityElement(sig) 
 
  // ReferenceList to encrypt Body and Username. Add after signing
  set reflist=##class(%XML.Security.ReferenceList).%New()
  set refopt=$$$SOAPWSReferenceDerivedKey
  set encryptedData=##class(%XML.Security.EncryptedData).Create(dkenc,userToken,refopt)
  set dataref=##class(%XML.Security.DataReference).Create(encryptedData)
  do reflist.AddReference(dataref)
  set encryptedData=##class(%XML.Security.EncryptedData).Create(dkenc,"",refopt)
  set dataref=##class(%XML.Security.DataReference).Create(encryptedData)
  do reflist.AddReference(dataref)
  do client.SecurityOut.AddSecurityElement(reflist)
  
  // Add UsernameToken; force after ReferenceList so that it can decrypt properly
  do client.SecurityOut.AddSecurityElement(userToken,reflist)
0
0 105
文章 姚 鑫 · 九月 29, 2024 3m read

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 创建 元素。
0
0 104
问题 wei su · 九月 25, 2024

请问一下,活动量仪表盘这个界面怎么激活,实例怎么展现?我的服务器展开没有数据,但是是有消息记录的。

1
0 140
文章 Michael Lei · 九月 27, 2024 11m read

欢迎来到我的 CI/CD 系列的下一个章节,我们将探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。

今天,我们来谈谈互操作性。

问题

当您有一个有效的互操作性生产时,您有两个独立的流程:一个是处理消息的可以正常运行的生产流程,另一个是更新代码、生产配置和系统默认设置的 CI/CD 流程。

显然,CI/CD 流程会影响互操作性。 但问题是:

  • 更新期间究竟发生了什么?
  • 我们需要做些什么以在更新期间尽可能缩短或消除生产停机时间?
0
0 347
文章 Michael Lei · 九月 27, 2024 7m read

经过将近四年的停顿,我的 CI/CD 系列又回来了! 这些年来,我与多个 InterSystems 客户合作,为不同的用例开发 CI/CD 管道。 希望本文中提供的信息对您有所帮助。

系列文章探讨了使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。

我们有一系列激动人心的话题要讨论:但今天,我们来谈谈代码之外的事情 – 配置和数据。

问题

之前我们探讨过代码提升,这在某种程度上是无状态的 – 我们总是从一个(大概)空实例到完整的代码库。 但有时,我们需要提供数据或状态。 不同的数据类型包括:

  • 配置:用户、Web 应用、LUT、自定义架构、任务、业务伙伴等
  • 设置:环境特定的键值对
  • 数据:为了让应用正常工作,通常必须提供引用表等

我们来探讨所有这些数据类型,以及如何先将它们提交到源代码控制工具中,然后进行部署。

配置

系统配置分布在许多不同的类中,但 InterSystems IRIS 可以将大多数类导出为 XML。 首先是一个安全软件包,其中包含以下信息:

  • Web 应用程序
  • DocDB
  • 审核事件
  • KMIP 服务器
  • LDAP 配置
  • 资源
  • 角色
  • SQL 特权
  • SSL 配置
  • 服务
  • 用户

所有这些类都提供 Exists、Export 和 Import 方法,允许您在不同的环境之间移动它们。

一些注意事项:

  • 用户和 SSL 配置可能包含敏感信息,例如密码。
0
0 121