java - 使用 java 将 .cer 转换为 .jks

标签 java x509certificate jks cer

我想将扩展名为 .cer 的文件转换为 .jks 文件。有人可以帮我解决这个问题吗? 我用谷歌搜索但没有得到太多信息。 即使是教程或链接也可以。 我猜使用了Java Key Store。 谢谢。

最佳答案

我使用 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 X509Certificate。您可以使用转换器将其转换为 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);
    }
}

现在您可以使用它来将其加载到 keystore 中

    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 实例。

关于java - 使用 java 将 .cer 转换为 .jks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27131210/

相关文章:

java - 为什么在 Java 中 char 到 int 的转换有效而不是 char 到 Integer

javascript - 如何使用 nodejs 从 Windows 证书存储中读取私钥缓冲区?

java - SSLConnectionSocketFactory 始终返回 400(2 路 ssl 客户端证书)未收到证书

java - 如何添加新的 SSL 连接 Spring Boot jks cacerts

java - 对不同的 ssl 证书感到困惑

java - Spring MVC 表

java - 在 hadoop 中将 String 对象转换为 TEXT 对象

java - 通过 Java 访问 Windows 证书存储证书?

java - 矩形内的 libgdx 动画 - 碰撞检测 - 矩形

python - 如何加载 PEM 编码证书链中的所有证书?