标签: xml-signature

XML Canonicalization算法在直接调用时比在作为xml数字签名的一部分调用时给出两个不同的结果?

当我直接规范化某些xml时,我得到两个不同的同一个xml文档的哈希,而不是在我执行数字签名时,它还会在对其进行哈希处理之前对xml执行相同的规范化算法?我发现数字签名规范化包括新的行字符'\n'和规范化时的间距字符,而直接算法则没有.

包括新行字符+空格不在规范化规范中吗?我特别关注这个版本http://www.w3.org/TR/2001/REC-xml-c14n-20010315

有谁知道发生了什么?我已经包含了xml doc和代码的两种实现,所以你可以看到.

这真让我感到困惑,我想知道为什么,我错过了一些明显的东西吗?

<root>
  <child1>some text</child1>
  <child2 attr="1" />
</root>
Run Code Online (Sandbox Code Playgroud)

直接规范化代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Security.Cryptography.Xml;
using System.Security.Cryptography;
using System.IO;
using System.ComponentModel;

namespace XML_SignatureGenerator
{
    class XML_C14N
    {
        private String _filename;
        private Boolean isCommented = false;
        private XmlDocument xmlDoc = null;

        public XML_C14N(String filename)
        {
            _filename = filename;
            xmlDoc = new XmlDocument();
            xmlDoc.Load(_filename);
        }

