Convert SSL .pem to .p12 with or without OpenSSL

后端 未结 5 556
盖世英雄少女心
盖世英雄少女心 2021-01-30 23:18

I get external .pem files that need to be converted to .p12 files - I add a username and password in the process. (I need to do this to utilize a thir

5条回答
  •  [愿得一人]
    2021-01-30 23:57

    This should do what you want to do (using the BouncyCastle PEMReader as suggested above) -- take a PEM-encoded private key + certificate, and output a PKCS#12 file. Uses the same password for the PKCS12 that was used to protect the private key.

    public static byte[] pemToPKCS12(final String keyFile, final String cerFile, final String password) throws Exception {
        // Get the private key
        FileReader reader = new FileReader(keyFile);
    
        PEMReader pem = new PEMReader(reader, new PasswordFinder() {
            @Override public char[] getPassword() {
                return password.toCharArray();
            }
        });
    
        PrivateKey key = ((KeyPair)pem.readObject()).getPrivate();
    
        pem.close();
        reader.close();
    
        // Get the certificate      
        reader = new FileReader(cerFile);
        pem = new PEMReader(reader);
    
        X509Certificate cert = (X509Certificate)pem.readObject();
    
        pem.close();
        reader.close();
    
        // Put them into a PKCS12 keystore and write it to a byte[]
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        KeyStore ks = KeyStore.getInstance("PKCS12");
        ks.load(null);
        ks.setKeyEntry("alias", (Key)key, password.toCharArray(), new java.security.cert.Certificate[]{cert});
        ks.store(bos, password.toCharArray());
        bos.close();
        return bos.toByteArray();
    }
    

提交回复
热议问题