2017-07-19 35 views
1

我想簽署一個XML文件,並由於某種原因在<X509Data>標記下添加了兩個<X509Certificate>標記。 標籤中的值不相同。 (請參閱下面的示例)重複的X509Certificate

<KeyInfo> 
    <X509Data> 
    <X509Certificate>KJASHDJASHAHDJA</X509Certificate> 
    <X509Certificate>ASJKLDJASDJASDJKLASJDASJKDASA</X509Certificate> 
    </X509Data> 
</KeyInfo> 

發生這種情況後,我必須更改舊證書過期後(代碼工作正常之前)。

代碼,我用它來獲取關鍵信息節點:

private KeyInfo getKeyInfo() 
{ 
    KeyInfo keyInfo = new KeyInfo(); 
    KeyInfoX509Data keyInfoX509Data = new KeyInfoX509Data(this.certificate, X509IncludeOption.ExcludeRoot); 
    keyInfo.AddClause(keyInfoX509Data); 
    return keyInfo; 
} 

如果你需要我發佈的詳細信息,請讓我知道。

回答

1

如果你想消除在輸出的中間證書,更改

new KeyInfoX509Data(this.certificate, X509IncludeOption.ExcludeRoot); 

new KeyInfoX509Data(this.certificate, X509IncludeOption.EndCertOnly); 

然後它將寫只是簽署證書,而不是鏈(除了根之外的)。

+0

好吧,這解決了這個問題。謝謝! – Tagyoureit

2

在XML簽名預計包括簽名證書,以便在證書鏈收件人可以驗證信任,直至根CA證書

XMLDsig standard

4.4.4 X509數據元素

出現在X509Data元素中的所有證書都必須通過包含它的驗證密鑰或者作爲終結於包含驗證密鑰的證書的認證鏈的一部分。

如果您的新證書的證書鏈包含一箇中間證書,直到根,這是正常的,你在X509Data

root 
    --intermediate1 
     --leaf 

看到兩個證書,您可以檢查它的編輯器中打開證書(雙單擊窗口)

+0

問題是驗證模式不允許使用多個標記。 – Tagyoureit

+0

該標準允許使用多個標籤,因此我擔心您必須修改您的驗證模式。解決方法:從CA中選擇一個沒有中間件的新證書 – pedrofb

+0

我正在簽署並驗證的XML由我們的政府頒發。架構不允許它,也當我試圖驗證網站上簽名的XML爲它設計時,我得到錯誤(驗證失敗:多個元素)。那麼這裏唯一的方法是不同的證書? – Tagyoureit

相關問題