2013-03-20 65 views
0

我想用javax.xml.crypto.dsig。*包使用XMLDSig簽署一些文本。我需要提及一些正在簽名的內容。並且根據項目要求,這個參考文獻不應該有任何URI,這意味着沒有參考URI =「」> ... < /參考>,但是<參考> ... < /參考>。Java和XMLDSig:沒有URI的引用

我還沒有找到任何信息是否可能和正確,但要求說XMLDSig允許這樣的引用,每個簽名最多一個。

有人遇到同樣的問題嗎?使用javax.xml.crypto.dsig。*包生成簽名並使用這種引用可以做些什麼並且沒有魔法?

正如我所理解的上述包只允許引用一些數據與URI(或與空的URI),但不是沒有任何URI。可能是我錯過了它的用法?

+0

這很奇怪。我試圖用URI簽名XML,但只能在沒有它的情況下簽名。 – fiatjaf 2013-11-28 18:26:16

+0

也許你在混合這些詞彙。我正在談論創建一個沒有URI的簽名引用對象,而不是沒有URI的XML。 – 2014-01-23 06:43:31

回答

0

確實,XML Signature可以包含一個不帶URI的Reference,但是您需要告訴sign上下文如何查找以此方式引用的對象。這可以通過使用自定義實現URIDereferencer來完成。

因此,要引用簽名一些內容沒有任何的URI,你可以做到以下幾點:

Reference dataReference = xmlSigFactory.newReference(null, <your digest method>, <your transformations list>, <needed type>, <id>); 

當第一個null參數表示null爲URI,即沒有URI。

要使此引用有效,您需要在DOMSignContext對象中指定您的自定義URIDereferencer實現,該對象持有對正在簽名的內容的所有引用。這個自定義URIDereferencer應該包含邏輯來查找被簽名的內容,這是你自己的實現,所以你應該知道如何找到需要的內容。