You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/04/02 01:34:31 UTC

[james-project] 04/08: JAMES-3524 BlobStoreCacheModulesChooser should enable encryption

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 6752870b46641405c5471ca1fc9bb8acd491c2f0
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Mar 26 14:12:10 2021 +0700

    JAMES-3524 BlobStoreCacheModulesChooser should enable encryption
---
 pom.xml                                            |   5 ++
 .../org/apache/james/blob/aes/CryptoConfig.java    |  19 ++++
 .../apache/james/blob/aes/CryptoConfigBuilder.java |   5 +-
 .../james/CassandraRabbitMQAwsS3JmapTestRule.java  |   3 +-
 .../james/CassandraRabbitMQJamesServerFixture.java |   3 +-
 .../apache/james/NamespaceConfigurationTest.java   |   3 +-
 .../org/apache/james/WithCacheImmutableTest.java   |   3 +-
 ...ssandraDeduplicationBlobStoreImmutableTest.java |   3 +-
 ...CassandraDeduplicationBlobStoreMutableTest.java |   3 +-
 ...CassandraPassThroughBlobStoreImmutableTest.java |   3 +-
 ...thCassandraPassThroughBlobStoreMutableTest.java |   5 +-
 ...va => WithEncryptedBlobStoreImmutableTest.java} |  10 ++-
 ...java => WithEncryptedBlobStoreMutableTest.java} |  13 ++-
 .../james/WithScanningSearchImmutableTest.java     |   3 +-
 ...oreConfigurationValidationStartUpCheckTest.java |   8 +-
 .../CassandraRabbitMQLdapJmapJamesServerTest.java  |   6 +-
 server/container/guice/distributed/pom.xml         |   4 +
 .../modules/blobstore/BlobStoreChoosingModule.java |   1 -
 .../modules/blobstore/BlobStoreConfiguration.java  |  71 ++++++++++++---
 .../modules/blobstore/BlobStoreModulesChooser.java |  44 ++++++++-
 .../BlobStoreCacheModulesChooserTest.java          |   6 +-
 .../blobstore/BlobStoreConfigurationTest.java      | 100 ++++++++++++++++++++-
 .../blobstore/BlobStoreModulesChooserTest.java     |  41 +++++++--
 ...eStrategyValidationEventSourcingSystemTest.java |  24 +++--
 .../rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java   |   3 +-
 .../RabbitMQAwsS3SpamAssassinContractTest.java     |   3 +-
 .../cucumber/awss3/RabbitMQAwsS3Stepdefs.java      |   3 +-
 .../distributed/DistributedAuthenticationTest.java |   3 +-
 .../distributed/DistributedDownloadTest.java       |   3 +-
 .../distributed/DistributedEchoMethodTest.java     |   3 +-
 .../DistributedEmailChangeMethodTest.java          |   3 +-
 .../distributed/DistributedEmailGetMethodTest.java |   3 +-
 .../DistributedEmailQueryMethodNoViewTest.java     |   3 +-
 .../DistributedEmailQueryMethodTest.java           |   3 +-
 .../distributed/DistributedEmailSetMethodTest.java |   3 +-
 .../DistributedEmailSubmissionSetMethodtest.java   |   3 +-
 .../distributed/DistributedIdentityGetTest.java    |   3 +-
 .../DistributedMailboxChangeMethodTest.java        |   3 +-
 .../DistributedMailboxGetMethodTest.java           |   3 +-
 .../DistributedMailboxQueryMethodTest.java         |   3 +-
 .../DistributedMailboxSetMethodTest.java           |   3 +-
 .../distributed/DistributedProvisioningTest.java   |   3 +-
 .../distributed/DistributedSessionRouteTest.java   |   3 +-
 .../rfc8621/distributed/DistributedUploadTest.java |   3 +-
 .../DistributedVacationResponseGetMethodTest.java  |   3 +-
 .../DistributedVacationResponseSetMethodTest.java  |   3 +-
 .../distributed/DistributedWebSocketTest.java      |   3 +-
 .../jmap/rfc8621/distributed/ReadLevelTest.java    |   3 +-
 .../rabbitmq/ConsistencyTasksIntegrationTest.java  |   3 +-
 .../rabbitmq/FixingGhostMailboxTest.java           |   3 +-
 .../rabbitmq/RabbitMQAuthorizedEndpointsTest.java  |   3 +-
 .../RabbitMQEventDeadLettersIntegrationTest.java   |   3 +-
 ...stViewProjectionHealthCheckIntegrationTest.java |   3 +-
 .../rabbitmq/RabbitMQForwardIntegrationTest.java   |   3 +-
 .../rabbitmq/RabbitMQJwtFilterIntegrationTest.java |   3 +-
 ...RabbitMQReindexingWithEventDeadLettersTest.java |   3 +-
 .../RabbitMQUnauthorizedEndpointsTest.java         |   3 +-
 ...itMQWebAdminServerIntegrationImmutableTest.java |   3 +-
 .../RabbitMQWebAdminServerIntegrationTest.java     |   3 +-
 ...rTaskSerializationIntegrationImmutableTest.java |   3 +-
 ...dminServerTaskSerializationIntegrationTest.java |   3 +-
 ...RabbitMQDeletedMessageVaultIntegrationTest.java |   3 +-
 ...LinshareBlobExportMechanismIntegrationTest.java |   3 +-
 63 files changed, 404 insertions(+), 99 deletions(-)

diff --git a/pom.xml b/pom.xml
index 8e1a0bc..e9be952 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1033,6 +1033,11 @@
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
+                <artifactId>blob-aes</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${james.groupId}</groupId>
                 <artifactId>blob-api</artifactId>
                 <version>${project.version}</version>
             </dependency>
