第二十五章 添加数字签名
文章目录
- 第二十五章 添加数字签名
- 数字签名概述
- 添加数字签名
第二十五章 添加数字签名
本主题介绍如何向 IRIS Web 服务和 Web 客户端发送的 SOAP 消息添加数字签名。
通常,会同时执行加密和签名。为简单起见,本主题仅介绍签名。有关结合加密和签名的信息,请参阅主题结合加密和签名。
主题使用派生密钥令牌进行加密和签名描述了向 SOAP 消息添加数字签名的另一种方法。
数字签名概述
可以使用数字签名来检测消息是否被篡改,或者简单地验证消息的某一部分是否确实由所列实体生成。与传统的手工签名一样,数字签名是对文档的附加,只有文档的创建者才能创建,并且不容易伪造。
IRIS 对 SOAP 消息的数字签名的支持基于 WS-Security 1.1。反过来,WS-Security 遵循 XML 签名规范。根据后者的规范,要对 XML 文档进行签名:
- 使用摘要函数来计算文档一个或多个部分的哈希值。
- 将摘要值连接起来。
- 使用私钥加密串联摘要。(这是只有才能执行的计算。)
- 创建 <Signature>元素,其中包含以下信息:
- 对已签名部分的引用(以表明该签名适用于消息的哪些部分)。
- 加密的摘要值。
- 使接收者能够识别用于解密加密摘要值的公钥的信息。
此信息可以包含在<Signature>元素中,或者 <Signature> 元素可以包含对包含 X.509 证书或签名的 SAML 断言的二进制安全令牌的直接引用。在后一种情况下,必须在添加 <Signature>元素之前将安全令牌添加到消息中。
此信息还可以让收件人验证您是公钥/私钥对的所有者。
使用派生密钥令牌进行加密和签名主题介绍了一种向 SOAP 消息添加数字签名的替代方法。消息本身的细节各不相同,但一般过程是相同的,并遵循 XML 签名规范:生成签名部分的摘要,加密摘要,并包含一个 <Signature> 元素,其中包含使收件人能够验证签名和解密加密摘要的信息。
添加数字签名
要对 SOAP 消息进行数字签名,可以使用此处的基本过程或本主题后续部分中描述的变体。
首先,下图概括了这个过程:

具体过程如下:
- 可选择包含 %soap.inc包含文件,它定义了可能需要使用的宏。
- 如果要对任何安全标头元素进行签名,请创建这些安全标头元素。例如:
 set utoken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
- 创建 %SYS.X509Credentials实例,如以编程方式检索凭证集中所述。此 IRIS 凭证集必须包含自己的证书,并且必须提供私钥密码(如果尚未加载)。例如:
 Set x509alias = "servercred" Set pwd = "mypassword" Set credset = ##class(%SYS.X509Credentials).GetByAlias(x509alias,mypassword)
- 创建包含与该凭证集关联的证书的二进制安全令牌。为此,调用 %SOAP.Security.BinarySecurityTokenO的CreateX509Token()类方法。例如:
 set bst=##class(%SOAP.Security.BinarySecurityToken).CreateX509Token(credset)
此方法返回代表 <BinarySecurityToken> 标头元素的 %SOAP.Security.BinarySecurityToken实例。
- 将此令牌添加到 WS-Security标头元素。为此,请调用Web客户端或Web服务的SecurityOut属性的AddSecurityElement()方法。对于方法参数,请使用刚刚创建的令牌。例如:
 do ..SecurityOut.AddSecurityElement(bst)
- 根据二进制安全令牌创建 <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表示该方法是否成功。
- 将数字签名添加到 WS-Security标头元素。为此,请调用Web客户端或Web服务的SecurityOut属性的AddSecurityElement()方法。对于参数,请指定上一步中创建的签名对象。例如:
 do ..SecurityOut.AddSecurityElement(dsig)
- 发送 SOAP消息。请参阅添加安全标头元素中的一般注释。
