私はXMLファイルでデジタル署名をいくつか行い、私が署名したXMLを検証したいと思います。私は、Java XMLデジタル署名APIからのコードサンプルを使用していますが、私はXMLの署名を検証するために行くとき、私はちょうどcoreValidityはfalseです。 XMLデジタル署名を確認してください
coreValidityがfalseに署名しましたし、sigValValidityは何だ
真でありますこれらの違いと、なぜcoreValidityがfalseになるのでしょうか?私は何を目にすることができますか?
おかげ
public void verifySignedXML(KeyPair keypair) throws Exception {
String signedFile = "src/test/resources/file.xml";
// Instantiate the document to be validated
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().parse(
new FileInputStream(signedFile));
// Find Signature element
NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS,
"Signature");
if (nl.getLength() == 0) {
throw new Exception("Cannot find Signature element");
}
// Create a DOM XMLSignatureFactory that will be used to unmarshal the
// document containing the XMLSignature
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
if (keypair.getPublic() == null) {
log.error("Public key is null");
//TODO throw exception
}
PublicKey key = keypair.getPublic();
// Create a DOMValidateContext and specify a KeyValue KeySelector
// and document context
DOMValidateContext valContext = new DOMValidateContext(
key, nl.item(0));
// unmarshal the XMLSignature
XMLSignature signature = fac.unmarshalXMLSignature(valContext);
// Validate the XMLSignature (generated above)
boolean coreValidity = signature.validate(valContext);
// Check core validation status
if (coreValidity == false) {
System.err.println("Signature failed core validation");
boolean sv = signature.getSignatureValue().validate(valContext);
System.out.println("signature validation status: " + sv);
// check the validation status of each Reference
Iterator<?> i = signature.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);
}
} else {
System.out.println("Signature passed core validation");
}
}
。 'coreValidity'と' sigValValidity'の名前を知ることはできません – pedrofb
コードで更新された質問 – user3520080
出力には、 "ref [i] validity status:false"のようなものがあります。検証に失敗しました。おそらくダイジェスト計算の問題です。 – Moez