Last active
March 5, 2021 09:48
-
-
Save dimhold/03546c2207995bb9be92 to your computer and use it in GitHub Desktop.
Convert der to jks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.ByteArrayInputStream; | |
import java.io.FileOutputStream; | |
import java.io.IOException; | |
import java.nio.file.Files; | |
import java.nio.file.Paths; | |
import java.security.KeyFactory; | |
import java.security.KeyStore; | |
import java.security.KeyStoreException; | |
import java.security.NoSuchAlgorithmException; | |
import java.security.PrivateKey; | |
import java.security.cert.Certificate; | |
import java.security.cert.CertificateException; | |
import java.security.cert.CertificateFactory; | |
import java.security.spec.InvalidKeySpecException; | |
import java.security.spec.PKCS8EncodedKeySpec; | |
import java.util.Hashtable; | |
import java.util.Map; | |
public class JKSBuilder { | |
private static String defaultAlias = ""; | |
private static char[] defaultPassword = "".toCharArray(); | |
public static void main(String[] args) { | |
try { | |
Map<String, String> argsMap = parseArgs(args); | |
PrivateKey key = readRSAkey(argsMap.get("key")); | |
Certificate cert = readX509Certificate(argsMap.get("cert")); | |
KeyStore keyStore = makeJKS(key, cert); | |
keyStore.store(new FileOutputStream(argsMap.get("out")), argsMap.get("password").toCharArray()); | |
} catch (InvalidKeySpecException | NoSuchAlgorithmException | IOException | CertificateException | |
| KeyStoreException e) { | |
e.printStackTrace(); | |
} | |
} | |
private static KeyStore makeJKS(PrivateKey key, Certificate cert) throws KeyStoreException, | |
NoSuchAlgorithmException, CertificateException, IOException { | |
KeyStore keyStore = KeyStore.getInstance("JKS"); | |
keyStore.load(null, defaultPassword); | |
keyStore.setKeyEntry(defaultAlias, key, defaultPassword, new Certificate[] { cert }); | |
return keyStore; | |
} | |
public static PrivateKey readRSAkey(String keyPath) throws IOException, InvalidKeySpecException, | |
NoSuchAlgorithmException { | |
return KeyFactory.getInstance("RSA").generatePrivate( | |
new PKCS8EncodedKeySpec(Files.readAllBytes(Paths.get(keyPath)))); | |
} | |
public static Certificate readX509Certificate(String certPath) throws CertificateException, IOException { | |
return CertificateFactory.getInstance("X.509").generateCertificate( | |
new ByteArrayInputStream(Files.readAllBytes(Paths.get(certPath)))); | |
} | |
private static Map<String, String> parseArgs(String[] args) { | |
Map<String, String> argsMap = new Hashtable<String, String>(); | |
for (int i = 0; i < args.length; i += 2) { | |
if ("--key".equals(args[i])) { | |
argsMap.put("key", args[i + 1]); | |
} else if ("--cert".equals(args[i])) { | |
argsMap.put("cert", args[i + 1]); | |
} else if ("--out".equals(args[i])) { | |
argsMap.put("out", args[i + 1]); | |
} else if ("--password".equals(args[i])) { | |
argsMap.put("password", args[i + 1]); | |
} | |
} | |
return argsMap; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment