将一个或多个X509Certificates保存到PKCS#7文件/容器?

时间:2015-05-15 16:23:35

标签: java export x509certificate pkcs#7

我有多个X509Certificates。现在我想将其中一个或多个保存到带有Java的PKCS#7文件/容器中。

我可以从PKCS#7文件中读取一个或多个证书,但我不知道如何将它们写入PKCS#7文件。我只知道此文件中的数据是经过PEM编码的,并且此数据位于代码--- BEGINN PKCS7 ------ END PKCS7 ---内。

1 个答案:

答案 0 :(得分:1)

首先,阅读整个RFC for PKCS#7 / CMS以便更好地理解。请按照RFC link进行操作。

为了便于实现,请使用bouncycastle库。现在,有不同类型的PKCS#7.CMS数据(如signedData,envelopedData等)。让我们来看,你想使用signeData格式。然后,您需要生成CMSSignedData数据。为此,您需要准备私钥和证书链。在这里,我假设你已经有了。现在准备CMSProcessableByteArray

CMSProcessableByteArray的示例代码:

CMSProcessableByteArray msg = new CMSProcessableByteArray("Hello World".getBytes());

hen声明CMSSignedDataGenerator并添加signerInfo和证书。

CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(......));
gen.addCertificates(certs);

然后使用CMSSignedDataGenerator和CMSProcessableByteArray生成CMSSignedData。

CMSSignedData cmsData = gen.generate(msg, true);

现在,您可以使用两种格式编写文件:Pem和Der。你想写pem编码。那么,将整个数据放在ContentInfo中。

ContentInfo ci = ContentInfo.getInstance(ASN1Object.fromByteArray(signedData));

现在,使用Pemwriter以p7b格式编写contentInfo对象。打开文件并查看用户证书。

PEMWriter pemWriter = new PEMWriter(new FileWriter("Demo-CMS.p7b"));
pemWriter.writeObject(obj);
pemWriter.flush();
pemWriter.close();