Сохраните pfx сертификат в файл с кодом Java (ejbca)
Я использую EJBCA для генерации сертификата из CommonName. В коде Java я сгенерировал закрытый ключ и открытый ключ, а затем CSR для генерации сертификата. Теперь я сохраняю сертификат в формате PEM (.cer), но мне также нужен закрытый ключ, поэтому я хочу сохранить с расширением.pfx или p12. Как я могу сделать? Это мой фактический код для генерации сертификата:
KeyPair keys;
try {
keys = KeyTools.genKeys("1024", AlgorithmConstants.KEYALGORITHM_RSA);
//SAVE PRIVKEY
//PrivateKey privKey = keys.getPrivate();
//byte[] privateKeyBytes = privKey.getEncoded();
PKCS10CertificationRequest pkcs10 = new PKCS10CertificationRequest("SHA256WithRSA",
CertTools.stringToBcX509Name("CN=NOUSED"), keys.getPublic(), null, keys.getPrivate());
//Print Privatekey
//System.out.println(keys.getPrivate().toString());
CertificateResponse certenv = ws.certificateRequest(user1,
new String(Base64.encode(pkcs10.getEncoded())),
CertificateHelper.CERT_REQ_TYPE_PKCS10,
null,
CertificateHelper.RESPONSETYPE_CERTIFICATE);
//Certificate certenv = ejbcaraws.pkcs10Req("WSTESTUSER1","foo123",new
//String(Base64.encode(pkcs10.getEncoded())),null);
return certenv.getCertificate ();
}catch (Exception e) {}
и с этим я сохраняю сертификат:
File file = new File(path+"/"+ x509Cert.getSubjectDN().toString().replace("CN=", "") +".cer");
FileOutputStream os = new FileOutputStream(file);
//os.write("-----BEGIN CERTIFICATE-----\n".getBytes("US-ASCII"));
//os.write(Base64.encode(x509Cert.getEncoded(), true));
//os.write("-----END CERTIFICATE-----".getBytes("US-ASCII"));
//os.close();
PEMWriter pemWriter = new PEMWriter(new PrintWriter(os));
pemWriter.writeObject(x509Cert);
pemWriter.flush();
pemWriter.close();
1 ответ
Я никогда не пользуюсь EJBCA
Однако, если у вас есть сертификат и закрытый ключ, и вы хотите создать PKCS12
ты можешь использовать setKeyEntry(String alias,byte[] key,Certificate[] chain)
метод из java.security.KeyStore
добавить запись, а затем store(OutputStream stream, char[] password)
способ сохранить PKCS12
на файл (смотрите API для более подробной информации). Ваш код может быть что-то вроде:
import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.Certificate;
public class SamplePKCS12 {
public static void main(String args[]) throws Exception {
String alias = // the alias for your key...
PrivateKey key = // your private key
Certificate[] chain = // an array with your EE certificate to your CA issuer
// create keystore
KeyStore keystore = KeyStore.getInstance("PKCS12");
// add your key and cert
keystore.setKeyEntry(alias, key.getEncoded(), chain);
// save the keystore to file
keystore.store(new FileOutputStream("/tmp/keystore.p12"), "yourPin".toCharArray());
}
}
Обратите внимание, я полагаю, что у вас есть сертификат и закрытый ключ, как вы сказали в своем вопросе. Работать с PKCS12
тебе нужно SunJSSE
провайдер (который обычно загружается по умолчанию), или вы можете использовать BouncyCastle
поставщик.
Надеюсь это поможет,