如何将 java KeyStore 转换为 PKCS7 .p7b 文件?
How to convert java KeyStore to PKCS7 .p7b file?
Convert X509 to PKCS7
我已经尝试了上面的两个答案,但我觉得这些不适合我的需要,因为根据下面的 link 我可以总结 PKCS7 有两个用途,
- 创建签名、摘要等 CMS(加密消息语法)
- 证书容器
我的需求更多的是第二点。我只想使用我在 KeyStore 对象中拥有的所有证书创建一个 .p7b 文件。由于 PKCS7 不能包含私钥。以上两个答案会生成签名,而不会生成签名。我错过了什么吗?这是继续前进的方式还是有其他方式?
我可以使用
从 .p7b 文件中提取证书
FileInputStream is = new FileInputStream( "cert.pkcs7" );
CertificateFactory cf = CertificateFactory.getInstance( "X.509" );
Iterator i = cf.generateCertificates( is ).iterator();
while ( i.hasNext() )
{
Certificate c = (Certificate)i.next();
System.out.println(Base64.getEncoder.encodeToString(c.getEncoded());
}
我在问如何做相反的事情,即从 Certificate[]
或 Java KeyStore
[=18 创建一个 .p7b 文件=]
好的,我找到了解决方案:
在这里我们可以创建我所要求的,但我仍然得到生成的签名数据。我不想要那个。我已经拥有的一个简单的 .p7b 包没有 signerInfo,这个解决方案创建的 .p7b 会有吗?
这样做正确吗?
在此 中找到解决方案:
代码:
//Export a certificate list to PKCS#7
public static byte[] exportCertificatesAsPkcs7(X509Certificate certs[]) throws Exception {
List certList = new ArrayList();
for (X509Certificate certificate: certs){
certList.add(new X509CertificateHolder(certificate.getEncoded()));
}
Store certStore = new JcaCertStore(certList);
CMSProcessableByteArray msg = new CMSProcessableByteArray("Hello World".getBytes());
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
gen.addCertificates(certStore);
CMSSignedData data = gen.generate(msg, "BC");
return data.getEncoded();
}
与 PKCS7 相关的有用链接:
Convert X509 to PKCS7
Convert X509 to PKCS7
我已经尝试了上面的两个答案,但我觉得这些不适合我的需要,因为根据下面的 link 我可以总结 PKCS7 有两个用途,
- 创建签名、摘要等 CMS(加密消息语法)
- 证书容器
我的需求更多的是第二点。我只想使用我在 KeyStore 对象中拥有的所有证书创建一个 .p7b 文件。由于 PKCS7 不能包含私钥。以上两个答案会生成签名,而不会生成签名。我错过了什么吗?这是继续前进的方式还是有其他方式?
我可以使用
从 .p7b 文件中提取证书FileInputStream is = new FileInputStream( "cert.pkcs7" );
CertificateFactory cf = CertificateFactory.getInstance( "X.509" );
Iterator i = cf.generateCertificates( is ).iterator();
while ( i.hasNext() )
{
Certificate c = (Certificate)i.next();
System.out.println(Base64.getEncoder.encodeToString(c.getEncoded());
}
我在问如何做相反的事情,即从 Certificate[]
或 Java KeyStore
[=18 创建一个 .p7b 文件=]
好的,我找到了解决方案:
这样做正确吗?
在此
代码:
//Export a certificate list to PKCS#7
public static byte[] exportCertificatesAsPkcs7(X509Certificate certs[]) throws Exception {
List certList = new ArrayList();
for (X509Certificate certificate: certs){
certList.add(new X509CertificateHolder(certificate.getEncoded()));
}
Store certStore = new JcaCertStore(certList);
CMSProcessableByteArray msg = new CMSProcessableByteArray("Hello World".getBytes());
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
gen.addCertificates(certStore);
CMSSignedData data = gen.generate(msg, "BC");
return data.getEncoded();
}
与 PKCS7 相关的有用链接:
Convert X509 to PKCS7