プログラムでml署名を使用して、メッセージが改ざんされているかどうかを確認し、有効な人物によって署名されているかどうかを確認しています。私が理解した第二の部分。問題は最初の部分にあります-つまり、参照の有効性をチェックします。これが私が使用しているコードです。xmldoc
xmlエンベロープ署名を含むドキュメントオブジェクトです。
NodeList nl = xmldoc.getElementsByTagNameNS
(XMLSignature.XMLNS, "Signature");
DOMValidateContext valContext = new DOMValidateContext
(pbk1, nl.item(0));
ご覧のとおり、valContextには署名要素と公開鍵のみが含まれています(これは署名を検証するために必要になります)。ただし、以下のコードでは、オブジェクトを使用することによってのみvalContext
、参照が検証されていることがわかります。これはどのように可能ですか?参照を検証するには、で参照されている要素を抽出できる実際のxmldocにアクセスし、<reference>
その値のハッシュ/ダイジェストを見つけて、それらをと比較する必要があり<digest value>
ます。
しかし、どういうわけか、以下のコードは機能します。方法がわかりませんか?誰か説明してください。
Iterator i =
signature1.getSignedInfo().getReferences().iterator();
for (int j=0; i.hasNext(); j++) {
boolean refValid = ((Reference)
i.next()).validate(valContext);
System.out.println("ref["+j+"] validity status: " +
refValid);
}