java - 如何使用 文件系统 中的. cer 文件验证 TimeStampToken?

  显示原文与译文双语对照的内容

在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);

时间: 作者:

试试这个


TimeStampToken token = new TimeStampToken(new CMSSignedData(response));

InputStream in = new FileInputStream("tsp.cer");
CertificateFactory factory = CertificateFactory.getInstance("X.509");

X509Certificate cert = (X509Certificate) factory.generateCertificate(in);

//RSA Signature processing with BC
X509CertificateHolder holder = new X509CertificateHolder(cert.getEncoded());
SignerInformationVerifier siv = new BcRSASignerInfoVerifierBuilder(new DefaultDigestAlgorithmIdentifierFinder(), new BcDigestCalculatorProvider()).build(holder);

//Signature processing with JCA and other provider
//X509CertificateHolder holderJca = new JcaX509CertificateHolder(cert);
//SignerInformationVerifier sivJca = new JcaSimpleSignerInfoVerifierBuilder().setProvider("anotherprovider").build(holderJca);

token.validate(siv);

查看版本 2 API object SignerInformation对象部分关于使用 BC API进行签名验证的其他信息的文档。

你正在以正确的方式创建 SignerInformationVerifier,你可以在示例代码中另外找到一种方法。

作者:
...