第三十九章 创建安全对话

文章目录

第三十九章 创建安全对话

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

概述

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

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

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

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

开始安全对话

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

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

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

  1. 在调用 %SOAP.WST.EntropyCreateBinarySecret() 方法。此方法返回表示随机客户端熵的该类的实例。该方法接受一个参数,即熵的大小(以字节为单位)。
java 复制代码
 set clientEntropy=##class(%SOAP.WST.Entropy).CreateBinarySecret(32)

该实例表示 <Entropy> 元素和其中包含的 <BinarySecret>

  1. 在调用 %SOAP.WST.RequestSecurityTokenCreateIssueRequest() 类方法。此方法返回此类的一个实例,客户端将使用该实例请求安全对话。该方法具有以下参数:

a. Interval间隔,请求的令牌的生命周期。默认值为 300 秒;使用空字符串则不指定生命周期。

b. clientEntropy,在上一步中创建的客户端熵对象(如果适用)。

c. requireServerEntropy,一个布尔值,指定服务器在创建 <SecurityContextToken>时是否必须使用服务器熵。默认值为 false

java 复制代码
 set RST=##class(%SOAP.WST.RequestSecurityToken).CreateIssueRequest(300,clientEntropy,1)
  1. 可以选择实例中指定 %SOAP.WST.RequestSecurityTokenComputedKeySize 属性。
  2. 调用 Web 客户端的 StartSecureConversation() 方法。此方法向 Web 服务发送一条消息,请求双方都可以使用的 <SecurityContextToken>。此方法接受一个参数,即上一步中在中打开的 %SOAP.WST.RequestSecurityToken实例。

此方法返回一个状态代码,代码应该检查该代码。如果响应表示成功,则客户端的 SecurityContextToken 属性包含一个 %SOAP.WSSC.SecurityContextToken 实例,该实例表示从客户端返回的 <SecurityContextToken>。此元素包含有关对称密钥的信息,双方都可以使用该密钥进行加密、签名、解密和签名验证。

  1. 使用 <SecurityContextToken> 根据需要重新指定安全标头。请参阅使用 <SecurityContextToken>
java 复制代码
  //encrypt the SOAP body because it contains part of the shared secret key
  Set x509alias = "servernopassword" 
  Set cred = ##class(%SYS.X509Credentials).GetByAlias(x509alias)
  set enckey=##class(%XML.Security.EncryptedKey).CreateX509(cred)
  do client.SecurityOut.AddSecurityElement(enckey)
 
  // if client entropy to be passed
  set entropy=##class(%SOAP.WST.Entropy).CreateBinarySecret(32)
  // request with 300 second lifetime and computed key using both client 
  //and server entropy.
  set RST=##class(%SOAP.WST.RequestSecurityToken).CreateIssueRequest(300,entropy,1)
  set sc=client.StartSecureConversation(RST)  ; sends a SOAP message
相关推荐
蓝博AI1 分钟前
基于卷积神经网络的香蕉成熟度识别系统,resnet50,vgg16,resnet34【pytorch框架,python代码】
人工智能·pytorch·python·神经网络·cnn
TG_yunshuguoji21 分钟前
亚马逊云代理商:怎么快速构建高安全区块链应用?
网络·安全·云计算·区块链·aws
小白银子22 分钟前
零基础从头教学Linux(Day 54)
linux·windows·python
不爱搬砖的码农30 分钟前
宝塔面板部署Django:使用Unix Socket套接字通信的完整教程(附核心配置与问题排查)
python·django·unix
喜欢你,还有大家35 分钟前
企业安全防护之——防火墙
服务器·网络·安全
滑水滑成滑头37 分钟前
**发散创新:探索零信任网络下的安全编程实践**随着信息技术的飞速发展,网络安全问题日益凸显。传统的网络安全防护方式已难以
java·网络·python·安全·web安全
JA+39 分钟前
vue 实时数据表格组件 (stk-table-vue)
前端·javascript·vue.js
丁浩66643 分钟前
Python机器学习---1.数据类型和算法:线性回归
开发语言·python·机器学习·线性回归
那年窗外下的雪.1 小时前
鸿蒙ArkUI布局与样式进阶(十二)——自定义TabBar + class类机制全解析(含手机商城底部导航案例)
开发语言·前端·javascript·华为·智能手机·harmonyos·arkui
H_z_q24011 小时前
Python动态类型、运算符、输入处理及算法编程问答
python