Skip to content

Instantly share code, notes, and snippets.

@queerzard
Last active July 12, 2022 14:02
Show Gist options
  • Save queerzard/a617c1d6fff118bd2f3cccffc8057a92 to your computer and use it in GitHub Desktop.
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)
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