From 5c933bd1f7df5d75fc01ca58dabc844f468f04b2 Mon Sep 17 00:00:00 2001 From: Henry Borasch <Henry.Borasch@sinc.de> Date: Tue, 7 Mar 2023 10:50:04 +0100 Subject: [PATCH] moved loading of root certificates to ClientFactory --- .../client/factory/ClientFactory.java | 3 +- .../validation/DefaultValidationService.java | 10 +++--- .../events/SecurityEventTokenServiceTest.java | 4 ++- .../DefaultValidationServiceTest.java | 31 ++++++++++++------- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java b/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java index c4c1ed70b..b1efc7ca4 100644 --- a/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java +++ b/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java @@ -39,6 +39,7 @@ import dev.fitko.fitconnect.core.routing.RouteVerifier; import dev.fitko.fitconnect.core.routing.RoutingApiService; import dev.fitko.fitconnect.core.schema.SchemaResourceProvider; import dev.fitko.fitconnect.core.submission.SubmissionApiService; +import dev.fitko.fitconnect.core.util.FileUtil; import dev.fitko.fitconnect.core.validation.DefaultValidationService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -201,7 +202,7 @@ public final class ClientFactory { } private static ValidationService getValidationService(final ApplicationConfig config, final SchemaProvider schemaProvider, final MessageDigestService messageDigestService) { - return new DefaultValidationService(config, messageDigestService, schemaProvider, PATH_TO_TRUSTED_ROOT_CERTIFICATES); + return new DefaultValidationService(config, messageDigestService, schemaProvider, FileUtil.loadContentOfFilesInDirectory(PATH_TO_TRUSTED_ROOT_CERTIFICATES)); } private static CryptoService getCryptoService(final MessageDigestService messageDigestService) { diff --git a/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java b/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java index da9268e4e..9c5f29a57 100644 --- a/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java +++ b/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java @@ -67,14 +67,14 @@ public class DefaultValidationService implements ValidationService { private final MessageDigestService messageDigestService; private final SchemaProvider schemaProvider; private final ApplicationConfig config; - private final String pathToTrustedRootCertificates; + private final List<String> rootCertificates; public DefaultValidationService(final ApplicationConfig config, final MessageDigestService messageDigestService, - final SchemaProvider schemaProvider, final String pathToTrustedRootCertificates) { + final SchemaProvider schemaProvider, final List<String> rootCertificates) { this.config = config; this.messageDigestService = messageDigestService; this.schemaProvider = schemaProvider; - this.pathToTrustedRootCertificates = pathToTrustedRootCertificates; + this.rootCertificates = rootCertificates; } @Override @@ -239,8 +239,8 @@ public class DefaultValidationService implements ValidationService { private List<String> loadTrustedRootCertificates() { - List<X509Certificate> trustedRootCertificates = FileUtil.loadContentOfFilesInDirectory(this.pathToTrustedRootCertificates) - .stream().map(FileUtil::convertToX509Certificate).collect(Collectors.toList()); + List<X509Certificate> trustedRootCertificates = rootCertificates.stream() + .map(FileUtil::convertToX509Certificate).collect(Collectors.toList()); List<String> encodedCertificates = trustedRootCertificates.stream().map(cert -> { try { return Base64.encode(cert.getEncoded()).toString(); diff --git a/core/src/test/java/dev/fitko/fitconnect/core/events/SecurityEventTokenServiceTest.java b/core/src/test/java/dev/fitko/fitconnect/core/events/SecurityEventTokenServiceTest.java index 15f7f8e50..e47d725e0 100644 --- a/core/src/test/java/dev/fitko/fitconnect/core/events/SecurityEventTokenServiceTest.java +++ b/core/src/test/java/dev/fitko/fitconnect/core/events/SecurityEventTokenServiceTest.java @@ -24,6 +24,7 @@ import dev.fitko.fitconnect.api.services.validation.ValidationService; import dev.fitko.fitconnect.core.crypto.HashService; import dev.fitko.fitconnect.core.crypto.JWECryptoService; import dev.fitko.fitconnect.core.schema.SchemaResourceProvider; +import dev.fitko.fitconnect.core.util.FileUtil; import dev.fitko.fitconnect.core.validation.DefaultValidationService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -63,7 +64,8 @@ class SecurityEventTokenServiceTest { final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema"); final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas); final SchemaProvider schemaProvider = new SchemaResourceProvider(schemaResources); - this.validationService = new DefaultValidationService(config, new HashService(), schemaProvider, "trusted-test-root-certificates"); + this.validationService = new DefaultValidationService(config, new HashService(), schemaProvider, + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); this.underTest = new SecurityEventTokenService(config, this.validationService, this.signingKey); } diff --git a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java index fb0c5aa03..f5b53d572 100644 --- a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java +++ b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java @@ -62,7 +62,8 @@ class DefaultValidationServiceTest { final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema"); final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas); schemaProvider = new SchemaResourceProvider(schemaResources); - underTest = new DefaultValidationService(config, hashService, schemaProvider, "trusted-test-root-certificates"); + underTest = new DefaultValidationService(config, hashService, schemaProvider, + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); } @Test @@ -115,7 +116,8 @@ class DefaultValidationServiceTest { config.setEnvironments(Map.of(envName, env)); config.setActiveEnvironment(envName); - final DefaultValidationService underTest = new DefaultValidationService(config, hashService, schemaProvider, "trusted-test-root-certificates"); + final DefaultValidationService underTest = new DefaultValidationService(config, hashService, schemaProvider, + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); final RSAKey rsaKey = getRsaKeyWithCertChain(); @@ -131,7 +133,8 @@ class DefaultValidationServiceTest { // Given final ApplicationConfig config = getApplicationConfig(true); - final var underTest = new DefaultValidationService(config, hashService, schemaProvider, "trusted-test-root-certificates"); + final var underTest = new DefaultValidationService(config, hashService, schemaProvider, + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); final RSAKey rsaKey = new RSAKeyGenerator(4096) .keyOperations(Set.of(KeyOperation.WRAP_KEY)) @@ -151,7 +154,8 @@ class DefaultValidationServiceTest { // Given final ApplicationConfig config = getApplicationConfig(false); - final var underTest = new DefaultValidationService(config, hashService, schemaProvider, "trusted-test-root-certificates"); + final var underTest = new DefaultValidationService(config, hashService, schemaProvider, + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); final RSAKey rsaKey = new RSAKeyGenerator(4096) .keyOperations(Set.of(KeyOperation.ENCRYPT)) @@ -371,7 +375,7 @@ class DefaultValidationServiceTest { void testValidDestinationPayload() { // Given - final Map<String,Object> claims = Map.of( + final Map<String, Object> claims = Map.of( "iss", "submission-service", "jti", UUID.randomUUID().toString(), "iat", new Date().getTime(), @@ -391,7 +395,7 @@ class DefaultValidationServiceTest { void testDestinationPayloadIsMissingMandatoryClaims() { // Given - final Map<String,Object> claims = Map.of("test", "claim"); + final Map<String, Object> claims = Map.of("test", "claim"); // When final ValidationResult validationResult = underTest.validateDestinationSchema(claims); @@ -442,7 +446,8 @@ class DefaultValidationServiceTest { when(mockedMessageDigestService.calculateHMAC(anyString(), anyString())).thenReturn("valid"); final DefaultValidationService defaultValidationService = new DefaultValidationService( - new ApplicationConfig(), mockedMessageDigestService, mock(SchemaProvider.class), "trusted-test-root-certificates"); + new ApplicationConfig(), mockedMessageDigestService, mock(SchemaProvider.class), + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); final ValidationResult validationResult = defaultValidationService.validateCallback( "valid", ZonedDateTime.now().toInstant().toEpochMilli(), "body", "secret"); @@ -478,7 +483,8 @@ class DefaultValidationServiceTest { public void productiveTransmissionServiceCertificateIsValidAccordingToRootCertificates() throws JWKValidationException, ParseException { DefaultValidationService defaultValidationService = new DefaultValidationService( - getApplicationConfig(false), hashService, schemaProvider, "trusted-root-certificates"); + getApplicationConfig(false), hashService, schemaProvider, + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); RSAKey rsaKey = RSAKey.parse(FileUtil.loadContentOfFile("certificates/grp-fit-connect-zustelldienst-produktivumgebung.json")); @@ -490,7 +496,8 @@ class DefaultValidationServiceTest { public void fitConnectTestCertificateIsValidAccordingToTestRootCertificates() throws JWKValidationException, ParseException { DefaultValidationService defaultValidationService = new DefaultValidationService( - getApplicationConfig(false), hashService, schemaProvider, "trusted-test-root-certificates"); + getApplicationConfig(false), hashService, schemaProvider, + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); RSAKey rsaKey = RSAKey.parse(FileUtil.loadContentOfFile("certificates/grp-fitko-testzertifikat-fit-connect-1.json")); @@ -502,7 +509,8 @@ class DefaultValidationServiceTest { public void revokedFitConnectTestCertificateIsInvalidAccordingToTestRootCertificates() throws JWKValidationException, ParseException { DefaultValidationService defaultValidationService = new DefaultValidationService( - getApplicationConfig(false), hashService, schemaProvider, "trusted-test-root-certificates"); + getApplicationConfig(false), hashService, schemaProvider, + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); RSAKey rsaKey = RSAKey.parse(FileUtil.loadContentOfFile("certificates/grp-fitko-testzertifikat-fit-connect-2.json")); @@ -513,7 +521,8 @@ class DefaultValidationServiceTest { public void fitConnectTestCertificateIsInvalidAccordingToRootCertificates() throws ParseException { DefaultValidationService defaultValidationService = new DefaultValidationService( - getApplicationConfig(false), hashService, schemaProvider, "trusted-root-certificates"); + getApplicationConfig(false), hashService, schemaProvider, + FileUtil.loadContentOfFilesInDirectory("trusted-test-root-certificates")); RSAKey rsaKey = RSAKey.parse(FileUtil.loadContentOfFile("certificates/grp-fitko-testzertifikat-fit-connect-1.json")); -- GitLab