Pdf 如何使用Bouncy Castle构建RFC 3161时间戳

Pdf 如何使用Bouncy Castle构建RFC 3161时间戳,pdf,timestamp,bouncycastle,pki,rfc3161,Pdf,Timestamp,Bouncycastle,Pki,Rfc3161,我们需要基于X509证书(当然包括私钥)和RFC361实现我们自己的PDF时间戳机制。我在谷歌上搜索并询问过,正确的解决方案是重新实现TSAClient类,在本地为我们做时间戳(没有在线TSA)。然而,除了SecureBackbox组件之外,我没有找到任何RFC361的实现。有了Bouncy Castle图书馆应该是可能的,但我不知道怎么做 您能告诉我正确的方向吗?可以使用Bouncycastle库生成RFC3161时间戳令牌 首先创建一个TimestampRequest。对于您的情况,它只是摘

我们需要基于X509证书(当然包括私钥)和RFC361实现我们自己的PDF时间戳机制。我在谷歌上搜索并询问过,正确的解决方案是重新实现TSAClient类,在本地为我们做时间戳(没有在线TSA)。然而,除了SecureBackbox组件之外,我没有找到任何RFC361的实现。有了Bouncy Castle图书馆应该是可能的,但我不知道怎么做


您能告诉我正确的方向吗?

可以使用Bouncycastle库生成RFC3161时间戳令牌

首先创建一个TimestampRequest。对于您的情况,它只是摘要算法和摘要值的包装器

byte[] document = /* ... */
byte[] digest = MessageDigest.getInstance("SHA256").digest(document);
TimeStampRequestGenerator tsReqGen = new TimeStampRequestGenerator();
TimeStampRequest tsReq = tsReqGen.generate(CMSAlgorithm.SHA256, digest);
然后生成令牌

DigestCalculator dgCalc = new JcaDigestCalculatorProviderBuilder().build();
ContentSigner signer = new JcaContentSignerBuilder().build(getPrivateKey());
SignerInfoGenerator siGen = new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder()).build(signer, getCertificate());
ASN1ObjectIdentifier policy = new ASN1ObjectIdentifier("1.2.3.4.5.6"); // Replace by your timestamping policy OID
TimeStampTokenGenerator tstGen = new TimeStampTokenGenerator(siGen, dgCalc, policy);
/* Set the parameters e.g. set the accuracy or include the signing certificate */
TimeStampToken tst = tstGen.generate(tsReq, generateSerialNumber(), new Date());
byte[] encoding = tst.getEncoded();

这不是一个适当的代码。许多缺失和不正确的元素。请提供一个工作示例或至少告知占位符的位置(例如,未绑定的变量)