gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:23 31 4
gpt4 key购买 nike

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

查看 BC Version 2 APIs验证 SignerInformation 对象部分有关使用 BC API 进行签名验证的其他信息的文档。

您正在以正确的方式创建 SignerInformationVerifier,您可以在示例代码中找到附加的为基于 JCA/JCE 提供程序的解决方案创建 SignerInformationVerifier 的另一种方法。

关于java - 如何使用文件系统中的 .cer 文件验证 TimeStampToken?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21157637/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com