Преобразование.cer в.jks с использованием Java
Я хотел конвертировать файл с расширением.cer в файл.jks. Может кто-нибудь помочь мне с этим? Я гуглил это, но не получил много информации. Даже учебник или ссылка будет в порядке. Я думаю, Java Key Store используется. Благодарю.
1 ответ
Я использую библиотеку BouncyCastle, последняя версия (1.51)
String certificateString = textSerializer.readStringFromFile(context, certificateFileName); //CERT IN PEM
X509CertificateHolder x509CertificateHolder = pemConverter.convertPEMtoX509CertificateHolder(certificateString);
PEMConverter - мой собственный класс, и этот метод выглядит следующим образом
public X509CertificateHolder convertPEMtoX509CertificateHolder(String certPEMData)
throws IOException {
PEMParser pemParser = new PEMParser(new StringReader(certPEMData));
Object parsedObj = pemParser.readObject();
if (parsedObj instanceof X509CertificateHolder) {
X509CertificateHolder x509CertificateHolder = (X509CertificateHolder) parsedObj;
return x509CertificateHolder;
} else {
System.out.println("The object " + parsedObj.toString() + " is not an X509CertificateHolder.");
}
}
Это дает вам сертификат BouncyCastle X509. Вы можете преобразовать это в Сертификат JCE с конвертером.
public X509Certificate convertToJceX509Certificate(X509CertificateHolder x509CertificateHolder) //java.security.cert.x509certificate
{
try
{
return new JcaX509CertificateConverter()
.setProvider(BouncyCastleProvider.PROVIDER_NAME)
.getCertificate(x509CertificateHolder);
}
catch (CertificateException e)
{
log.error("Error during BC -> JCA conversion of Certificate.", e);
throw new RuntimeException(e);
}
}
Теперь вы можете использовать это, чтобы загрузить его в хранилище ключей
KeyPair keyPair = this.keyPairReader.readKeyPairFromFile(context, keyPairFileName);
PrivateKey privateKey = keyPair.getPrivate();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
KeyStore ks = KeyStore.getInstance("PKCS12", BouncyCastleProvider.PROVIDER_NAME);
ks.load(null);
ks.setKeyEntry("key-alias", (Key) privateKey, password.toCharArray(),
new java.security.cert.Certificate[] { certificate });
ks.store(bos, password.toCharArray());
bos.close();
Log.d(PKCS12KeyStoreExporter.class.getName(), "Export to byte array complete.");
}
catch(...)
{
//...
}
return bos.toByteArray();
И это byte[]
ваш файл PKCS12. Однако единственное отличие для JKS состоит в том, чтобы использовать стандартного провайдера JCE и получить JKS
Экземпляр KeyStore вместо PKCS12
один.