Как создать файл сертификата pfx в java?

Мне нужно создать файл сертификата pfx с паролем в Java. Я ищу в Google и могу создать файл сертификата "cer" в http://www.java2s.com/Tutorial/Java/0490__Security/CreatingaSelfSignedVersion3Certificate.htm

Я добавляю код в основную

FileOutputStream fos = null;
fos = new FileOutputStream("public.cer");
fos.write(cert.getEncoded());
fos.close();

это работает только без пароля.

2 ответа

Решение

Обычно .pfx или же pkcs12 Это хранилище ключей для сохранения пар открытых и закрытых ключей. Кроме того, если вы используете RSA пара ключей с общедоступным сертификатом, как в вашем примере ссылки, обычно этот сертификат должен быть выдан центром сертификации, в любом случае, я полагаю, что вы пытаетесь сохранить самоподписанный сертификат, для этого вам необходимо использовать java.security.KeyStore класс не FileOutputStream Прямо, я дам вам образец:

import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.cert.X509Certificate;

....

X509Certificate cert = // your certificate...
// generate a keystore instance
KeyStore ks = KeyStore.getInstance("PKCS12");
// save your cert inside the keystore
ks.setCertificateEntry("YourCertAlias", cert);
// create the outputstream to store the keystore
FileOutputStream fos = new FileOutputStream("/your_path/keystore.pfx");
// store the keystore protected with password
ks.store(fos, "yourPassword".toCharArray());

....

Как я обычно говорил, в хранилище ключей вы храните пары ключей, обычно используя: setKeyEntry(String alias, byte[] key, Certificate[] chain) или же setKeyEntry(String alias, Key key, char[] password, Certificate[] chain) однако с помощью приведенного выше кода вы можете хранить сертификат в хранилище ключей, защищая его паролем. Для получения дополнительной информации взгляните на: java keystore api.

Надеюсь это поможет,

У меня есть мой ответ:

    KeyPair pair = generateRSAKeyPair();
    X509Certificate cert = generateV3Certificate(pair); 
    KeyStore ks = KeyStore.getInstance("PKCS12", "BC");   
    char[] password = "abc".toCharArray();
    ks.load(null,null);
    ks.setCertificateEntry(cert.getSerialNumber().toString(), cert);
    ks.setKeyEntry(cert.getSerialNumber().toString(), pair.getPrivate(), password, new Certificate[]{cert,cert});
    FileOutputStream fos = new FileOutputStream("keystore.pfx");
    ks.store(fos, password);
    fos.close();
Другие вопросы по тегам