diff --git a/server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfig.java b/server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfig.java
index 0625535..1f0938b 100644
--- a/server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfig.java
+++ b/server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfig.java
@@ -19,6 +19,9 @@
 
 package org.apache.james.blob.aes;
 
+import java.util.Arrays;
+import java.util.Objects;
+
 import com.google.crypto.tink.subtle.Hex;
 
 public class CryptoConfig {
@@ -42,4 +45,20 @@ public class CryptoConfig {
     public char[] password() {
         return password;
     }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof CryptoConfig) {
+            CryptoConfig that = (CryptoConfig) o;
+
+            return Objects.equals(this.salt, that.salt)
+                && Arrays.equals(this.password, that.password);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(salt, password);
+    }
 }
\ No newline at end of file
diff --git a/server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfigBuilder.java b/server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfigBuilder.java
index f3c9916..7ab8664 100644
--- a/server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfigBuilder.java
+++ b/server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfigBuilder.java
@@ -41,8 +41,9 @@ public class CryptoConfigBuilder {
     }
 
     public CryptoConfig build() {
-        Preconditions.checkState(!Strings.isNullOrEmpty(salt));
-        Preconditions.checkState(password != null && password.length > 0);
+        Preconditions.checkState(!Strings.isNullOrEmpty(salt), "'salt' is mandatory and must not be empty");
+        Preconditions.checkState(password != null && password.length > 0, "'password' is mandatory and must not be empty");
+
         return new CryptoConfig(Hex.encode(Hex.decode(salt)), password);
     }
 }
\ No newline at end of file
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java
index c553a01..0e0b844 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java
@@ -64,7 +64,8 @@ public class CassandraRabbitMQAwsS3JmapTestRule implements TestRule {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build();
 
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
index 1219646..2ac2825 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
@@ -36,7 +36,8 @@ public class CassandraRabbitMQJamesServerFixture {
                 .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
                 .searchConfiguration(SearchConfiguration.elasticSearch())
                 .build())
             .extension(new DockerElasticSearchExtension())
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/NamespaceConfigurationTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/NamespaceConfigurationTest.java
index bd933b8..4398fcb 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/NamespaceConfigurationTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/NamespaceConfigurationTest.java
@@ -57,7 +57,8 @@ class NamespaceConfigurationTest {
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
index 194367c..eebc25f 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
@@ -41,7 +41,8 @@ class WithCacheImmutableTest implements JmapJamesServerContract, JamesServerCont
                 .blobStore(BlobStoreConfiguration.builder()
                         .s3()
                         .enableCache()
-                        .deduplication())
+                        .deduplication()
+                        .noCryptoConfig())
                 .searchConfiguration(SearchConfiguration.elasticSearch())
                 .build())
             .extension(new DockerElasticSearchExtension())
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java
index f18bfcf..9f845f0 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java
@@ -32,7 +32,8 @@ public class WithCassandraDeduplicationBlobStoreImmutableTest implements JmapJam
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.cassandra()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreMutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreMutableTest.java
index 655795e..5846eb1 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreMutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreMutableTest.java
@@ -60,7 +60,8 @@ public class WithCassandraDeduplicationBlobStoreMutableTest implements MailsShou
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.cassandra()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreImmutableTest.java
index a4b40b7..cc81e6a 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreImmutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreImmutableTest.java
@@ -32,7 +32,8 @@ public class WithCassandraPassThroughBlobStoreImmutableTest implements JmapJames
         .workingDirectory(tmpDir)
                 .configurationFromClasspath()
                 .blobStore(BlobStoreConfiguration.cassandra()
-                    .passthrough())
+                    .passthrough()
+                    .noCryptoConfig())
         .searchConfiguration(SearchConfiguration.elasticSearch())
         .build())
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreMutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreMutableTest.java
index 1dd7ce0..1a3ba04 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreMutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreMutableTest.java
@@ -29,7 +29,6 @@ import org.apache.james.backends.cassandra.init.configuration.CassandraConsisten
 import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration;
 import org.apache.james.blob.cassandra.BlobTables;
 import org.apache.james.core.Domain;
-import org.apache.james.jmap.draft.JmapJamesServerContract;
 import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.modules.MailboxProbeImpl;
 import org.apache.james.modules.RabbitMQExtension;
@@ -44,7 +43,6 @@ import org.apache.james.utils.SMTPMessageSender;
 import org.apache.james.utils.SpoolerProbe;
 import org.apache.james.utils.TestIMAPClient;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
 import com.datastax.driver.core.Cluster;
@@ -62,7 +60,8 @@ public class WithCassandraPassThroughBlobStoreMutableTest implements MailsShould
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.cassandra()
-                .passthrough())
+                .passthrough()
+                .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedBlobStoreImmutableTest.java
similarity index 83%
copy from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java
copy to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedBlobStoreImmutableTest.java
index f18bfcf..3caf921 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedBlobStoreImmutableTest.java
@@ -19,20 +19,26 @@
 
 package org.apache.james;
 