        //implement this spec http://www.w3.org/TR/2001/REC-xml-c14n-20010315
        public String XML_Canonalize(System.Windows.Forms.RichTextBox tb)
        {
            //create c14n instance and load in xml …
Run Code Online (Sandbox Code Playgroud)

xml canonical-form digital-signature xml-signature

8
推荐指数
1
解决办法
9182
查看次数

OpenSAML(2.0)签名验证无效

问题:

我正在使用OpenSAML构建一种方法来验证发布到我们服务器的SAML 2.0响应.我有大部分工作,能够访问断言的各个方面.唯一的问题是,当我尝试使用下面的公钥验证签名时,它指出" 签名没有验证凭据的密钥 ".

有任何想法吗?

公钥:

MIICozCCAgygAwIBAgIGATxK1oY4MA0GCSqGSIb3DQEBBQUAMIGUMQswCQYDVQQGEwJVUzETMBEG
A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU
MBIGA1UECwwLU1NPUHJvdmlkZXIxFTATBgNVBAMMDHdlc3Rlcm51bmlvbjEcMBoGCSqGSIb3DQEJ
ARYNaW5mb0Bva3RhLmNvbTAeFw0xMzAxMTcyMzI2MThaFw00MzAxMTcyMzI3MThaMIGUMQswCQYD
VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsG
A1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxFTATBgNVBAMMDHdlc3Rlcm51bmlvbjEc
MBoGCSqGSIb3DQEJARYNaW5mb0Bva3RhLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
njQZkKTyJuS1evlG/ThBqGT9VID9RnN31yr1EQXYODs1pXy8w58QkztCWTvevj8GekbJ8dsVZ2Ij
UXJ50psNL1zyq0cJp8M08E75SCwaH7Q9goaReIFpYQZTbTE9FMfGcsrNIFZyBsCXS2dm+FfuGDQ6
4/W0mxOHdYxqSTD+fvMCAwEAATANBgkqhkiG9w0BAQUFAAOBgQByeciVKaK5IKFPVzK3ZS37IOQm
2vDXZYXEzUaq1urk8gunQs75ZzgIsIh6jlUZy+FO3maAoVyW5mUzqT0jBTfI0Ea3vJfQAlgn4gW2
eiqdbu1uI48a5K1+GneO1xzqTYzMXvUoJpXqoifsrikkpHHATF8z5Y4ULKgKFSBB9VypDg==
Run Code Online (Sandbox Code Playgroud)

签名:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
        <ds:Reference URI="#id7437579890833705637451361">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
            <ds:DigestValue>zIoW9N/wJrjwXfQS7I5jNyZqbJQ=</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>ZybzDLQ2Q8RiIqyShZFNKR8+vbVhjsAT18hIh6IcqDO5ER2ah5Fs1bErmgeITatRNgdqzxgX4jErtkituiI3vdr56g5kmaTKHf2lrU6OLW3JHUokCt9Bv9E7duvnpGEA0uFvzNMVMcqZOGUbJ1m1lkYxUIIaeOjSxPjBTZB+g3A=</ds:SignatureValue>
    <ds:KeyInfo>
        <ds:X509Data>
            <ds:X509Certificate>MIICozCCAgygAwIBAgIGATxK1oY4MA0GCSqGSIb3DQEBBQUAMIGUMQswCQYDVQQGEwJVUzETMBEG
A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU
MBIGA1UECwwLU1NPUHJvdmlkZXIxFTATBgNVBAMMDHdlc3Rlcm51bmlvbjEcMBoGCSqGSIb3DQEJ
ARYNaW5mb0Bva3RhLmNvbTAeFw0xMzAxMTcyMzI2MThaFw00MzAxMTcyMzI3MThaMIGUMQswCQYD
VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsG
A1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxFTATBgNVBAMMDHdlc3Rlcm51bmlvbjEc
MBoGCSqGSIb3DQEJARYNaW5mb0Bva3RhLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
njQZkKTyJuS1evlG/ThBqGT9VID9RnN31yr1EQXYODs1pXy8w58QkztCWTvevj8GekbJ8dsVZ2Ij
UXJ50psNL1zyq0cJp8M08E75SCwaH7Q9goaReIFpYQZTbTE9FMfGcsrNIFZyBsCXS2dm+FfuGDQ6
4/W0mxOHdYxqSTD+fvMCAwEAATANBgkqhkiG9w0BAQUFAAOBgQByeciVKaK5IKFPVzK3ZS37IOQm
2vDXZYXEzUaq1urk8gunQs75ZzgIsIh6jlUZy+FO3maAoVyW5mUzqT0jBTfI0Ea3vJfQAlgn4gW2
eiqdbu1uI48a5K1+GneO1xzqTYzMXvUoJpXqoifsrikkpHHATF8z5Y4ULKgKFSBB9VypDg==</ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</ds:Signature>
Run Code Online (Sandbox Code Playgroud)

执行:

try {
    //Retrieve SAML response from post
    Document document = ppMgr.parse(request.getInputStream());
    UnmarshallerFactory unmarshallerFactory = Configuration.getUnmarshallerFactory();
    Unmarshaller …
Run Code Online (Sandbox Code Playgroud)

java opensaml saml-2.0 xml-signature

8
推荐指数
1
解决办法
8456
查看次数

javax.xml.crypto.URIReferenceException:无法解析 ID 为 1234 的元素。最后提供了解决方案

我有以下工作流程:

\n\n
    \n
  1. 获取字符串形式的 XML
  2. \n
  3. 将字符串转换为文档,对文档进行签名(某些元素)并将其以字符串形式返回
  4. \n
  5. 获取字符串形式的签名 XML,将其转换为文档并验证签名
  6. \n
\n\n

下面是签名创建方法:

\n\n
public static String createXMLDSign(String xmlString) throws Exception{\n    // Create a DOM XMLSignatureFactory that will be used to\n    // generate the enveloped signature.\n    String providerName = System.getProperty("jsr105Provider", "org.jcp.xml.dsig.internal.dom.XMLDSigRI");\n    XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", (Provider) Class.forName(providerName).newInstance());\n\n    // Load the KeyStore and get the signing key and certificate.\n    KeyStore ks = KeyStore.getInstance("JKS");\n    ks.load(new FileInputStream("src/main/resources/jks/client-keystore.jks"), keyStorePass .toCharArray());\n    KeyStore.PrivateKeyEntry keyEntry =\n        (KeyStore.PrivateKeyEntry) ks.getEntry\n            ("client-keypair", new KeyStore.PasswordProtection(keyPass .toCharArray()));\n    X509Certificate cert = (X509Certificate) keyEntry.getCertificate();\n\n …
Run Code Online (Sandbox Code Playgroud)

java xml cxf xml-signature

8
推荐指数
0
解决办法
4509
查看次数

如何在Java中生成没有空格和换行符的XML签名?

我与巴西的" Nota Fiscal Eletronica "项目合作,在该项目中,他们定义了一种标记XML文档的标准方法.

最近,他们开始要求标签之间绝对没有空格,包括签名标签(*).

我们碰巧使用apache的XMLSignature,我似乎无法生成一个无痕的签名.

如果我在签名后删除空格,签名就会被破坏.

我也无法更改规范化器/变换器组,因为它们是预定义的.

我在XMLSignature API中找不到一个选项或参数来控制缩进或空格.

以下是代码:

    // the element where to insert the signature
    Element element = ...;
    X509Certificate cert = ...;
    PrivateKey privateKey = ...;

    XMLSignature signer =
            new XMLSignature(doc, "http://xml-security",
            XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1);

    element.appendChild(signer.getElement());

    Transforms transforms = new Transforms(doc);

    // Define as regras de transformação e canonicalização do documento
    // XML, necessário para fazer a verificação do parsing e da
    // assinatura pelos destinatários
    transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE); //, xpath.getElementPlusReturns());

    transforms.addTransform(Transforms.TRANSFORM_C14N_OMIT_COMMENTS); //,xpath.getElementPlusReturns());

    String id = …
Run Code Online (Sandbox Code Playgroud)

java xml apache signature xml-signature

7
推荐指数
2
解决办法
2万
查看次数

如何验证iOS应用程序中的XML签名?

我正在研究一个iOS项目的XML数字签名世界; 我需要验证SAML断言的数字签名.

我一直在阅读有关验证XML签名的很多内容,我想我已经了解了如何使用私钥对摘要进行签名,我可以使用公钥验证它(应该包含在x509证书中)所以我可以确定SAML令牌的来源.

我找到了一个C libray,xmlsec,看起来它有很多我需要的代码来验证签名,并且一直在努力实现它.但是,我无法弄明白.根据我的理解,我很确定我必须使用我的代码编译库.我已经将源代码复制到了我的项目中,但是在编译期间我遇到了关于未定义的内容的错误.

在我花费无数个小时前往这条道路之前,我想我会联系社区,看看是否有人有任何验证xml数字签名的经验,以及他们是否可以深入了解在iOS项目中实现这一点.

对于它的价值,这是我从单点登录服务获得的SAML断言的一小部分:

<?xml version="1.0" encoding="UTF-16"?>
<saml:Assertion ID="oQ2YZuHBspA_f91HM8o3.o6ZZla" IssueInstant="2011-05-06T00:51:40.733Z" Version="2.0" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<saml:Issuer>[...]</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
        <ds:Reference URI="#oQ2YZuHBspA_f91HM8o3.o6ZZla">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>zj4pCHBNMln+28Jq/v1YIScfiuw=</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>[...]</ds:SignatureValue>
    <ds:KeyInfo>
        <ds:X509Data>
            <ds:X509Certificate>MIIDVjCCAj6gAwIBAgIGAS67wkWCMA0GCSqGSIb3[...]7bgf</ds:X509Certificate>
        </ds:X509Data>
        <ds:KeyValue>
            <ds:RSAKeyValue>
                <ds:Modulus>[...]</ds:Modulus>
                <ds:Exponent>AQAB</ds:Exponent>
            </ds:RSAKeyValue>
        </ds:KeyValue>
    </ds:KeyInfo>
</ds:Signature>
Run Code Online (Sandbox Code Playgroud)

xml security digital-signature ios xml-signature

7
推荐指数
1
解决办法
3248
查看次数

将org.dom4j.Document转换为org.w3c.dom.Document和XML签名的问题

我有一些类已经使用DOM4J来读取XML文件并为数据提供getter方法.现在,我需要添加检查XML数字签名的可能性.

使用org.w3c.dom并关注http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/ 一切正常.

所以,我尝试使用DOMWriter从org.dom4j.Document转换为org.w3c.dom.Document,但在此之后签名验证不起作用.我认为这是因为DOMWiter正在改变XML树(正如doc4.asXML()似乎显示的那样).

我试图找到要设置的东西以保持文档的完整性,但DOMWriter没有这样的方法.

下面是演示非对称转换的代码.

用于测试的文件是http://www.robertodiasduarte.com.br/files/nfe/131090007910044_v1.10-procNFe.xml

有人知道这个的原因/解决方法吗?

谢谢(抱歉我的英语不好).

package testevalidanfe;

import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import javax.swing.JOptionPane;
import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.dom.DOMValidateContext;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.dom4j.io.XMLWriter;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

public class Testevalidanfe {

    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setNamespaceAware(true);
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document d = db.parse("exemplo-nfe.xml");

        Node no = d.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature").item(0);

        DOMValidateContext valContext = …
Run Code Online (Sandbox Code Playgroud)

java xml dom dom4j xml-signature

7
推荐指数
1
解决办法
4023
查看次数

添加c14n独占变换时,Xml签名无效

这是我生成xml签名的代码:

DOMSignContext dsc = new DOMSignContext
  (prk, xmldoc.getDocumentElement());

XMLSignatureFactory fac = 
  XMLSignatureFactory.getInstance("DOM");   

  DigestMethod digestMethod = 
      fac.newDigestMethod("http://www.w3.org/2000/09/xmldsig#sha1", null);
  C14NMethodParameterSpec spec = null;
  CanonicalizationMethod cm = fac.newCanonicalizationMethod(
      "http://www.w3.org/2001/10/xml-exc-c14n#",spec);
  SignatureMethod sm = fac.newSignatureMethod( 
      "http://www.w3.org/2000/09/xmldsig#rsa-sha1",null);
  ArrayList transformList = new ArrayList();
  TransformParameterSpec transformSpec = null;
  Transform envTransform =   fac.newTransform("http://www.w3.org/2000/09/xmldsig#enveloped-signature",transformSpec);
  Transform exc14nTransform = fac.newTransform(
      "http://www.w3.org/2001/10/xml-exc-c14n#",transformSpec);
transformList.add(exc14nTransform); 
transformList.add(envTransform);

 Reference ref = fac.newReference("",digestMethod,transformList,null,null);
 ArrayList refList = new ArrayList();
 refList.add(ref);
 SignedInfo si =fac.newSignedInfo(cm,sm,refList);
Run Code Online (Sandbox Code Playgroud)

这会将参考验证视为错误,并将核心有效性视为错误.但是当我删除envTrasnform变量ie fac.new Transform("http://www.w3.org/2001/10/xml-exc-c14n#",transformSpec)并使用以下代码执行时:

DOMSignContext dsc = new DOMSignContext
  (prk, xmldoc.getDocumentElement());

XMLSignatureFactory fac = …
Run Code Online (Sandbox Code Playgroud)

java xml transform xml-signature

7
推荐指数
1
解决办法
5712
查看次数

如何仅签署XML的特定部分

我试图通过只签署部分xml来做一些XML签名但是经过多次搜索后我找不到解决方案.

我使用java使用Xpath2转换和EXCLUSIVE规范化来签署XML.如果我有以下XML

<?xml version="1.0" encoding="UTF-8"?>
<msg xmlns="http://someaddress/ad/m1" xmlns:ns1="http://someotheraddres/ad/m2" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#">
<header>
    <id>wsfrwerwerwer</id>
    <name>addr</name>
    <somenode>
        <trace>ND</trace>
    </somenode>
</header>
<payload><ns0:addr xmlns:ns0="http://someaddres/ad/m3"><ns2:data xmlns:ns2="http://someaddres/ad/m3">
            <ns2:name>somevalue</ns2:name>
            <ns2:value>354</ns2:value>
        </ns2:data>
    </ns0:addr>
</payload>
</msg>
Run Code Online (Sandbox Code Playgroud)

并签名,我得到以下输出(真实数据替换为虚拟)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<msg xmlns="http://someaddress/ad/m1" xmlns:ns1="http://someotheraddres/ad/m2" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#">
<header>
    <id>wsfrwerwerwer</id>
    <name>addr</name>
    <somenode>
        <trace>ND</trace>
    </somenode>
</header>
<payload>
    <ns0:addr xmlns:ns0="http://someaddres/ad/m3">
        <ns2:data xmlns:ns2="http://someaddres/ad/m3">
            <ns2:name>somevalue</ns2:name>
            <ns2:value>354</ns2:value>
        </ns2:data>
    </ns0:addr>
    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
            <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
            <Reference URI="">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
                        <XPath xmlns="http://www.w3.org/2002/06/xmldsig-filter2" xmlns:ns0="http://someaddres/ad/m3" Filter="intersect">//*[local-name()='addr']/*</XPath>
                    </Transform>
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                <DigestValue>sdlfjdeklsdfngf</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>femhjgklnlkl</SignatureValue>
        <KeyInfo>
            <X509Data>
                <X509Certificate>swerwerwrwerwerwe</X509Certificate>
            </X509Data>
        </KeyInfo>
    </Signature> …
Run Code Online (Sandbox Code Playgroud)

java xml xpath xml-signature xml-dsig

7
推荐指数
1
解决办法
5154
查看次数

没有参数的RSASSA-PSS使用SHA-256 .Net 4.5支持

我正在尝试使用System.Security.Cryptography(目标框架.NET 4.5)来创建xml数字签名,到目前为止,我设法使用以下方案创建和验证签名:RSA PKCS#1 v1.5和SHA-256:http://www.w3.org/2001/04/xmldsig-more#rsa-sha256

但是,我无法使用以下方案:'没有使用SHA-256参数的RSASSA-PSS'[RFC6931]:http://www.w3.org/2007/05/xmldsig-more#sha256-rsa- MGF1

显示的错误很明显"无法为提供的签名算法创建SignatureDescription."

对于'RSA PKCS#1 v1.5和SHA-256',我添加了以下公共类作为其签名:

   public class RSAPKCS1SHA256SignatureDescription : SignatureDescription
   {
        public RSAPKCS1SHA256SignatureDescription()
        {
            base.KeyAlgorithm = "System.Security.Cryptography.RSACryptoServiceProvider";
            base.DigestAlgorithm = "System.Security.Cryptography.SHA256Managed";
            base.FormatterAlgorithm = "System.Security.Cryptography.RSAPKCS1SignatureFormatter";
            base.DeformatterAlgorithm = "System.Security.Cryptography.RSAPKCS1SignatureDeformatter";
        }

        public override AsymmetricSignatureDeformatter CreateDeformatter(AsymmetricAlgorithm key)
        {
            AsymmetricSignatureDeformatter asymmetricSignatureDeformatter = (AsymmetricSignatureDeformatter)
            CryptoConfig.CreateFromName(base.DeformatterAlgorithm);
            asymmetricSignatureDeformatter.SetKey(key);
            asymmetricSignatureDeformatter.SetHashAlgorithm("SHA256");
            return asymmetricSignatureDeformatter;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,我不知道.Net 4.5是否支持'使用SHA-256没有参数的RSASSA-PSS',如果是的话,如何设置其签名定义.

如果有人有类似的经验并能提供一些帮助,我会非常感激.

.net c# digital-signature signedxml xml-signature

7
推荐指数
1
解决办法
1691
查看次数

XML Signature中的'SignatureMethod'算法与'DigestMethod'算法

如果我们以下面的Signature元素为例:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
      <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
      <ds:Reference URI="#_884D49DAD03AD60748547F8322C11AA0">
        <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
        <ds:DigestValue>...</ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>...</ds:SignatureValue>
    <ds:KeyInfo>
      <ds:KeyName>...</ds:KeyName>
    </ds:KeyInfo>
 </ds:Signature>
Run Code Online (Sandbox Code Playgroud)

有SignatureMethod算法(http://www.w3.org/2000/09/xmldsig#rsa-sha1)和DigestMethod算法(http://www.w3.org/2000/09/xmldsig#sha1).

据我所知,SignatureMethod算法为'rsa-sha1'意味着要使用SHA1首先对要签名的内容进行哈希(消化),然后使用RSA进行签名.

DigestMethod算法是否总是等于SignatureMethod算法('rsa-sha1'的sha1部分)中指定的摘要机制?

我相信情况并非如此,因为两次指定相同的算法是没用的.我推测可以使用不同的DigestMethod算法消化多个'Reference',并使用SignatureMethod算法指定的摘要机制再次对这些摘要的集合进行散列.

试图通过引用"XML签名语法和处理"规范来理解这一点.如果有人能够确认我是否理解正确,或者解释这两种算法所服务的目的,我们将非常感激.谢谢.

xml-signature

6
推荐指数
1
解决办法
5148
查看次数