2015-12-14 65 views
0

我正在使用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> 
... 

回答

0

問題解決:

  • 您可以通過如下變更籤署時間的時區:

    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);