javax.xml.crypto.dsig を使用して、公開鍵を指定せずに XMLSignature をアンマーシャリングして検証するにはどうすればよいですか? 公開鍵は署名済みの xml にあるようですが、それを取得する方法がわかりません。
DOMValidateContext valContext = new DOMValidateContext(key,signatureNode);
XMLSignature signature = fac.unmarshalXMLSignature(valContext);
boolean coreValidity = signature.validate(valContext);
私が知る限り、キーの代わりに KeySelector を DOMValidateContext に渡す必要があります。ただし、KeySelector の実装方法がわかりません。
KeySelector の実装方法について私が見つけた唯一の例を次に示し ます。
残念ながら、うまくいきません。その実装では、次のことを行いますが、KeyValue 要素がないため、常に失敗します (KeyValue 要素の代わりに、それらからの鍵)。
List list = keyInfo.getContent();
for (int i = 0; i < list.size(); i++) {
XMLStructure xs = (XMLStructure) list.get(i);
if(xs instanceof KeyValue) {
PublicKey pk = null;
try {
pk = ((KeyValue) xs).getPublicKey();
} catch (KeyException ke) {
throw new KeySelectorException(ke);
}
// make sure algorithm is compatible with method
if (algEquals(sm.getAlgorithm(), pk.getAlgorithm())) {
return new SimpleKeySelectorResult(pk);
}
}
}
throw new KeySelectorException("No KeyValue element found!");
それで、これを行う方法はありますか?公開鍵がなくても xml ファイルの署名を検証できるようにしたいと考えています。XMLから公開鍵を取得したいだけです。