+import org.apache.james.blob.aes.CryptoConfig;
 import org.apache.james.jmap.draft.JmapJamesServerContract;
 import org.apache.james.modules.RabbitMQExtension;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class WithCassandraDeduplicationBlobStoreImmutableTest implements JmapJamesServerContract, JamesServerContract {
+public class WithEncryptedBlobStoreImmutableTest implements JmapJamesServerContract, JamesServerContract {
     @RegisterExtension
     static JamesServerExtension jamesServerExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
         CassandraRabbitMQJamesConfiguration.builder()
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.cassandra()
-                .deduplication())
+                .deduplication()
+                .cryptoConfig(CryptoConfig.builder()
+                    .password("myPass".toCharArray())
+                    // Hex.encode("salty".getBytes(StandardCharsets.UTF_8))
+                    .salt("73616c7479")
+                    .build()))
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedBlobStoreMutableTest.java
similarity index 82%
copy from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java
copy to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedBlobStoreMutableTest.java
index f18bfcf..da8e056 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedBlobStoreMutableTest.java
@@ -19,20 +19,25 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
+import org.apache.james.blob.aes.CryptoConfig;
 import org.apache.james.modules.RabbitMQExtension;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class WithCassandraDeduplicationBlobStoreImmutableTest implements JmapJamesServerContract, JamesServerContract {
+public class WithEncryptedBlobStoreMutableTest implements MailsShouldBeWellReceived {
     @RegisterExtension
     static JamesServerExtension jamesServerExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
         CassandraRabbitMQJamesConfiguration.builder()
             .workingDirectory(tmpDir)
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.cassandra()
-                .deduplication())
+                .deduplication()
+                .cryptoConfig(CryptoConfig.builder()
+                    .password("myPass".toCharArray())
+                    // Hex.encode("salty".getBytes(StandardCharsets.UTF_8))
+                    .salt("73616c7479")
+                    .build()))
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
@@ -40,6 +45,6 @@ public class WithCassandraDeduplicationBlobStoreImmutableTest implements JmapJam
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
         .extension(new RabbitMQExtension())
-        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
         .build();
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
index cddaa97..7c973e4 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
@@ -35,7 +35,8 @@ class WithScanningSearchImmutableTest implements JmapJamesServerContract, JamesS
                 .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
                 .searchConfiguration(SearchConfiguration.scanning())
                 .build())
             .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationValidationStartUpCheckTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationValidationStartUpCheckTest.java
index 81de1a4..287594b 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationValidationStartUpCheckTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationValidationStartUpCheckTest.java
@@ -29,7 +29,6 @@ import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
 import org.apache.james.eventsourcing.Event;
 import org.apache.james.eventsourcing.eventstore.EventStore;
-import org.apache.james.eventsourcing.eventstore.cassandra.CassandraEventStore;
 import org.apache.james.eventsourcing.eventstore.cassandra.CassandraEventStoreExtension;
 import org.apache.james.eventsourcing.eventstore.cassandra.CassandraEventStoreModule;
 import org.apache.james.eventsourcing.eventstore.cassandra.JsonEventSerializer;
@@ -38,7 +37,6 @@ import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
 import org.apache.james.lifecycle.api.StartUpCheck;
 import org.apache.james.modules.blobstore.validation.EventsourcingStorageStrategy;
 import org.apache.james.modules.blobstore.validation.StorageStrategyModule;
-import org.apache.james.server.blob.deduplication.StorageStrategy;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
@@ -66,12 +64,14 @@ class BlobStoreConfigurationValidationStartUpCheckTest {
             .builder()
             .cassandra()
             .disableCache()
-            .deduplication();
+            .deduplication()
+            .noCryptoConfig();
     private static BlobStoreConfiguration PASSTHROUGH_STRATEGY = BlobStoreConfiguration
             .builder()
             .cassandra()
             .disableCache()
-            .passthrough();
+            .passthrough()
+            .noCryptoConfig();
 
     private EventsourcingStorageStrategy eventsourcingStorageStrategy;
 
diff --git a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
index 0f2aec0..4161a2f 100644
--- a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
+++ b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
@@ -59,7 +59,8 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
         @RegisterExtension
         JamesServerExtension testExtension = baseJamesServerExtensionBuilder(BlobStoreConfiguration.s3()
                 .disableCache()
-                .passthrough())
+                .passthrough()
+                .noCryptoConfig())
             .extension(new AwsS3BlobStoreExtension())
             .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
             .build();
@@ -72,7 +73,8 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
         JamesServerExtension testExtension = baseJamesServerExtensionBuilder(BlobStoreConfiguration.builder()
                 .cassandra()
                 .disableCache()
-                .passthrough())
+                .passthrough()
+                .noCryptoConfig())
             .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
             .build();
     }
diff --git a/server/container/guice/distributed/pom.xml b/server/container/guice/distributed/pom.xml
index 74d47fa..51e3b1d 100644
--- a/server/container/guice/distributed/pom.xml
+++ b/server/container/guice/distributed/pom.xml
@@ -49,6 +49,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>blob-aes</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>blob-s3-guice</artifactId>
         </dependency>
         <dependency>
diff --git a/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java b/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java
index 27c3231..61d2ef9 100644
--- a/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java
+++ b/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java
@@ -28,7 +28,6 @@ import com.google.inject.multibindings.Multibinder;
 public class BlobStoreChoosingModule extends AbstractModule {
     @Override
     protected void configure() {
-
         Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class);
         cassandraDataDefinitions.addBinding().toInstance(CassandraBlobModule.MODULE);
     }
diff --git a/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java b/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java
index 215c4f9..ba9a383 100644
--- a/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java
+++ b/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java
@@ -28,6 +28,7 @@ import java.util.stream.Stream;
 import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.james.blob.aes.CryptoConfig;
 import org.apache.james.modules.mailbox.ConfigurationComponent;
 import org.apache.james.server.blob.deduplication.StorageStrategy;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
