2014-01-27 123 views
3

我們需要基於X509證書來實現我們自己的PDF時間戳機制來構建一個RFC 3161時間戳(當然也包括私有密鑰)和RFC 3161我GOOGLE了,問here on SO和妥善的解決辦法是重新實施TSAClient課程,爲我們在本地做時間戳(沒有在線TSA)。但是,除了SecureBlackbox組件外,我沒有發現任何RFC 3161的實現。 Bouncy Castle圖書館應該可能,但我不知道如何。如何使用充氣城堡

能否請你點我正確的方向?

回答

5

,能夠生成具有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();