Altova XMLSpy 2023 Enterprise Edition

用户可以对XML文件进行数字签名,然后可以验证签名。如果文件在签名后有被更改,则验证将失败。XMLSpy同时支持XML签名的创建和验证。

 

XMLSpy视图中的XML签名

可以为所有类型的XML文件创建XML签名,包括XML Schema、WSDL和XBRL文件。因此,XML | 创建XML签名XML | 验证XML签名 命令在所有XMLSpy视图中都可用:文本视图网格视图Schema视图WSDL视图以及XBRL视图

 

XML签名的工作原理

从创建签名到验证签名,整个过程如下:

 

1.XML文件是用证书的私钥或密码进行签名的。在XMLSpy中,您可以使用XML | 创建XML签名命令来创建签名。获取签名是通过处理:(i) XML文档,以及(ii) 证书的私钥或密码。

2.签名可以包括在XML文件中,也可以存储在单独的文件中。

3.XML文件的签名可以通过使用证书的公钥或密码来验证。验证过程如下,首先处理:(i) XML文档,以及(ii) 用于签名的证书的公钥或密码,其次,将此结果与签名进行对比。如果XML文件在签名后被更改,则验证将失败。在XMLSpy中,您可以使用XML | 验证XML签名命令来验证签名。

 

本部分的小节中详细描述了如何在XMLSpy中创建和验证签名。

 

创建XML签名

验证XML签名

 

如何在XML签名中使用证书

为了与XML签名一起使用,证书必须有一个私钥和公钥。私钥是用于创建XML签名的,而公钥是用于验证XML签名的。

 

在常见的情况下,XML文档的发送者有权限访问证书的私钥并使用它创建XML签名。文档的接收者将有权限访问证书的公钥。这种访问可以有两种类型:(i) 发送者发送带有签名的公钥信息;(ii) 接收者有权限访问发送者使用的公钥版本的证书。

 

有关证书的更多详细信息,请参见小节使用证书

 

注意:XMLSpy的XML签名功能支持RSA-SHA1、DSA-SHA1和SHA-256类型的证书。基于密码的签名使用HMAC-SHA256算法(XMLSpy2018及更高版本;参见创建XML签名)。

 

XML文档有效性

如果将XML签名嵌入到XML文档中,则命名空间http://www.w3.org/2000/09/xmldsig#中的Signature元素将被添加到XML文档中。为了使文档根据Schema保持有效,该Schema必须包含适当的元素声明。XMLSpy以两种方式嵌入签名:

 

封内签名:Signature元素被创建为根(或文档)元素的最后一个子元素。

封外签名:Signature元素被创建为根(或文档)元素,而原始XML文档元素被放在名为Object的签名元素的子元素中。

 

如果您不希望修改XML文档的Schema,则可以在外部文件中创建XML签名。有关更多详细信息,请参见创建XML签名部分中有关放置选项的描述。

 

下方给出的是XML Schema的片段,显示了如何允许封内签名的Signature元素。您可以使用这些示例作为指导,来修改您的Schema。

 

在第一个片段中,XML Signature Schema被导入到用户的Schema中。XML Signature Schema的网址是:http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd

 

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

          xmlns:xsig="http://www.w3.org/2000/09/xmldsig#"

          elementFormDefault="qualified"

          attributeFormDefault="unqualified">

  <xs:import namespace="http://www.w3.org/2000/09/xmldsig#"

             schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>

  <xs:element name="Root">

     <xs:complexType>

         <xs:sequence>

            <xs:element ref="FirstChildOfRoot"/>

            <xs:element ref="SecondChildOfRoot" minOccurs="0"/>

            <xs:element ref="ThirdChildOfRoot" minOccurs="0"/>

            <xs:element ref="xsig:Signature" minOccurs="0"/>

         </xs:sequence>

      </xs:complexType>

   </xs:element>

  ...

</xs:schema>

 

第二个选项(参见下方片段)是添加一个通用通配符元素,它匹配来自其他命名空间的任何元素。将processContents特性设置为lax会导致验证器跳过此元素—因为找不到匹配的元素声明。因此,用户不需要引用XML Signatures Schema。但是,此选项的缺点是,任何元素(不只是Signature元素)都可以被添加到XML文档中的指定位置,而不会使XML文档无效。

 

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

          elementFormDefault="qualified"

          attributeFormDefault="unqualified">

  <xs:element name="Root">

     <xs:complexType>

         <xs:sequence>

            <xs:element ref="selection"/>

            <xs:element ref="newsitems" minOccurs="0"/>

            <xs:element ref="team" minOccurs="0"/>

            <xs:any namespace="##other" minOccurs="0" processContents="lax"/>

         </xs:sequence>

      </xs:complexType>

   </xs:element>

  ...

</xs:schema>

 

W3C规范

有关XML签名的更多详细信息,请参见位于https://www.w3.org/TR/xmldsig-core1/的XML签名的W3C规范。

 

© 2017-2023 Altova GmbH