我们需要实现基于X509证书(当然包括私钥)和RFC 3161的PDF时间戳机制。我已经搜索并询问了here on SO,正确的解决方案是重新实现TSAClient类,为我们在本地完成时间戳(没有在线TSA)。然而,除了SecureBlackbox组件之外,我没有找到RFC 3161的任何实现。这应该是有可能的,但我不知道怎么做。
请你指出正确的方向好吗?
发布于 2014-02-05 15:05:34
可以使用Bouncy城堡库生成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();
https://stackoverflow.com/questions/21376359
复制相似问题