提取有关签名的信息 - Cades & Pades (Java)



我有一份用1个Pades签名和2个Cades名者的信息。

我使用CMSSignedData(弹性城堡库(,但当我尝试获取信息时,我只获取有关最后一个签名的信息。

byte[] buffer = new byte[(int) tmpFile.length()];
DataInputStream dataIn = new DataInputStream(new FileInputStream(tmpFile));
dataIn.readFully(buffer);
dataIn.close();

CMSSignedData signature = new CMSSignedData(buffer);
Store cs = signature.getCertificates();
SignerInformationStore signers = signature.getSignerInfos();
String hashOriginalFile = DigestUtils.sha256Hex(
(byte[])signature.getSignedContent().getContent());
List<SignInfo> certificatesInfo = signers.getSigners().stream()
.map(si -> cs.getMatches(si.getSID()))
.flatMap(Collection::stream)
.map(o -> (X509CertificateHolder) o)
.map(cert -> new SignInfo(hashOriginalFile, getCommonName(cert.getSubject()), cert.getIssuer().toString(), null, null))
.collect(Collectors.toList());

是否有方法获取所有签名信息?甚至使用另一个库。

谢谢!

我认为这取决于文档的签名方式:

  • 如果以并行方式添加签名(3个签名覆盖相同的文档哈希(,则应该能够使用代码看到它们
  • 如果按顺序添加签名(第一次签名的原始文档,然后再次签名的文档,等等(,则应该实现递归方法

我建议看一下SD-DSS库,它提供了开箱即用的功能-请参阅https://github.com/esig/dss。您可能需要验证签名才能检索此信息。

相关内容

  • 没有找到相关文章

最新更新