使用 java 将 .cer 转换为 .jks

Posted

技术标签:

【中文标题】使用 java 将 .cer 转换为 .jks【英文标题】:Converting .cer to .jks using java 【发布时间】:2015-01-23 17:19:39 【问题描述】:

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

【问题讨论】:

这不是转换。这是一个进口。 可能重复***.com/questions/4325263/… 【参考方案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 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);
    

现在您可以使用它来将其加载到密钥库中

    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 将 .cer 转换为 .jks的主要内容,如果未能解决你的问题,请参考以下文章

如何将rootca.cer,subca.cer和certificate.crt导入jks

P12,JKS,CER,RFX,PEM转换速记

证书 pem 转 jks

windows生成jks文件并且生成cer证书

java生成 *.crt和*.key文件与*.keystore *.jks文件的转换

java生成 *.crt和*.key文件与*.keystore *.jks文件的转换