@@ -71,19 +72,33 @@ public class BlobStoreConfiguration {
 
     @FunctionalInterface
     public interface RequireStoringStrategy {
-        BlobStoreConfiguration strategy(StorageStrategy storageStrategy);
+        RequireCryptoConfig strategy(StorageStrategy storageStrategy);
 
-        default BlobStoreConfiguration passthrough() {
+        default RequireCryptoConfig passthrough() {
             return strategy(StorageStrategy.PASSTHROUGH);
         }
 
-        default BlobStoreConfiguration deduplication() {
+        default RequireCryptoConfig deduplication() {
             return strategy(StorageStrategy.DEDUPLICATION);
         }
     }
 
+    @FunctionalInterface
+    public interface RequireCryptoConfig {
+        BlobStoreConfiguration cryptoConfig(Optional<CryptoConfig> cryptoConfig);
+
+        default BlobStoreConfiguration noCryptoConfig() {
+            return cryptoConfig(Optional.empty());
+        }
+
+        default BlobStoreConfiguration cryptoConfig(CryptoConfig cryptoConfig) {
+            return cryptoConfig(Optional.of(cryptoConfig));
+        }
+    }
+
     public static RequireImplementation builder() {
-        return implementation -> enableCache -> storageStrategy -> new BlobStoreConfiguration(implementation, enableCache, storageStrategy);
+        return implementation -> enableCache -> storageStrategy -> cryptoConfig ->
+            new BlobStoreConfiguration(implementation, enableCache, storageStrategy, cryptoConfig);
     }
 
     public enum BlobStoreImplName {
@@ -117,6 +132,9 @@ public class BlobStoreConfiguration {
 
     static final String BLOBSTORE_IMPLEMENTATION_PROPERTY = "implementation";
     static final String CACHE_ENABLE_PROPERTY = "cache.enable";
+    static final String ENCRYPTION_ENABLE_PROPERTY = "encryption.aes.enable";
+    static final String ENCRYPTION_PASSWORD_PROPERTY = "encryption.aes.password";
+    static final String ENCRYPTION_SALT_PROPERTY = "encryption.aes.salt";
     static final boolean CACHE_ENABLED = true;
     static final String DEDUPLICATION_ENABLE_PROPERTY = "deduplication.enable";
 
@@ -134,9 +152,10 @@ public class BlobStoreConfiguration {
         } catch (FileNotFoundException e) {
             LOGGER.warn("Could not find " + ConfigurationComponent.NAME + " configuration file, using cassandra blobstore as the default");
             return BlobStoreConfiguration.builder()
-                    .cassandra()
-                    .disableCache()
-                    .passthrough();
+                .cassandra()
+                .disableCache()
+                .passthrough()
+                .noCryptoConfig();
         }
     }
 
@@ -155,12 +174,32 @@ public class BlobStoreConfiguration {
                         "Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all\n" +
                         "the mails sharing the same content once one is deleted.\n" +
                         "Upgrade note: If you are upgrading from James 3.5 or older, the deduplication was enabled."));
+        Optional<CryptoConfig> cryptoConfig = parseCryptoConfig(configuration);
 
         if (deduplicationEnabled) {
-            return new BlobStoreConfiguration(blobStoreImplName, cacheEnabled, StorageStrategy.DEDUPLICATION);
+            return builder()
+                .implementation(blobStoreImplName)
+                .enableCache(cacheEnabled)
+                .deduplication()
+                .cryptoConfig(cryptoConfig);
         } else {
-            return new BlobStoreConfiguration(blobStoreImplName, cacheEnabled, StorageStrategy.PASSTHROUGH);
+            return builder()
+                .implementation(blobStoreImplName)
+                .enableCache(cacheEnabled)
+                .passthrough()
+                .cryptoConfig(cryptoConfig);
+        }
+    }
+
+    private static Optional<CryptoConfig> parseCryptoConfig(Configuration configuration) {
+        final boolean enabled = configuration.getBoolean(ENCRYPTION_ENABLE_PROPERTY, false);
+        if (enabled) {
+            return Optional.of(CryptoConfig.builder()
+                .password(Optional.ofNullable(configuration.getString(ENCRYPTION_PASSWORD_PROPERTY, null)).map(String::toCharArray).orElse(null))
+                .salt(configuration.getString(ENCRYPTION_SALT_PROPERTY, null))
+                .build());
         }
+        return Optional.empty();
     }
 
     @VisibleForTesting
@@ -177,11 +216,13 @@ public class BlobStoreConfiguration {
     private final BlobStoreImplName implementation;
     private final boolean cacheEnabled;
     private final StorageStrategy storageStrategy;
+    private final Optional<CryptoConfig> cryptoConfig;
 
-    BlobStoreConfiguration(BlobStoreImplName implementation, boolean cacheEnabled, StorageStrategy storageStrategy) {
+    BlobStoreConfiguration(BlobStoreImplName implementation, boolean cacheEnabled, StorageStrategy storageStrategy, Optional<CryptoConfig> cryptoConfig) {
         this.implementation = implementation;
         this.cacheEnabled = cacheEnabled;
         this.storageStrategy = storageStrategy;
+        this.cryptoConfig = cryptoConfig;
     }
 
     public boolean cacheEnabled() {
@@ -196,6 +237,10 @@ public class BlobStoreConfiguration {
         return implementation;
     }
 
+    public Optional<CryptoConfig> getCryptoConfig() {
+        return cryptoConfig;
+    }
+
     @Override
     public final boolean equals(Object o) {
         if (o instanceof BlobStoreConfiguration) {
@@ -203,14 +248,15 @@ public class BlobStoreConfiguration {
 
             return Objects.equals(this.implementation, that.implementation)
                 && Objects.equals(this.cacheEnabled, that.cacheEnabled)
-                && Objects.equals(this.storageStrategy, that.storageStrategy);
+                && Objects.equals(this.storageStrategy, that.storageStrategy)
+                && Objects.equals(this.cryptoConfig, that.cryptoConfig);
         }
         return false;
     }
 
     @Override
     public final int hashCode() {
-        return Objects.hash(implementation, cacheEnabled, storageStrategy);
+        return Objects.hash(implementation, cacheEnabled, storageStrategy, cryptoConfig);
     }
 
     @Override
@@ -219,6 +265,7 @@ public class BlobStoreConfiguration {
             .add("implementation", implementation)
             .add("cacheEnabled", cacheEnabled)
             .add("storageStrategy", storageStrategy.name())
+            .add("cryptoConfig", cryptoConfig)
             .toString();
     }
 }
diff --git a/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java b/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
index dfa2292..7e4680f 100644
--- a/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
+++ b/server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
@@ -20,7 +20,10 @@
 package org.apache.james.modules.blobstore;
 
 import java.util.List;
+import java.util.Optional;
 
+import org.apache.james.blob.aes.AESBlobStoreDAO;
+import org.apache.james.blob.aes.CryptoConfig;
 import org.apache.james.blob.api.BlobStore;
 import org.apache.james.blob.api.BlobStoreDAO;
 import org.apache.james.blob.cassandra.CassandraBlobStoreDAO;
@@ -44,19 +47,23 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Module;
+import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.TypeLiteral;
 import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Named;
 import com.google.inject.name.Names;
 
 public class BlobStoreModulesChooser {
+    private static final String UNENCRYPTED = "unencrypted";
+
     static class CassandraBlobStoreDAODeclarationModule extends AbstractModule {
         @Override
         protected void configure() {
             install(new CassandraBlobStoreDependenciesModule());
             install(new CassandraBucketModule());
 
-            bind(BlobStoreDAO.class).to(CassandraBlobStoreDAO.class);
+            bind(BlobStoreDAO.class).annotatedWith(Names.named(UNENCRYPTED)).to(CassandraBlobStoreDAO.class);
         }
     }
 
@@ -66,12 +73,37 @@ public class BlobStoreModulesChooser {
             install(new S3BlobStoreModule());
             install(new DefaultBucketModule());
 
-            bind(BlobStoreDAO.class).to(S3BlobStoreDAO.class);
+            bind(BlobStoreDAO.class).annotatedWith(Names.named(UNENCRYPTED)).to(S3BlobStoreDAO.class);
+        }
+    }
+
+    static class NoEncryptionModule extends AbstractModule {
+        @Provides
+        BlobStoreDAO blobStoreDAO(@Named(UNENCRYPTED) BlobStoreDAO unencrypted) {
+            return unencrypted;
+        }
+    }
+
+    static class EncryptionModule extends AbstractModule {
+        private final CryptoConfig cryptoConfig;
+
+        EncryptionModule(CryptoConfig cryptoConfig) {
+            this.cryptoConfig = cryptoConfig;
+        }
+
+        @Provides
+        BlobStoreDAO blobStoreDAO(@Named(UNENCRYPTED) BlobStoreDAO unencrypted) {
+            return new AESBlobStoreDAO(unencrypted, cryptoConfig);
+        }
+
+        @Provides
+        CryptoConfig cryptoConfig() {
+            return cryptoConfig;
         }
     }
 
     static class StoragePolicyConfigurationSanityEnforcementModule extends AbstractModule {
-        private BlobStoreConfiguration choosingConfiguration;
+        private final BlobStoreConfiguration choosingConfiguration;
 
         StoragePolicyConfigurationSanityEnforcementModule(BlobStoreConfiguration choosingConfiguration) {
             this.choosingConfiguration = choosingConfiguration;
@@ -94,6 +126,7 @@ public class BlobStoreModulesChooser {
     @VisibleForTesting
     public static List<Module> chooseModules(BlobStoreConfiguration choosingConfiguration) {
         return ImmutableList.<Module>builder()
+            .add(chooseEncryptionModule(choosingConfiguration.getCryptoConfig()))
             .add(chooseBlobStoreDAOModule(choosingConfiguration.getImplementation()))
             .add(chooseStoragePolicyModule(choosingConfiguration.storageStrategy()))
             .add(new StoragePolicyConfigurationSanityEnforcementModule(choosingConfiguration))
@@ -111,6 +144,11 @@ public class BlobStoreModulesChooser {
         }
     }
 
+    public static Module chooseEncryptionModule(Optional<CryptoConfig> cryptoConfig) {
+        Optional<Module> encryptionModule = cryptoConfig.map(EncryptionModule::new);
+        return encryptionModule.orElse(new NoEncryptionModule());
+    }
+
     private static Module chooseStoragePolicyModule(StorageStrategy storageStrategy) {
         switch (storageStrategy) {
             case DEDUPLICATION:
diff --git a/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java b/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java
index 2452d41..6486a0e 100644
--- a/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java
+++ b/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java
@@ -30,7 +30,8 @@ class BlobStoreCacheModulesChooserTest {
         assertThat(BlobStoreCacheModulesChooser.chooseModules(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication()))
+                    .deduplication()
+                    .noCryptoConfig()))
             .hasSize(1)
             .first()
             .isInstanceOf(BlobStoreCacheModulesChooser.CacheDisabledModule.class);
@@ -41,7 +42,8 @@ class BlobStoreCacheModulesChooserTest {
         assertThat(BlobStoreCacheModulesChooser.chooseModules(BlobStoreConfiguration.builder()
                 .s3()
                 .enableCache()
-                .deduplication()))
+                .deduplication()
+                .noCryptoConfig()))
             .hasSize(2)
             .allSatisfy(module ->
                 assertThat(module).isOfAnyClassIn(
diff --git a/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java b/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java
index 2625a3c..a0c7ef9 100644
--- a/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java
+++ b/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java
@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.commons.configuration2.PropertiesConfiguration;
 import org.apache.james.FakePropertiesProvider;
+import org.apache.james.blob.aes.CryptoConfig;
 import org.apache.james.modules.mailbox.ConfigurationComponent;
 import org.apache.james.server.blob.deduplication.StorageStrategy;
 import org.junit.jupiter.api.Test;
@@ -67,6 +68,96 @@ class BlobStoreConfigurationTest {
     }
 
     @Test
+    void encryptionShouldRequirePassword() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("implementation", "s3");
+        configuration.addProperty("deduplication.enable", false);
+        configuration.addProperty("encryption.aes.enable", true);
+        // Hex.encode("salty".getBytes(StandardCharsets.UTF_8))
+        configuration.addProperty("encryption.aes.salt", "73616c7479");
+        FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder()
+            .register(ConfigurationComponent.NAME, configuration)
+            .build();
+
+        assertThatThrownBy(() -> parse(propertyProvider))
+            .isInstanceOf(IllegalStateException.class);
+    }
+
+    @Test
+    void encryptionShouldRequireSalt() {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("implementation", "cassandra");
+        configuration.addProperty("deduplication.enable", false);
+        configuration.addProperty("encryption.aes.enable", true);
+        configuration.addProperty("encryption.aes.password", "salty");
+        FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder()
+            .register(ConfigurationComponent.NAME, configuration)
+            .build();
+
+        assertThatThrownBy(() -> parse(propertyProvider))
+            .isInstanceOf(IllegalStateException.class);
+    }
+
+    @Test
+    void encryptionShouldBeDisabledByDefault() throws Exception {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("implementation", "cassandra");
+        configuration.addProperty("deduplication.enable", false);
+        FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder()
+            .register(ConfigurationComponent.NAME, configuration)
+            .build();
+
+        assertThat(parse(propertyProvider))
+            .isEqualTo(BlobStoreConfiguration.builder()
+                .cassandra()
+                .disableCache()
+                .passthrough()
+                .noCryptoConfig());
+    }
+
+    @Test
+    void encryptionShouldBeDisableable() throws Exception {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("implementation", "cassandra");
+        configuration.addProperty("deduplication.enable", false);
+        configuration.addProperty("encryption.aes.enable", false);
+        FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder()
+            .register(ConfigurationComponent.NAME, configuration)
+            .build();
+
+        assertThat(parse(propertyProvider))
+            .isEqualTo(BlobStoreConfiguration.builder()
+                .cassandra()
+                .disableCache()
+                .passthrough()
+                .noCryptoConfig());
+    }
+
+    @Test
+    void encryptionCanBeActivated() throws Exception {
+        PropertiesConfiguration configuration = new PropertiesConfiguration();
+        configuration.addProperty("implementation", "cassandra");
+        configuration.addProperty("deduplication.enable", false);
+        configuration.addProperty("encryption.aes.enable", true);
+        configuration.addProperty("encryption.aes.password", "myPass");
+        // Hex.encode("salty".getBytes(StandardCharsets.UTF_8))
+        configuration.addProperty("encryption.aes.salt", "73616c7479");
+        FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder()
+            .register(ConfigurationComponent.NAME, configuration)
+            .build();
+
+        assertThat(parse(propertyProvider))
+            .isEqualTo(BlobStoreConfiguration.builder()
+                .cassandra()
+                .disableCache()
+                .passthrough()
+                .cryptoConfig(CryptoConfig.builder()
+                    .password("myPass".toCharArray())
+                    .salt("73616c7479")
+                    .build()));
+    }
+
+    @Test
     void provideChoosingConfigurationShouldThrowWhenPropertyFieldIsNotInSupportedList() {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         configuration.addProperty("implementation", "gabouzomeuh");
@@ -88,7 +179,8 @@ class BlobStoreConfigurationTest {
             .isEqualTo(BlobStoreConfiguration.builder()
                     .cassandra()
                     .disableCache()
-                    .passthrough());
+                    .passthrough()
+                    .noCryptoConfig());
     }
 
     @Test
@@ -104,7 +196,8 @@ class BlobStoreConfigurationTest {
             .isEqualTo(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication());
+                    .deduplication()
+                    .noCryptoConfig());
     }
 
     @Test
@@ -120,7 +213,8 @@ class BlobStoreConfigurationTest {
             .isEqualTo(BlobStoreConfiguration.builder()
                     .cassandra()
                     .disableCache()
-                    .passthrough());
+                    .passthrough()
+                    .noCryptoConfig());
     }
 
     @Test
diff --git a/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java b/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java
index 51f1cd1..60b8d6d 100644
--- a/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java
+++ b/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java
@@ -21,6 +21,7 @@ package org.apache.james.modules.blobstore;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import org.apache.james.blob.aes.CryptoConfig;
 import org.junit.jupiter.api.Test;
 
 class BlobStoreModulesChooserTest {
@@ -30,9 +31,10 @@ class BlobStoreModulesChooserTest {
         assertThat(BlobStoreModulesChooser.chooseModules(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication()))
-            .first()
-            .isInstanceOf(BlobStoreModulesChooser.ObjectStorageBlobStoreDAODeclarationModule.class);
+                    .deduplication()
+                    .noCryptoConfig()))
+            .filteredOn(module -> module instanceof BlobStoreModulesChooser.ObjectStorageBlobStoreDAODeclarationModule)
+            .hasSize(1);
     }
 
     @Test
@@ -40,8 +42,35 @@ class BlobStoreModulesChooserTest {
         assertThat(BlobStoreModulesChooser.chooseModules(BlobStoreConfiguration.builder()
                 .cassandra()
                 .disableCache()
-                .passthrough()))
-            .first()
-            .isInstanceOf(BlobStoreModulesChooser.CassandraBlobStoreDAODeclarationModule.class);
+                .passthrough()
+                .noCryptoConfig()))
+            .filteredOn(module -> module instanceof BlobStoreModulesChooser.CassandraBlobStoreDAODeclarationModule)
+            .hasSize(1);
+    }
+
+    @Test
+    void provideBlobStoreShouldReturnNoEncryptionWhenNoneConfigured() {
+        assertThat(BlobStoreModulesChooser.chooseModules(BlobStoreConfiguration.builder()
+                    .s3()
+                    .disableCache()
+                    .deduplication()
+                    .noCryptoConfig()))
+            .filteredOn(module -> module instanceof BlobStoreModulesChooser.NoEncryptionModule)
+            .hasSize(1);
+    }
+
+    @Test
+    void provideBlobStoreShouldReturnEncryptionWhenConfigured() {
+        assertThat(BlobStoreModulesChooser.chooseModules(BlobStoreConfiguration.builder()
+                .cassandra()
+                .disableCache()
+                .passthrough()
+                .cryptoConfig(CryptoConfig.builder()
+                    .password("myPass".toCharArray())
+                    // Hex.encode("salty".getBytes(StandardCharsets.UTF_8))
+                    .salt("73616c7479")
+                    .build())))
+            .filteredOn(module -> module instanceof BlobStoreModulesChooser.EncryptionModule)
+            .hasSize(1);
     }
 }
\ No newline at end of file
diff --git a/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java b/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java
index ed64f5e..8788ecc 100644
--- a/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java
+++ b/server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java
@@ -45,7 +45,8 @@ public class StorageStrategyValidationEventSourcingSystemTest {
     void startingForTheFirstTimeShouldSucceedWhenPassThrough() {
         StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
-            .passthrough());
+            .passthrough()
+            .noCryptoConfig());
 
         assertThat(checkResult.getResultType()).isEqualTo(StartUpCheck.ResultType.GOOD);
     }
@@ -54,7 +55,8 @@ public class StorageStrategyValidationEventSourcingSystemTest {
     void startingForTheFirstTimeShouldSucceedWhenDeduplication() {
         StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
-            .deduplication());
+            .deduplication()
+            .noCryptoConfig());
 
         assertThat(checkResult.getResultType()).isEqualTo(StartUpCheck.ResultType.GOOD);
     }
@@ -63,11 +65,13 @@ public class StorageStrategyValidationEventSourcingSystemTest {
     void startingShouldSucceedWhenTurningOnDeduplication() {
         testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
-            .passthrough());
+            .passthrough()
+            .noCryptoConfig());
 
         StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
-            .deduplication());
+            .deduplication()
+            .noCryptoConfig());
 
         assertThat(checkResult.getResultType()).isEqualTo(StartUpCheck.ResultType.GOOD);
     }
