繁体   English   中英

XML数字签名验证

[英]XML Digital Signature validation

我正在尝试验证XML签名。

根据本教程进行的验证工作正常。

但是我也尝试了第二种方法。 为了使用Signature类的verify方法进行验证 ,我从xml文件中提取了签名和证书,并且执行了以下操作:

    public static boolean checkSignedFile(byte[] data, byte[] sigToVerify,
        byte[] cert, String algorithm) throws CertificateException,
        NoSuchAlgorithmException, InvalidKeyException, SignatureException {
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    Certificate c = (Certificate) cf
            .generateCertificate(new ByteArrayInputStream(cert));
    PublicKey pk = c.getPublicKey();
    Signature sig;
    boolean verifies = false;
    sig = Signature.getInstance(algorithm);
    sig.initVerify(pk);
    sig.update(data);
    verifies = sig.verify(sigToVerify);
    return verifies;
}

结果是错误的。 签名未验证。 可能是什么原因呢?

您不能像这样验证XMLDsig。 这行不通。 签名不是通过原始XML计算的。 它必须经过规范化,摘要化等。

您用于data[]什么? 为正确起见,您几乎必须重写XMLDsig库。

如果data []是已签名XML文件的内容,那么sigToVerify是什么?

XMLSig创建一个Signature-Element(SignedInfo),其中包含要签名的每个Element的摘要以及类似于所使用的规范化/转换算法的元信息。 然后,计算并签名此SignedInfo-Elemnt的摘要。

因此,如果sigToVerify是XMLSignature实现创建的签名,则它不得等于完整XML文件的签名。

是更完整的说明。 如果您有兴趣,请看一下规范

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM