Skip to content

Instantly share code, notes, and snippets.

@dimhold
Last active March 5, 2021 09:48
Show Gist options
  • Save dimhold/03546c2207995bb9be92 to your computer and use it in GitHub Desktop.
Save dimhold/03546c2207995bb9be92 to your computer and use it in GitHub Desktop.
Convert der to jks
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