在 Java 中使用 XAdES-EPES 签署 XML

Signing XML with XAdES-EPES in Java

我目前正在研究我所在国家/地区的一些法律要求(电子发票),但我卡在了签名部分,这里是背景:

  1. 政府为每个用户提供.p12证书文件
  2. 生成 XML 后,必须根据前面提到的 .p12 证书使用 XAdES-EPES 对其进行签名。

我不太了解证书和安全工件,我找到了一个名为 java 的库:​​Xades4J 但是大多数示例都提到了 KeyStore 和 TSA(顺便说一句,没有真正理解什么是 TSA),我的场景使用起来似乎很简单,但我相信提到的大多数例子都太复杂了。

任何人都可以帮助我了解这些概念and/or提供一个示例,说明如何使用已有 p12 文件的 XAdES-EPES 进行签名吗?

我看到了一些我也会测试的 C# 示例,我主要是在 Java.

中编码

提前致谢

让我们从头开始。

KeyStore:在一个简单的概念中,它是您存储证书的地方,在签名过程之前,您必须 select 通常从 KeyStore 中提取的证书 -> Here you get a complete perspective about what is a keyStore.

TSA : Time Stamp Autoriry,这是一个外部实体,如果你需要政府接受你的签名,它必须是一个官方实体。这将为您提供一个时间戳标记,并将向您之前的签名添加额外信息,以确保您的证书有效并且签名在该时间段内是正确的。 Here is a close context to extend your information about signatures

Take in mind that XAdES-EPES is deprecated, you should use instead XAdES-A (if you need periodical timestamping) or AdES-LTA.

如果且仅当您的申请在西班牙具有法律背景时,您可以使用此工具来完成您需要的工作:Sing and validate signatures

希望这对您有所帮助。

最近,在 xades4j Github 问题中,围绕与您的要求非常相似的场景进行了讨论。检查此问题:

https://github.com/luisgoncalves/xades4j/issues/134

它包括使用 certificate/key 的 p12 文件的示例代码。 希望这有帮助。