如何为 XML DSIG DTO 设置 Java 数字签名

问题描述 投票:0回答:1

我需要通过 REST 发送签名的 XML 消息。 XSD 包含架构 https://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd。我能够成功生成带有签名的 XML 文档并将其写入文件。

我的问题是 XML 签名库 (javax.xml.crypto.dsig) 生成签名作为接口“XMLSignature”。但是从我的 XSD 生成的 DTO 使用 xmldsig-core-schema.xsd 中的 Java 类。

有没有办法让 XML 签名库使用从 XSD 生成的 Java 文件或简单地转换 XMLSignature?

这是从 XSD 生成的类:

java xml xsd digital-signature xml-signature
1个回答
0
投票

我能够通过创建自定义解组器来实现此要求。

这是签名代码,我在其中从包 javax.xml.crypto.dsig 创建一个新的 XMLSignature 对象。用它来签署文件。

最后,使用自定义解组器将文档读取为 DTO,并最终获得要分配给 JAXB 生成的 DTO 的签名对象。

XMLSignature signature = signatureFactory.newXMLSignature(signedInfo, ki);

// Marshal, generate, and sign the enveloped signature
signature.sign(dsc);

JAXBElement<?> root = XmlUtils.UNMARSHALLER.unmarshal(getStreamSource(doc), xml.getClass());

xml.setSignature(((Xml) root.getValue()).getSignature());

更详细的解释可以在我的博客中找到:https://www.czetsuyatech.com/2023/02/java-implementation-of-digital-signature-and-x509certificate.html

© www.soinside.com 2019 - 2024. All rights reserved.