TimeStampToken 类 (bctsp-jdk16-1.46.jar) 中有两种验证方法,其中一种已弃用。
不推荐使用的方法使用 X509Certificate 作为参数,这很容易创建。
InputStream inPFX = getClass().getClassLoader().getResourceAsStream("tsp.cer");
CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC");
X509Certificate cert = (X509Certificate) cf.generateCertificate(inPFX);
// The validate method just takes the X509Certificate object
token.validate(cert, "BC");
新方法使用 SignerInformationVerifier 对象。我找到了一种创建 SignerInformationVerifier 的方法(不确定它是否正确),但我仍然需要一个 X509CertificateHolder 对象。
- 如何从文件系统上的文件(*.cer 文件)创建 X509CertificateHolder
- 这是创建 SignerInformationVerifier 以验证 TimeStampToken 的正确方法吗?
我当前的代码如下所示:
TimeStampToken token = new TimeStampToken(new CMSSignedData(response));
X509CertificateHolder x = // HOW TODO THIS?
// create the SignerInformationVerifier object
DigestAlgorithmIdentifierFinder daif = new DefaultDigestAlgorithmIdentifierFinder();
DigestCalculatorProvider dcp = new BcDigestCalculatorProvider();
SignerInformationVerifier siv = new BcRSASignerInfoVerifierBuilder(daif, dcp).build(x509ch);
// use the new validate method
token.validate(siv);