pdf - 如何使用 Bouncy CaSTLe 构建 RFC 3161 时间戳

标签 pdf timestamp bouncycastle pki rfc3161

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

你能指出我正确的方向吗?

最佳答案

可以使用 BouncycaSTLe 库生成 RFC3161 时间戳 token 。

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

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

然后生成 token
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();

关于pdf - 如何使用 Bouncy CaSTLe 构建 RFC 3161 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21376359/

相关文章:

sql - 你能在 PostgreSQL 中定义一个自定义的 "week"吗?

java - 如何在 Java 中从 X509Certificate 获取 CRL

c# - .NET ECDiffieHellmanCng与BouncyCaSTLe Core兼容协议(protocol)

java - 找不到 org.bouncycaSTLe.cert.ocsp.BasicOCSPResp 的类文件

python - 有关破译时髦文件时间戳格式的提示?

HTML 嵌入式 PDF iframe

html - 生成单文件 HTML 代码文档

pdf - iText 中的特殊字符

swift - nsprintoperation - 检查用户选择了什么

node.js - 在 Node.js 中访问 HTTP 请求的时间戳