首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将java KeyStore转换为PKCS7 .p7b文件?

如何将java KeyStore转换为PKCS7 .p7b文件?
EN

Stack Overflow用户
提问于 2019-06-07 10:49:43
回答 1查看 2K关注 0票数 0

Convert X509 to PKCS7

Create PKCS7 from keystore

以上两个答案我都试过了,但我觉得这些并不适合我的需要,因为基于下面的链接,我可以总结一下,PKCS7是用于两个目的的,

  1. 创建签名、摘要等CMS(冷冻信息语法)
  2. 证书容器

Based on this I summarized

我需要更多的是第二点。我只想使用我在.p7b对象中拥有的所有证书创建一个KeyStore文件。因为PKCS7不能包含私钥。以上两个答案会产生一个签名和什么不是。我是不是遗漏了什么?这是前进的路,还是有其他的路?

我可以从.p7b文件中提取证书

代码语言:javascript
复制
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创建.p7b文件。

好的,我找到了解决办法:

在这个Solution中,我们可以创建我所要求的内容,但是我仍然可以获得生成的签名数据。我不想这样。我已经拥有的一个简单的.p7b包没有signerInfo,由这个解决方案创建的.p7b会有吗?

这样做对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-10 15:33:08

在这个link中找到了解决方案

代码:

代码语言:javascript
复制
//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

Create PKCS7 from keystore

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56492886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档