2014-01-14 85 views
3

我需要使用"XML Signature"標準簽名整個XML文檔。要求是簽名必須放在簽名文件中。使用封套簽名時簽名

我的做法是使用封套簽名。令我困惑的是當涉及到簽名元素的放置時的實際要求。 當例子看它好像做的最常見的方式是將簽名元素作爲根元素的子元素,並使其成爲最後的孩子是這樣的:

<?xml version="1.0"?> 
<myRootElement> 
    <someChildElement></someChildElement> 

    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     ... 
     <ds:Reference URI="" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     ... 
    </ds:Signature> 

</myRootElement> 

我」什麼米想知道的是:什麼是安置的確切要求?它必須作爲根元素的子元素嗎?還是允許它只是根元素的一個派生物?像這樣:

<?xml version="1.0"?> 
<myRootElement> 
    <someChildElement> 
     <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      ... 
      <ds:Reference URI="" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      ... 
     </ds:Signature> 
    </someChildElement> 
</myRootElement> 

我試圖從規範本身理解這一點,但我沒有這樣做(也許因爲英文不是我的母語)。我很感謝你對此的意見!提前致謝!

回答

2

當我們閱讀的標準,我們發現了以下定義:

簽名,籠罩 簽名是在包含簽名作爲元素的XML內容。內容提供了根XML文檔元素。顯然,包裹簽名必須注意不要在計算SignatureValue時包含自己的值。

它基本上說封裝的簽名必須是被簽名的元素的孩子。

如果簽署一些嵌入式簽名的深埋節點,簽名塊將進入該節點。

+0

爲了確保:這意味着我的第二個示例根據標準無效? –

+0

在你的第二部分中,對文檔內容進行簽名,因此應該將其置於myRootElement下,據我瞭解。 –