chore: Rename certificate information to be more versatile to use

This commit is contained in:
Magnus Leßmann (@MarkL4YG) 2024-11-23 20:52:15 +01:00
parent f1135c54fa
commit fc4ea17cf3
7 changed files with 93 additions and 90 deletions

View file

@ -1,15 +1,26 @@
package de.mlessmann.certassist.openssl;
import static de.mlessmann.certassist.Constants.CERTASSIST_TMP_PREFIX;
import static java.util.concurrent.TimeUnit.*;
import static org.slf4j.LoggerFactory.getLogger;
import de.mlessmann.certassist.DeleteRecursiveFileVisitor;
import de.mlessmann.certassist.except.CommandLineOperationException;
import de.mlessmann.certassist.except.UnresolvableCLIDependency;
import de.mlessmann.certassist.openssl.CertificateRequest.RequestType;
import de.mlessmann.certassist.openssl.CertificateSubject.CertificateSubjectBuilder;
import de.mlessmann.certassist.models.CertificateInfo;
import de.mlessmann.certassist.models.CertificateInfo.RequestType;
import de.mlessmann.certassist.models.CertificateInfoExtension;
import de.mlessmann.certassist.models.CertificateInfoSubject;
import de.mlessmann.certassist.models.CertificateInfoSubject.CertificateInfoSubjectBuilder;
import de.mlessmann.certassist.service.ExecutableResolver;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.zeroturnaround.exec.ProcessExecutor;
import org.zeroturnaround.exec.ProcessResult;
import org.zeroturnaround.exec.StartedProcess;
import org.zeroturnaround.exec.stream.slf4j.Slf4jStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
@ -25,17 +36,10 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.zeroturnaround.exec.ProcessExecutor;
import org.zeroturnaround.exec.ProcessResult;
import org.zeroturnaround.exec.StartedProcess;
import org.zeroturnaround.exec.stream.slf4j.Slf4jStream;
import static de.mlessmann.certassist.Constants.CERTASSIST_TMP_PREFIX;
import static java.util.concurrent.TimeUnit.*;
import static org.slf4j.LoggerFactory.getLogger;
@Service
@RequiredArgsConstructor
@ -65,7 +69,7 @@ public class OpenSSLService {
private final CertificatePasswordProvider passwordProvider;
private final CertificateProvider certificateProvider;
private static String buildSubjectArg(CertificateRequest request) {
private static String buildSubjectArg(CertificateInfo request) {
String certSubject = OPENSSL_CERT_SUBJECT_TEMPLATE
.replace("ISO-COUNTRY", request.getSubject().getCountry())
.replace("STATE", request.getSubject().getState())
@ -103,7 +107,7 @@ public class OpenSSLService {
}
@NonNull
public OpenSSLCertificateResult createCertificate(CertificateRequest request) throws CommandLineOperationException {
public OpenSSLCertificateResult createCertificate(CertificateInfo request) throws CommandLineOperationException {
Path tmpDir;
try {
tmpDir = Files.createTempDirectory(CERTASSIST_TMP_PREFIX);
@ -150,7 +154,7 @@ public class OpenSSLService {
}
}
private Path createKeyfile(CertificateRequest request, Path outFile, String filePassword)
private Path createKeyfile(CertificateInfo request, Path outFile, String filePassword)
throws CommandLineOperationException {
Path keyFile = outFile.toAbsolutePath();
log.debug("Writing new certificate key to {}", keyFile);
@ -182,7 +186,7 @@ public class OpenSSLService {
return keyFile;
}
private Path createCertificate(CertificateRequest request, Path keyFile, Path outFile, String keyPassphrase)
private Path createCertificate(CertificateInfo request, Path keyFile, Path outFile, String keyPassphrase)
throws CommandLineOperationException {
log.debug("Writing new certificate file {}", outFile);
@ -222,7 +226,7 @@ public class OpenSSLService {
return outFile;
}
private Path createSigningRequest(CertificateRequest request, Path keyFile, Path outFile, String certPassword)
private Path createSigningRequest(CertificateInfo request, Path keyFile, Path outFile, String certPassword)
throws CommandLineOperationException {
log.atDebug().log("Writing new certificate signing request file {}", outFile);
@ -363,7 +367,7 @@ public class OpenSSLService {
}
private Path signCertificate(
CertificateRequest request,
CertificateInfo request,
Path caCert,
Path caKey,
String caKeyPassphrase,
@ -377,7 +381,7 @@ public class OpenSSLService {
String extContent = CSR_EXT_TEMPLATE;
List<String> altNames = Optional
.ofNullable(request.getExtension())
.map(CertificateRequestExtension::getAlternativeNames)
.map(CertificateInfoExtension::getAlternativeDnsNames)
.orElse(List.of());
if (!altNames.isEmpty()) {
AtomicInteger counter = new AtomicInteger(1);
@ -489,7 +493,7 @@ public class OpenSSLService {
}
}
public CertificateRequest getCertificateInfo(Path path) throws CommandLineOperationException {
public CertificateInfo getCertificateInfo(Path path) throws CommandLineOperationException {
StartedProcess infoProc = null;
try {
infoProc =
@ -563,14 +567,14 @@ public class OpenSSLService {
}
}
private CertificateRequest getCertificateInfo(String[] lines) {
var builder = CertificateRequest.builder();
private CertificateInfo getCertificateInfo(String[] lines) {
var builder = CertificateInfo.builder();
boolean hasIssuer = false;
for (int i = 0; i < lines.length; i++) {
String line = lines[i];
if (line.startsWith("subject=")) {
CertificateSubjectBuilder subjectBuilder = CertificateSubject.builder();
var subjectBuilder = CertificateInfoSubject.builder();
line = lines[++i];
while (line.startsWith(" ")) {
@ -580,7 +584,7 @@ public class OpenSSLService {
builder = builder.subject(subjectBuilder);
} else if (line.startsWith("issuer=")) {
hasIssuer = true;
CertificateSubjectBuilder issuerBuilder = CertificateSubject.builder();
var issuerBuilder = CertificateInfoSubject.builder();
line = lines[++i];
while (line.startsWith(" ")) {
@ -591,7 +595,7 @@ public class OpenSSLService {
builder = builder.issuer(issuerBuilder);
} else if (line.startsWith("X509v3 Subject Alternative Name")) {
String[] altNames = lines[++i].split(",");
builder = builder.extension(CertificateRequestExtension.builder().alternativeNames(altNames));
builder = builder.extension(CertificateInfoExtension.builder().alternativeDnsNames(altNames));
}
}
@ -599,7 +603,7 @@ public class OpenSSLService {
return builder.build();
}
private CertificateSubjectBuilder readSubjectInfo(String line, CertificateSubjectBuilder builder) {
private CertificateInfoSubjectBuilder readSubjectInfo(String line, CertificateInfoSubjectBuilder builder) {
String[] parts = line.split("=", 2);
if (parts.length != 2) {
return builder;