摘要值不匹配

问题描述:

我正在使用xades4j为XML文件创建XAdES-T封装签名。当我验证签名的XML时,我得到一个错误,指出“Digest value calculated与ds:Reference内的摘要值不匹配”,其中的引用指向Type =“http://uri.etsi.org/ 01903#SignedProperties”。根XML元素本身的摘要值是可以的。摘要值不匹配

有没有人遇到这样的问题?

我唯一可以检测到的是签名时间不是祖鲁语格式,但看起来像这样:2015-12-14T22:12:12.302 + 01:00。有没有办法在签名中更改格式?

<ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#xmldsig-795a7c1b-9b15-4d5f-b363-4cb106ca238b-signedprops"> 
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> 
<ds:DigestValue>iJu8ShMAGXPF1tmQveXzHkrmpFgfUR1ByH6en+2eIhU=</ds:DigestValue> 
... 
<xades:SignedProperties Id="xmldsig-795a7c1b-9b15-4d5f-b363-4cb106ca238b-signedprops"><xades:SignedSignatureProperties><xades:SigningTime>2015-12-14T22:12:12.302+01:00</xades:SigningTime> 
... 

问题解决:

  • 您可以通过如下变更签署时间的时区:

    XadesSigner signer = new XadesTSigningProfile(keyingDataProvider) 
              .withSignaturePropertiesProvider(new SignaturePropertiesProvider() 
        { 
         public void provideProperties(SignaturePropertiesCollector signedPropsCol) 
         { 
          signedPropsCol.setSigningTime(new SigningTimeProperty(new GregorianCalendar(TimeZone.getTimeZone("Zulu")))); 
         } 
        })... 
    
  • 的消化错配是由未设置命名空间的认识,同时读取造成的XML文件:

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    dbFactory.setNamespaceAware(true);