Last active
July 12, 2022 14:02
-
-
Save queerzard/a617c1d6fff118bd2f3cccffc8057a92 to your computer and use it in GitHub Desktop.
A Java Class to generate SSL Certificates with KeyTool for Linux Systems (Builder Pattern)
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 lombok.*; | |
import java.security.KeyStore; | |
public class KeyTool4J { | |
@Getter private String certificateOwner = "unknown"; | |
@Getter private String organizationalUnit = "unknown"; | |
@Getter private String organizationName = "unknown"; | |
@Getter private String localityName = "unknown"; | |
@Getter private String provinceName = "unknown"; | |
@Getter private String twoLetterCountryCode = "unknown"; | |
@Getter private String password = ""; | |
@Getter private String fileName = "certificate_" + System.currentTimeMillis() + ".jks"; | |
@Getter private String alias = "self_signed_cert"; | |
public KeyTool4J(){ | |
} | |
public KeyTool4J setCertificateOwner(String firstName, String lastName){ | |
this.certificateOwner = firstName + " " + lastName; | |
return this; | |
} | |
public KeyTool4J setOrganizationalUnit(String ou){ | |
this.organizationalUnit = ou; | |
return this; | |
} | |
public KeyTool4J setOrganizationName(String organizationName){ | |
this.organizationName = organizationName; | |
return this; | |
} | |
public KeyTool4J setLocalityName(String localityName){ | |
this.localityName = localityName; | |
return this; | |
} | |
public KeyTool4J setProvinceName(String provinceName){ | |
this.provinceName = provinceName; | |
return this; | |
} | |
public KeyTool4J setTwoLetterCountryCode(String tlcc){ | |
this.twoLetterCountryCode = tlcc; | |
return this; | |
} | |
public KeyTool4J setPassword(String password){ | |
this.password = password; | |
return this; | |
} | |
public KeyTool4J setFileName(String fileName){ | |
this.fileName = fileName; | |
return this; | |
} | |
public KeyTool4J setAlias(String alias){ | |
this.alias = alias; | |
return this; | |
} | |
public void build(){ | |
unixBash(System.getProperty("user.dir"), "keytool -genkey -alias " + this.alias + " \\\n" + | |
" -keyalg RSA -keystore " + this.fileName + " \\\n" + | |
" -dname \"CN=" + this.certificateOwner + ", OU=" + this.organizationalUnit + ", O=" + this.organizationName + ", " + | |
"L=" + this.localityName + ", S=" + this.provinceName + ", C=" + this.twoLetterCountryCode + "\" \\\n" + | |
" -storepass " + this.password + " -keypass " + this.password); | |
System.out.println("Built!"); | |
} | |
public String toString(){ | |
return ""; | |
} | |
@SneakyThrows | |
public static String[] unixBash(String directory, String bash) { | |
ProcessBuilder processBuilder = new ProcessBuilder(); | |
processBuilder.command("bash", "-c", bash); | |
processBuilder.directory(new File(directory)); | |
Process process = processBuilder.start(); | |
StringBuilder stringBuilder = new StringBuilder(); | |
BufferedReader bufferedReader; | |
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); | |
String line; | |
while ((line = bufferedReader.readLine()) != null) | |
stringBuilder.append(line + "\n"); | |
int exitCode = process.waitFor(); | |
if (exitCode == 0) | |
return stringBuilder.toString().split("\n"); | |
String error; | |
bufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); | |
while ((error = bufferedReader.readLine()) != null) | |
stringBuilder.append(error + "\n"); | |
return stringBuilder.toString().split("\n"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment