java - XML 签名验证

标签 java xml x509

我有一个问题,我不知道如何解决。 我的应用程序收到一个(假定)签名的 XML,我必须验证它是否正确。 这是在 XML 中接收的签名部分

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
            <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
            <Reference URI="35121103220612000188550010000000131000009300">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                    <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                <DigestValue>uLZ/66r6OoNLpj5v4cIsrv5zmyc=</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>encoded</SignatureValue>
        <KeyInfo>
            <X509Data>
                <X509Certificate>encoded</X509Certificate>
            </X509Data>
        </KeyInfo>
    </Signature>

我在互联网上找到的所有要验证的东西都需要公钥。但我没有。我只有 DigestValue。 您知道是否可以仅使用 DiggestValue 进行验证吗?

这是我目前所拥有的。问题是从哪里获取 X509KeySelector 的 key

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    DocumentBuilder builder = dbf.newDocumentBuilder();
    Document doc = builder.parse("/home/test.xml");
    Node nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature").item(0);
    DOMValidateContext valContext = new DOMValidateContext(new X509KeySelector(publicKey), nl);
    XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM");
    XMLSignature signature = factory.unmarshalXMLSignature(valContext);
    System.out.println(signature.validate(valContext));

提前致谢。

最佳答案

您从嵌入式 X509 证书中获取 X509 key 。

更新:

在谷歌上搜索“xml signature x509certificate”出现了this page ,这似乎可以为您提供所需的所有答案。

关于java - XML 签名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549936/

相关文章:

java - 刷新客户端凭证流的访问 token

java - 如何在 Java 中将 RGB 图像转换为 CMYK,反之亦然?

xml - 在字符串中反向查找

go - 检查 X509 证书是否与 CertificateRequest (CSR) 匹配

ssl - OpenSSL X509 使用 CA 验证签名

java - 奇怪的 Spring 上下文组件扫描

java - Spring 中的 XSD 客户端

python - 向元素添加注释并使元素文本出现在注释之后

xml - eXist 数据库和 XQuery : xml-root with attribute leads to no results

java - 在捕获模式下使用hoverfly时出现x509错误