Как преобразовать java KeyStore в файл PKCS7 .p7b? - PullRequest
0 голосов
/ 07 июня 2019

Конвертировать X509 в PKCS7

Создание PKCS7 из хранилища ключей

Я попробовал оба ответа выше, но я чувствую, что они не удовлетворяют моим потребностям, поскольку, основываясь на приведенной ниже ссылке, я могу подвести итог, что PKCS7 используется для двух целей,

  1. Создание подписей, дайджест и т. Д. CMS (синтаксис критографических сообщений)
  2. Контейнер для сертификатов

Исходя из этого я обобщил

Мне нужно больше пункта №2. Я просто хочу создать файл .p7b, используя все сертификаты, которые у меня есть в объекте KeyStore. Поскольку 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());
}

Я спрашиваю, как сделать обратное, т.е. создать файл .p7b из Certificate[] или Java KeyStore

Хорошо, я нашел решение:

Решение В этом мы можем создать то, что я просил, но я все еще получаю подписанные данные, которые генерируются. Я не хочу этого Простой пакет .p7b, который у меня уже есть, не имеет signerInfo. Будет ли он иметь .p7b, созданный этим решением?

Это правильный способ сделать это?

1 Ответ

0 голосов
/ 10 июня 2019

Нашел решение по этой ссылке :

код:

//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:

Преобразование X509 в PKCS7

Создание PKCS7 из хранилища ключей

...