@@ -76,11 +80,13 @@ public class StorageStrategyValidationEventSourcingSystemTest {
     void startingShouldFailWhenTurningOffDeduplication() {
         testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
-            .deduplication());
+            .deduplication()
+            .noCryptoConfig());
 
         StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
-            .passthrough());
+            .passthrough()
+            .noCryptoConfig());
 
         assertThat(checkResult.getResultType()).isEqualTo(StartUpCheck.ResultType.BAD);
     }
@@ -89,10 +95,12 @@ public class StorageStrategyValidationEventSourcingSystemTest {
     void validatingSeveralTimeTheSameStrategyShouldNotAddEventsToTheHistory() {
         testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
-            .deduplication());
+            .deduplication()
+            .noCryptoConfig());
         testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3)
             .disableCache()
-            .deduplication());
+            .deduplication()
+            .noCryptoConfig());
 
         History history = Mono.from(eventStore.getEventsOfAggregate(RegisterStorageStrategyCommandHandler.AGGREGATE_ID)).block();
 
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java
index 512cc61..33d0501 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java
@@ -45,7 +45,8 @@ public class RabbitMQAwsS3SendMDNMethodTest extends SendMDNMethodTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java
index e68eb91..1d74754 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java
@@ -44,7 +44,8 @@ class RabbitMQAwsS3SpamAssassinContractTest implements SpamAssassinContract {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java
index cb4eefe..99b4058 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java
@@ -79,7 +79,8 @@ public class RabbitMQAwsS3Stepdefs {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build();
 
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
index 7d9767e..84904a9 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
@@ -42,7 +42,8 @@ class DistributedAuthenticationTest implements AuthenticationContract {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDownloadTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDownloadTest.java
index 04e057b..eb30676 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDownloadTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDownloadTest.java
@@ -47,7 +47,8 @@ public class DistributedDownloadTest implements DownloadContract {
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java
index 80f0194..b1b1df3 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java
@@ -43,7 +43,8 @@ public class DistributedEchoMethodTest implements EchoMethodContract {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java
index d471d81..778bcda 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java
@@ -43,7 +43,8 @@ public class DistributedEmailChangeMethodTest implements EmailChangesMethodContr
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java
index 01af00e..86d1e8e 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java
@@ -47,7 +47,8 @@ public class DistributedEmailGetMethodTest implements EmailGetMethodContract {
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java
index 235118b..3562c64 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java
@@ -44,7 +44,8 @@ public class DistributedEmailQueryMethodNoViewTest implements EmailQueryMethodCo
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .build())
         .extension(ELASTIC_SEARCH_EXTENSION)
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java
index 9f6c24f..e05c3a8 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java
@@ -43,7 +43,8 @@ public class DistributedEmailQueryMethodTest implements EmailQueryMethodContract
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .build())
         .extension(ELASTIC_SEARCH_EXTENSION)
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSetMethodTest.java
index b103eac..2e82789 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSetMethodTest.java
@@ -51,7 +51,8 @@ public class DistributedEmailSetMethodTest implements EmailSetMethodContract {
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(ELASTIC_SEARCH_EXTENSION)
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodtest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodtest.java
index c7164f9..421aa16 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodtest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodtest.java
@@ -48,7 +48,8 @@ class DistributedEmailSubmissionSetMethodtest implements EmailSubmissionSetMetho
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(ELASTIC_SEARCH_EXTENSION)
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedIdentityGetTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedIdentityGetTest.java
index 0475b48..ffd004b 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedIdentityGetTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedIdentityGetTest.java
@@ -42,7 +42,8 @@ class DistributedIdentityGetTest implements IdentityGetContract {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java
index 76d5c5f..25046da 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java
@@ -45,7 +45,8 @@ public class DistributedMailboxChangeMethodTest implements MailboxChangesMethodC
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java
index 0235d09..e6170a4 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java
@@ -45,7 +45,8 @@ public class DistributedMailboxGetMethodTest implements MailboxGetMethodContract
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxQueryMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxQueryMethodTest.java
index c81a477..ea72456 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxQueryMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxQueryMethodTest.java
@@ -43,7 +43,8 @@ public class DistributedMailboxQueryMethodTest implements MailboxQueryMethodCont
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .build())
         .extension(ELASTIC_SEARCH_EXTENSION)
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java
index 7c98863..db1e1db 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java
@@ -48,7 +48,8 @@ public class DistributedMailboxSetMethodTest implements MailboxSetMethodContract
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
index b278584..c89a915 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
@@ -41,7 +41,8 @@ public class DistributedProvisioningTest implements ProvisioningContract {
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java
index ae801b8..de8d786 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java
@@ -41,7 +41,8 @@ public class DistributedSessionRouteTest implements SessionRoutesContract {
             .configurationFromClasspath()
             .blobStore(BlobStoreConfiguration.s3()
                 .disableCache()
-                .passthrough())
+                .passthrough()
+                .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedUploadTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedUploadTest.java
index 9d432db..b7ffbed 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedUploadTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedUploadTest.java
@@ -41,7 +41,8 @@ public class DistributedUploadTest implements UploadContract {
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java
index b318e97..56e1919 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java
@@ -41,7 +41,8 @@ public class DistributedVacationResponseGetMethodTest implements VacationRespons
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java
index 57a746a..091e744 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java
@@ -41,7 +41,8 @@ public class DistributedVacationResponseSetMethodTest implements VacationRespons
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedWebSocketTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedWebSocketTest.java
index 6445ae5..3d1cccb 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedWebSocketTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedWebSocketTest.java
@@ -41,7 +41,8 @@ public class DistributedWebSocketTest implements WebSocketContract {
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/ReadLevelTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/ReadLevelTest.java
index 4234152..f19e222 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/ReadLevelTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/ReadLevelTest.java
@@ -108,7 +108,8 @@ public class ReadLevelTest {
             .blobStore(BlobStoreConfiguration.builder()
                 .cassandra()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .build())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java
index 9a0fb33..20fd522 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java
@@ -131,7 +131,8 @@ class ConsistencyTasksIntegrationTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java
index fce1e7d..3e1a135 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java
@@ -120,7 +120,8 @@ class FixingGhostMailboxTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
index 727de20..88c0902 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
@@ -49,7 +49,8 @@ class RabbitMQAuthorizedEndpointsTest extends AuthorizedEndpointsTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
index 0484fc4..2ab7bea 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
@@ -209,7 +209,8 @@ class RabbitMQEventDeadLettersIntegrationTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java
index 187e89c..43a1461 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java
@@ -43,7 +43,8 @@ class RabbitMQFastViewProjectionHealthCheckIntegrationTest extends FastViewProje
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java
index dbeaae4..f9970cd 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java
@@ -43,7 +43,8 @@ class RabbitMQForwardIntegrationTest extends ForwardIntegrationTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java
index 42e975a..6a4f0ac 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java
@@ -49,7 +49,8 @@ class RabbitMQJwtFilterIntegrationTest extends JwtFilterIntegrationTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
index 5252864..8a5f916 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
@@ -88,7 +88,8 @@ class RabbitMQReindexingWithEventDeadLettersTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(dockerElasticSearch)
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
index 45c8fc5..0296304 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
@@ -73,7 +73,8 @@ class RabbitMQUnauthorizedEndpointsTest extends UnauthorizedEndpointsTest {
             .blobStore(BlobStoreConfiguration.builder()
                 .s3()
                 .disableCache()
-                .deduplication())
+                .deduplication()
+                .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationImmutableTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationImmutableTest.java
index 038fad2..088d5cd 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationImmutableTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationImmutableTest.java
@@ -62,7 +62,8 @@ class RabbitMQWebAdminServerIntegrationImmutableTest extends WebAdminServerInteg
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
index 64cf61d..019412a 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
@@ -67,7 +67,8 @@ class RabbitMQWebAdminServerIntegrationTest extends WebAdminServerIntegrationTes
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
index b969e49..b78bbd5 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
@@ -72,7 +72,8 @@ class RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
index ca7190c..95fa954 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
@@ -102,7 +102,8 @@ class RabbitMQWebAdminServerTaskSerializationIntegrationTest {
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
index 82a3123..2cf535f 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
@@ -52,7 +52,8 @@ class RabbitMQDeletedMessageVaultIntegrationTest extends DeletedMessageVaultInte
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(ES_EXTENSION)
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java
index e5f9323..2cd5c90 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java
@@ -50,7 +50,8 @@ class RabbitMQLinshareBlobExportMechanismIntegrationTest extends LinshareBlobExp
             .blobStore(BlobStoreConfiguration.builder()
                     .s3()
                     .disableCache()
-                    .deduplication())
+                    .deduplication()
+                    .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.elasticSearch())
             .build())
         .extension(new DockerElasticSearchExtension())

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org