Java 是否将一个或多个X509证书保存到PKCS7文件/容器?

Java 是否将一个或多个X509证书保存到PKCS7文件/容器?,java,export,x509certificate,pkcs#7,Java,Export,X509certificate,Pkcs#7,我有多张X509证书。现在我想用Java将其中一个或多个文件保存到PKCS7文件/容器中 我可以从PKCS7文件中读取一个或多个证书,但我不知道如何将它们写入PKCS7文件。我只知道这个文件中的数据是PEM编码的,并且这些数据在标记中——BEGINN PKCS7——和——END PKCS7——。首先,阅读整个RFC for PKCS7/CMS,以便更好地理解。请跟我来。 为了便于实现,请使用bouncycastle库。现在,有不同类型的PKCS7.CMS数据,如signedData、envel

我有多张X509证书。现在我想用Java将其中一个或多个文件保存到PKCS7文件/容器中


我可以从PKCS7文件中读取一个或多个证书,但我不知道如何将它们写入PKCS7文件。我只知道这个文件中的数据是PEM编码的,并且这些数据在标记中——BEGINN PKCS7——和——END PKCS7——。

首先,阅读整个RFC for PKCS7/CMS,以便更好地理解。请跟我来。

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

CMSProcessableByteArray的示例代码:

CMSProcessableByteArray msg = new CMSProcessableByteArray("Hello World".getBytes());
然后声明CMSSignedDataGenerator并添加签名信息和证书

CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(......));
gen.addCertificates(certs);
PEMWriter pemWriter = new PEMWriter(new FileWriter("Demo-CMS.p7b"));
pemWriter.writeObject(obj);
pemWriter.flush();
pemWriter.close();
然后使用CMSSignedDataGenerator和CMSProcessableByteArray生成CMSSignedData

CMSSignedData cmsData = gen.generate(msg, true);
现在,有两种格式供您编写文件:Pem和Der。你想用pem编码写。然后,将整个数据放在ContentInfo中

ContentInfo ci = ContentInfo.getInstance(ASN1Object.fromByteArray(signedData));
现在,使用Pemwriter以p7b格式编写contentInfo对象。打开文件并查看用户证书

CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(......));
gen.addCertificates(certs);
PEMWriter pemWriter = new PEMWriter(new FileWriter("Demo-CMS.p7b"));
pemWriter.writeObject(obj);
pemWriter.flush();
pemWriter.close();