2017-07-19 9 views
1

私はXMLファイルに署名しようとしています。何らかの理由で、というタグを<X509Data>タグの下に2つ追加しています。 タグの値が同一ではありません。 (コードが前に罰金働いていた)私はそれが期限切れになった後、古い証明書を変更しなければならなかった後にこれが起こっている重複した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; 
} 

あなたはより多くの情報を投稿するために私が必要な場合は私に知らせてください。署名証明書と証明書チェーンを含み、それが期待されているXML署名で

答えて

1

をクリックして変更

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

その後

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

ではなくチェーンの(ルートを除く)、単に署名証明書を作成します

へ。

+0

これで問題は解決しました。ありがとうございました! – Tagyoureit

2

ために、受信者は、ルートCA証明書まで

を信頼性を確認できXMLDsig standard

4.4.4を参照してください。 X509Data要素

X509Data要素に現れるすべての証明書は、それを含むかまたは検証鍵を含む証明書で終了する証明書チェーンの一部である。

新しい証明書の証明書チェーンが根まで1つの中間証明書が含まれている場合、あなたが(ダブルあなたがエディタで証明書を開いて、それを確認することができます

root 
    --intermediate1 
     --leaf 
X509Data

に2つの証明書を参照することを正常ですあなたの出力に中間証明書を排除したい場合は、)ウィンドウに

+0

問題が検証スキーマで複数のタグを許可していません。 – Tagyoureit

+0

標準ではいくつかのタグが許可されていますので、検証スキーマを変更する必要があります。回避策:中間体なしでCAから新しい証明書を選択してください – pedrofb

+0

私が署名して検証しているXMLは、政府によって発行されています。スキーマはそれを許可していないし、私はそれが私はエラー(検証に失敗しました:複数の要素)を取得しているために設計されたWebサイト上で署名されたXMLを検証しようとしているとき。ここの唯一の方法は別の証明書ですか? – Tagyoureit