当前位置: 首页 > news >正文

第二十五章 添加数字签名

文章目录

  • 第二十五章 添加数字签名
  • 数字签名概述
  • 添加数字签名

第二十五章 添加数字签名

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

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

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

数字签名概述

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

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

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

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

此信息还可以让收件人验证您是公钥/私钥对的所有者。

使用派生密钥令牌进行加密和签名主题介绍了一种向 SOAP 消息添加数字签名的替代方法。消息本身的细节各不相同,但一般过程是相同的,并遵循 XML 签名规范:生成签名部分的摘要,加密摘要,并包含一个 <Signature> 元素,其中包含使收件人能够验证签名和解密加密摘要的信息。

添加数字签名

要对 SOAP 消息进行数字签名,可以使用此处的基本过程或本主题后续部分中描述的变体。

首先,下图概括了这个过程:

在这里插入图片描述

具体过程如下:

  1. 可选择包含 %soap.inc 包含文件,它定义了可能需要使用的宏。
  2. 如果要对任何安全标头元素进行签名,请创建这些安全标头元素。例如:
 set utoken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
  1. 创建 %SYS.X509Credentials 实例,如以编程方式检索凭证集中所述。此 IRIS 凭证集必须包含自己的证书,并且必须提供私钥密码(如果尚未加载)。例如:
 Set x509alias = "servercred" Set pwd = "mypassword" Set credset = ##class(%SYS.X509Credentials).GetByAlias(x509alias,mypassword)
  1. 创建包含与该凭证集关联的证书的二进制安全令牌。为此,调用 %SOAP.Security.BinarySecurityTokenOCreateX509Token() 类方法。例如:
 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)

此方法返回代表 <BinarySecurityToken> 标头元素的 %SOAP.Security.BinarySecurityToken实例。

  1. 将此令牌添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于方法参数,请使用刚刚创建的令牌。例如:
 do ..SecurityOut.AddSecurityElement(bst)
  1. 根据二进制安全令牌创建 <Signature> 元素。为此,调用 %XML.Security.Signature的 CreateX509() 类方法。例如:
 set dsig=##class(%XML.Security.Signature).CreateX509(bst)

此方法返回 %XML.Security.Signature 的实例,该实例表示 &<Signature>标头元素。<Signature> 元素适用于消息的一组默认部分;可以指定一组不同的部分。

正式地,该方法具有以下签名:

classmethod CreateX509(credentials As %SYS.X509Credentials = "", signatureOptions As %Integer, referenceOption As %Integer, Output status As %Status) as %XML.Security.Signature
  • credentials - 凭据要么是实例中的 %SYS.X509Credentials,要么是实例中的 %SAML.Assertion,要么是实例中的 %SOAP.Security.BinarySecurityToken
  • signatureOptions 指定要签名的部分。此选项在将数字签名应用于特定消息部分中进行了描述。
  • referenceOption 指定要创建的引用类型。有关详细信息,请参阅 X.509 凭证的引用选项。
  • status 表示该方法是否成功。
  1. 将数字签名添加到 WS-Security 标头元素。为此,请调用 Web 客户端或 Web 服务的 SecurityOut 属性的 AddSecurityElement() 方法。对于参数,请指定上一步中创建的签名对象。例如:
 do ..SecurityOut.AddSecurityElement(dsig)
  1. 发送 SOAP 消息。请参阅添加安全标头元素中的一般注释。
http://www.lryc.cn/news/438260.html

相关文章:

  • GHOST重装后DEF盘数据救援指南
  • 使用blender快速制作metahuman面部以及身体绑定教程
  • OpenHarmony鸿蒙( Beta5.0)智能窗户通风设备开发详解
  • pandas 将多条记录整合成一条记录,每条记录的year和month字段组成新的字段名
  • C# 中的多线程同步:原子变量、原子操作、内存顺序和可见性
  • 视图(mysql)
  • elementui组件el-upload实现批量文件上传
  • 【JAVA入门】Day45 - 压缩流 / 解压缩流
  • Qt_自定义信号
  • 【运维方案】某系统运维需求方案参考(doc全原件2024)
  • Linux环境使用Git同步教程
  • c++临时对象导致的生命周期问题
  • CSP-J 算法基础 深度优先搜索
  • LeetCode题练习与总结:基本计算器 Ⅱ--227
  • Elasticsearch基础(七):Logstash如何开启死信队列
  • c语言--力扣简单题目(链表的中间节点)讲解
  • 【STM32 Blue Pill编程】-定时器计数模式
  • 【例题】lanqiao1331 二进制中 1 的个数
  • 【论文解读】图像序列识别:CRNN技术在场景文本识别中的应用与突破(附论文地址)
  • Vue3+CesiumJS相机定位camera
  • turbo译码算法MAX, MAX_SCALE and MAX_STAR的比较
  • 关于HarmonyOS的学习
  • 【雅特力AT32】搭建模板工程及GPIO点灯操作
  • 实战千问2大模型第三天——Qwen2-VL-7B(多模态)视频检测和批处理代码测试
  • 数据库索引底层数据结构之B+树MySQL中的页索引分类【纯理论干货,面试必备】
  • 编译QT源码时的configure参数须知
  • 如何利用人工智能大模型来进行数字化营销?
  • 【MRI基础】回波序列长度-echo train length ETL概念
  • (179)时序收敛--->(29)时序收敛二九
  • [Visual Stuidio 2022使用技巧]2.配置及常用快捷键