0

0

XML签名(XML Signature)的基本结构和作用是什么?

幻夢星雲

幻夢星雲

发布时间:2025-08-01 18:36:02

|

232人浏览过

|

来源于php中文网

原创

xml签名通过在xml文档中添加“数字指纹”来确保其完整性和来源可靠性。1. 其核心是元素,包含(含等子元素)、;2. 支持三种签名模式:enveloped signature(签名嵌入文档内部)、enveloping signature(签名包裹内容)、detached signature(签名与内容分离);3. 可使用java的javax.xml.crypto、python的xmlsec、c#的system.security.cryptography.xml等库实现签名生成与验证;4. 广泛应用于电子发票、电子病历、金融交易、软件更新和web services安全等场景,确保数据不可篡改和身份可信。选择强哈希算法(如sha256)和足够密钥长度并定期更新密钥是保障安全的关键措施。

XML签名(XML Signature)的基本结构和作用是什么?

XML签名,简单来说,就是给XML文档加上一个“数字指纹”,确保文档的完整性和来源可靠性。它能防止文档被篡改,并验证签名者的身份。

解决方案:

XML签名的核心在于

元素,它包含了签名所需的全部信息。让我们逐步拆解它的结构和作用:

  1. : 这是签名信息的摘要,也是实际被签名的部分。它包含了:

    • : 指定规范化算法。规范化是为了消除XML文档在不同环境下可能存在的差异(比如空格、属性顺序等),确保签名的一致性。常用的算法是
      http://www.w3.org/2001/10/xml-exc-c14n#
      (Exclusive Canonicalization)。

    • : 指定签名算法。例如,
      http://www.w3.org/2001/09/xmldsig#rsa-sha1
      表示使用RSA算法和SHA1哈希函数。但请注意,SHA1由于安全性问题,现在已经不推荐使用,更安全的选择包括SHA256或SHA512。

    • : 包含一个或多个引用,指向被签名的资源。每个
      元素都有:

      • URI
        : 指向被签名的资源。如果为空,表示签名的是整个文档。

      • : 指定在计算摘要之前对资源进行的转换。例如,可以用来提取文档的特定部分。

      • : 指定摘要算法。例如,
        http://www.w3.org/2001/04/xmlenc#sha256
        表示使用SHA256哈希函数。

      • : 被签名资源的摘要值。

  2. : 包含实际的签名值。这是对
    元素进行签名算法处理后的结果。

  3. : 包含签名者的公钥或证书信息,用于验证签名。它可以包含:

    • : 包含X.509证书。

    • : 包含公钥。

    • : 指向包含密钥信息的外部资源。

举个例子,假设我们要签名一个简单的XML文档:

Hello, world!

签名后的XML文档可能如下所示(简化版):


  
    
    
    
      
        
      
      
      ...
    
  
  ...
  
    
      ...
    
  

Hello, world!

XML签名有哪些不同的签名模式?

Cursor
Cursor

一个新的IDE,使用AI来帮助您重构、理解、调试和编写代码。

下载

XML签名支持多种签名模式,主要区别在于

元素在XML文档中的位置:

  • Enveloped Signature (信封签名):

    元素是XML文档的根元素,它“包裹”着被签名的内容。上面的例子就是Enveloped Signature。

  • Enveloping Signature (内含签名):

    元素包含被签名的内容。 也就是说,
    元素本身是根元素,并且它内部包含了要签名的XML片段。

  • Detached Signature (分离签名):

    元素和被签名的内容是分离的。
    元素通过
    URI
    属性指向外部的XML文档。

选择哪种签名模式取决于具体的需求。Enveloped Signature 适合签名整个XML文档,而 Detached Signature 适合签名外部资源。

如何使用编程语言生成和验证XML签名?

许多编程语言都提供了XML签名库,可以简化签名和验证过程。