当前位置: 首页 > 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.mrgr.cn/news/27281.html

相关文章:

  • [Python学习日记-21] Python 中的字符编码(上)
  • JAVA:Nginx(轻量级的Web服务器、反向代理服务器)--(1)
  • 通过API接口获取数据:高效、灵活的数据交互之道
  • Oracle ADG主备停机小版本升级
  • 数据结构——(java版)Map与Set
  • LabVIEW机械产品几何精度质检系统
  • Spring 框架——@Async 注解
  • 订单编号生成规则
  • 指针(c++)[部分]
  • 数据清洗-缺失值填充-XGboost算法填充
  • SOMEIP_ETS_109: SD_Do_not_specify_a_port
  • Python3 SMTP发送邮件
  • 不同的二叉搜索树
  • C/S架构与B/S架构的适用场景分析
  • 一口气学完docker【入门到精通】
  • Day19笔记-包和模块
  • 读构建可扩展分布式系统:方法与实践04应用服务
  • win7 win10 win11找不到该项目的文件怎么删除,请确认该项目的位置,找不到文件的解决办法
  • LEAN 赋型唯一性(Unique Typing)之 n-provability 注解
  • 06 Shell Script特殊变量和模式匹配