5

X509証明書(もちろん秘密鍵を含む)とRFC 3161に基づいて独自のPDFタイムスタンプメカニズムを実装する必要があります。私はGoogleで検索してここでSOについて質問しました。適切な解決策は、TSAClientクラスを再実装してローカルでタイムスタンプを行うことです。 (オンライン TSA なし)。ただし、SecureBlackbox コンポーネントを除いて、RFC 3161 の実装は見つかりませんでした。Bouncy Castle ライブラリを使用すれば可能ですが、方法がわかりません。

正しい方向を教えてください。

4

1 に答える 1

7

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();
于 2014-02-05T15:05:34.083 に答える