You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2020/12/08 21:30:21 UTC

[camel-quarkus] branch master updated: Polish how we pass -Djavax.net.ssl.trustStore to the Solr test #2029

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

ppalaga pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/master by this push:
     new 2a3c0b7  Polish how we pass -Djavax.net.ssl.trustStore to the Solr test #2029
2a3c0b7 is described below

commit 2a3c0b79f6c17108b8004c9c7c7df3fdf15e3af9
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Fri Dec 4 21:44:54 2020 +0100

    Polish how we pass -Djavax.net.ssl.trustStore to the Solr test #2029
---
 .../quarkus/test/ExtendDefaultTrustStore.java      |  87 +++++++++++++++++++
 .../camel/quarkus/test/TrustStoreResource.java     |  10 ++-
 integration-tests/solr/pom.xml                     |  96 +++++++++++++--------
 .../solr/src/main/resources/application.properties |  21 +++++
 .../camel/quarkus/component/solr/it/SolrTest.java  |   2 +-
 .../solr/src/test/resources/ssl/README.adoc        |   6 ++
 .../solr/src/test/resources/ssl/solr-ssl.der       |  22 +++++
 .../src/test/resources/ssl/solr-ssl.keystore.p12   | Bin 2659 -> 0 bytes
 .../solr/src/test/resources/ssl/solr-ssl.pem       |  63 --------------
 pom.xml                                            |   1 +
 tooling/scripts/test-categories.yaml               |   2 +-
 11 files changed, 205 insertions(+), 105 deletions(-)

diff --git a/integration-tests-support/test-support/src/main/java/org/apache/camel/quarkus/test/ExtendDefaultTrustStore.java b/integration-tests-support/test-support/src/main/java/org/apache/camel/quarkus/test/ExtendDefaultTrustStore.java
new file mode 100644
index 0000000..2167006
--- /dev/null
+++ b/integration-tests-support/test-support/src/main/java/org/apache/camel/quarkus/test/ExtendDefaultTrustStore.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.test;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+
+/**
+ * A utility to take the default JVM's trust store, add some custom certificates to it, store it to a
+ * temporary location and set {@code javax.net.ssl.trustStore} to the temporary path.
+ */
+public class ExtendDefaultTrustStore {
+
+    public static Path extendTrustStoreIfNeeded(Path extendedTrustStorePath, String[] certs)
+            throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
+        final Path sslDir = extendedTrustStorePath.getParent();
+
+        if (Files.exists(extendedTrustStorePath)) {
+            System.out.println("Nothing to do, the trust store exists already: " + extendedTrustStorePath);
+        } else {
+
+            final Path defaultTrustStore = TrustStoreResource.getDefaultTrustStorePath();
+
+            final KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
+            try (InputStream in = Files.newInputStream(defaultTrustStore)) {
+                keystore.load(in, null);
+            }
+            System.out.println("Loaded " + defaultTrustStore);
+
+            final CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            for (String cert : certs) {
+                System.out.println("Adding " + cert);
+                final int colonPos = cert.indexOf(':');
+                final String alias = colonPos >= 0 ? cert.substring(0, colonPos) : "localhost";
+                final String certPath = colonPos >= 0 ? cert.substring(colonPos + 1) : cert;
+                try (InputStream in = ExtendDefaultTrustStore.class.getClassLoader().getResourceAsStream(certPath)) {
+                    final X509Certificate ca = (X509Certificate) cf.generateCertificate(new BufferedInputStream(in));
+                    keystore.setCertificateEntry(alias, ca);
+                }
+            }
+
+            Files.createDirectories(sslDir);
+
+            try (OutputStream out = Files.newOutputStream(extendedTrustStorePath)) {
+                keystore.store(out, new char[0]);
+            }
+            System.out.println("Stored the extended trust store to " + extendedTrustStorePath);
+        }
+        return extendedTrustStorePath;
+    }
+
+    public static void main(String[] args) {
+        try {
+            final Path baseDir = Paths.get(args[0]);
+            String[] certs = new String[args.length - 1];
+            System.arraycopy(args, 1, certs, 0, args.length - 1);
+            extendTrustStoreIfNeeded(baseDir, certs);
+        } catch (Exception e) {
+            new Exception("Could not extend the default trust store with args " + String.join(", ", args), e).printStackTrace();
+        }
+    }
+}
diff --git a/integration-tests-support/test-support/src/main/java/org/apache/camel/quarkus/test/TrustStoreResource.java b/integration-tests-support/test-support/src/main/java/org/apache/camel/quarkus/test/TrustStoreResource.java
index e6bdb18..2fe0a4d 100644
--- a/integration-tests-support/test-support/src/main/java/org/apache/camel/quarkus/test/TrustStoreResource.java
+++ b/integration-tests-support/test-support/src/main/java/org/apache/camel/quarkus/test/TrustStoreResource.java
@@ -35,10 +35,13 @@ public class TrustStoreResource implements QuarkusTestResourceLifecycleManager {
 
     @Override
     public Map<String, String> start() {
-        final String graalVmHome = System.getenv("GRAALVM_HOME");
-        final String javaHome = System.getProperty("java.home", System.getenv("JAVA_HOME"));
+        return Collections.singletonMap("javax.net.ssl.trustStore", getDefaultTrustStorePath().toString());
+    }
 
+    public static Path getDefaultTrustStorePath() {
         Path trustStorePath;
+        final String graalVmHome = System.getenv("GRAALVM_HOME");
+        final String javaHome = System.getProperty("java.home", System.getenv("JAVA_HOME"));
 
         if (graalVmHome != null && !graalVmHome.isEmpty()
                 && Files.exists(trustStorePath = Paths.get(graalVmHome).resolve(CACERTS_REL_PATH))) {
@@ -56,8 +59,7 @@ public class TrustStoreResource implements QuarkusTestResourceLifecycleManager {
                             + ". You may need to set GRAALVM_HOME or JAVA_HOME properly. Found $GRAALVM_HOME = " + graalVmHome
                             + " and $JAVA_HOME = " + graalVmHome);
         }
-
-        return Collections.singletonMap("javax.net.ssl.trustStore", trustStorePath.toString());
+        return trustStorePath;
     }
 
     @Override
diff --git a/integration-tests/solr/pom.xml b/integration-tests/solr/pom.xml
index ce71b8a..39be0c0 100644
--- a/integration-tests/solr/pom.xml
+++ b/integration-tests/solr/pom.xml
@@ -17,7 +17,8 @@
     limitations under the License.
 
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
@@ -30,8 +31,7 @@
     <description>Integration tests for Camel Quarkus Solr extension</description>
 
     <properties>
-        <solr.trust-store>${project.basedir}/src/test/resources/ssl/solr-ssl.keystore.jks</solr.trust-store>
-        <solr.trust-store-password>secret</solr.trust-store-password>
+        <solr.trust-store>${project.basedir}/target/ssl/trust-store.jks</solr.trust-store>
     </properties>
 
     <dependencyManagement>
@@ -43,16 +43,6 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
-            <dependency>
-                <groupId>io.quarkus</groupId>
-                <artifactId>quarkus-jackson-deployment</artifactId>
-                <version>${quarkus.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.quarkus</groupId>
-                <artifactId>quarkus-resteasy-jackson-deployment</artifactId>
-                <version>${quarkus.version}</version>
-            </dependency>
         </dependencies>
     </dependencyManagement>
 
@@ -91,15 +81,6 @@
             <artifactId>solr</artifactId>
             <scope>test</scope>
         </dependency>
-        <!-- this dependency is added so that all artifacts quarkus-resteasy-jackson-deployment and quarkus-jackson-deployment are downloaded before tests, otherwise it will fail after setting the javax.net.ssl.trustStore and javax.net.ssl.trustStorePassword properties -->
-        <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-jackson-deployment</artifactId>
-        </dependency>
-       <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-resteasy-jackson-deployment</artifactId>
-        </dependency>
 
         <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
         <dependency>
@@ -118,21 +99,66 @@
     </dependencies>
 
     <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <systemPropertyVariables>
-                        <javax.net.ssl.trustStore>${solr.trust-store}</javax.net.ssl.trustStore>
-                        <javax.net.ssl.trustStorePassword>${solr.trust-store-password}</javax.net.ssl.trustStorePassword>
-                    </systemPropertyVariables>
-                </configuration>
-            </plugin>
-        </plugins>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
     </build>
+
     <profiles>
         <profile>
+            <id>full</id>
+            <activation>
+                <property>
+                    <name>!quickly</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>extend-default-trust-store-extension</id>
+                                <phase>test-compile</phase>
+                                <goals>
+                                    <goal>java</goal>
+                                </goals>
+                                <configuration>
+                                    <additionalClasspathElements>${basedir}/target/test-classes</additionalClasspathElements>
+                                    <mainClass>org.apache.camel.quarkus.test.ExtendDefaultTrustStore</mainClass>
+                                    <arguments>
+                                        <argument>${solr.trust-store}</argument>
+                                        <argument>ssl/solr-ssl.der</argument>
+                                    </arguments>
+                                    <includePluginDependencies>true</includePluginDependencies>
+                                </configuration>
+                            </execution>
+                        </executions>
+                        <dependencies>
+                            <dependency>
+                                <groupId>org.apache.camel.quarkus</groupId>
+                                <artifactId>camel-quarkus-integration-test-support</artifactId>
+                                <version>${project.version}</version>
+                            </dependency>
+                        </dependencies>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <systemPropertyVariables>
+                                <javax.net.ssl.trustStore>${solr.trust-store}</javax.net.ssl.trustStore>
+                            </systemPropertyVariables>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
             <id>native</id>
             <activation>
                 <property>
@@ -141,8 +167,6 @@
             </activation>
             <properties>
                 <quarkus.package.type>native</quarkus.package.type>
-                <quarkus.native.additional-build-args>-H:IncludeResources=.*ssl/.*,-J-Djavax.net.ssl.trustStore=${solr.trust-store},
-                    -J-Djavax.net.ssl.trustStorePassword=${solr.trust-store-password}</quarkus.native.additional-build-args>
             </properties>
             <build>
                 <plugins>
diff --git a/integration-tests/solr/src/main/resources/application.properties b/integration-tests/solr/src/main/resources/application.properties
new file mode 100644
index 0000000..8969816
--- /dev/null
+++ b/integration-tests/solr/src/main/resources/application.properties
@@ -0,0 +1,21 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+quarkus.native.resources.includes = ssl/**
+
+# target/ssl/trust-store.jks can be created by executing ExtendDefaultTrustStore.main(). That must happen
+# before running the build mojo of Quarkus Maven plugin
+quarkus.native.additional-build-args = -J-Djavax.net.ssl.trustStore=${project.basedir}/target/ssl/trust-store.jks
\ No newline at end of file
diff --git a/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java b/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java
index e267eea..5e29775 100644
--- a/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java
+++ b/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java
@@ -39,7 +39,7 @@ import static org.hamcrest.Matchers.equalTo;
 public class SolrTest {
     /**
      * Quarkus resources to test
-     * 
+     *
      * @return
      */
     private static Stream<String> resources() {
diff --git a/integration-tests/solr/src/test/resources/ssl/README.adoc b/integration-tests/solr/src/test/resources/ssl/README.adoc
new file mode 100644
index 0000000..a61d349
--- /dev/null
+++ b/integration-tests/solr/src/test/resources/ssl/README.adoc
@@ -0,0 +1,6 @@
+== Purpose and content of the individual files in this directory
+
+* `solr-ssl.keystore.jks` the keystore containing the server certificate and private key to use when starting
+  Solr container with SSL enbled. The password for both the store and the private key is `secret`.
+* `solr-ssl.der` the same server certificate as in `solr-ssl.keystore.jks`, stored separately so that it is
+  easier to add it to the JVM's trust store via `ExtendDefaultTrustStore.main()`
diff --git a/integration-tests/solr/src/test/resources/ssl/solr-ssl.der b/integration-tests/solr/src/test/resources/ssl/solr-ssl.der
new file mode 100644
index 0000000..f04dffe
--- /dev/null
+++ b/integration-tests/solr/src/test/resources/ssl/solr-ssl.der
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIEM3jJlzANBgkqhkiG9w0BAQsFADB+MRAwDgYDVQQGEwdD
+b3VudHJ5MQ4wDAYDVQQIEwVTdGF0ZTERMA8GA1UEBxMITG9jYXRpb24xFTATBgNV
+BAoTDE9yZ2FuaXphdGlvbjEcMBoGA1UECxMTT3JnYW5pemF0aW9uYWwgVW5pdDES
+MBAGA1UEAxMJbG9jYWxob3N0MB4XDTIwMTExODEzNTcxMFoXDTQ4MDQwNDEzNTcx
+MFowfjEQMA4GA1UEBhMHQ291bnRyeTEOMAwGA1UECBMFU3RhdGUxETAPBgNVBAcT
+CExvY2F0aW9uMRUwEwYDVQQKEwxPcmdhbml6YXRpb24xHDAaBgNVBAsTE09yZ2Fu
+aXphdGlvbmFsIFVuaXQxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAOwmcDqlyOwC8vv3j7NrC1Y24sBmgAyfuLy0Y4KF
+yakZIVJQSWLm2NyjmK3a3ZN2gjsv8dcLdg+8KJvvwUDhMxMeS+xXS4UjHX27crL2
+AouKI/ueAC+thhfvdPIgR/opnrLXueK6kRgLiHOq4Ao18QJ0VCYhpfQx73ZXAMPN
+g4XdktmdZURCx96noYB6oG5SQ/SL2LT+g5GDPbJHGDIvMSe6j1no5Sqn11Q46Azf
+DZfhP6+OzT7zWOGCvi/Tn7qPQ6hX27esin93zlKA9fY/hIbq2o5u6ARS0SV3xNhd
+8MlHC7s4ML0SD7ecZMbK6Xb4ECFvVkiNa0SScEpJ21eEL5sCAwEAAaM9MDswHQYD
+VR0OBBYEFBNQ3LdaHZHA44JakfiUWV9pm7RbMBoGA1UdEQQTMBGCCWxvY2FsaG9z
+dIcEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEAHTGU1JEjwDOongGlRC+e+zJVLymJ
+6x+npvmrIwjpGL/FoSfEtk8UH4TU02hzXPrq+mKlYIXVgvh2Ip7LSPSBNH1dPksi
+qhKXxNsnqdED9svQ8wjoIC/4PNJ1+cRUwOeC5rmEZlJaBmL7qgAmf/UsgPs5/zM9
+a+OEOyCoiA+I8hQYBhrbeDoJGhLsIxePMQVTPjoKHk10j+o7h7MpOmeCe4Sy3pT4
+yN+Z3esa9wlJoRiJVqlYoYq2ZI4NedTWksVu+B2sdNb8jWMT4V6gCF8Se/rNKifr
+kR0KR/InP19Ioz6t7IMYFyVDaoUsRK8DmUlTwXiWV+5sCiJZYYUOLGIbTg==
+-----END CERTIFICATE-----
diff --git a/integration-tests/solr/src/test/resources/ssl/solr-ssl.keystore.p12 b/integration-tests/solr/src/test/resources/ssl/solr-ssl.keystore.p12
deleted file mode 100644
index f83bff9..0000000
Binary files a/integration-tests/solr/src/test/resources/ssl/solr-ssl.keystore.p12 and /dev/null differ
diff --git a/integration-tests/solr/src/test/resources/ssl/solr-ssl.pem b/integration-tests/solr/src/test/resources/ssl/solr-ssl.pem
deleted file mode 100644
index 404b5a3..0000000
--- a/integration-tests/solr/src/test/resources/ssl/solr-ssl.pem
+++ /dev/null
@@ -1,63 +0,0 @@
-Bag Attributes
-    friendlyName: solr-ssl
-    localKeyID: 54 69 6D 65 20 31 36 30 35 37 30 37 38 34 34 38 32 36 
-Key Attributes: <No Attributes>
------BEGIN ENCRYPTED PRIVATE KEY-----
-MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI8hUTfU2CykECAggA
-MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECIheXQFdGg7wBIIEyNjpbmVwwtyk
-+R5nKN/Ln1VvtGV70j6gYEw8z2Ovk1Dt1a2Ppxmd1rPJtaIJ8GiOaYJWSA1ASDXg
-mYWXqP4jaqGEzCs3yGpLL/EjmfOVQTN2ffoPQJ10NRFqm7RH/D1YLu3J4SfPOaEz
-vBF8h6OrgDWSYf+QstDU3vdeYSqLjZ7Q/2mnSoiwz33VV21+Qo50+b2ewAb/p8LE
-1U1M1rs/nZI5iJEjIJ26WawY6Pdi6XKWV4tbG/X0P4sTZIfVZv7tePd+qSj9vKOb
-qp34NuC1pWwFzk0PIcLQp0Cs+ikb0jDnfuDwv/1u3XPpzRql2QkH5u6SaXPnLXRK
-2tPNA7oEw6YGIfeGea02jw6ZKB0m1ieKJaXQx0OXiEk4iZV10+aA/fx6ToW3aVri
-GBN1FvoZ/ZLNKq6/XvDS3GaKo37GmunNjk8bQsu2B3WhD1TcLwtIUo0wIhHzIFnh
-3Y1qBDX5m2sidyoDoDYC14Ric9N5cmE+NDehy4nU92hsMfp5gtm9BnK4+7PqMWFz
-gMuKOD6SbZvU6bR17VQNM4RkajtJHMlhpDxE+CDWVrz872GYJT7FyM8mfMbLPwCc
-TSITWIIJ2auCBtd6um1NBpzh4JEokjr/WfzWLwiXEA0JcCwMVOI5QJN9JlRGIqgr
-NbhY+12ll3lkAKI8TJbdtNacK9LurUJDvDhx4ZC0Zz2GPB8n2isuQyu+iZgzStaU
-ssD8J7EDuHO22Wos1IGv8Y2EtVadHyfMhIRvrm+C7a/sOu2bVutkUjvvemg+ztnr
-5CIffgE4zK2iSLOyLxx3aE4kYPC0oRqYwhbTNlbWsVJJUGw9x7qAgmlnIMrh3CcE
-9yFtnrhD2K4geceHbd5jLD5HlPIFuJZwtwDhjIei1iJ3LUCzlya/nv0EDEZyi/6f
-J5vtUPpPMai07EWI0WI42Ax2XosSCgKB4+0IL7Pxs4pDBD6AvwsRSd9LhdzrXRhz
-hwuvHwlCan0c6tF0WNq8T+GSz8vUnZIf1pX9NzskNv31mbVmovfTjKmSLS1xX81x
-nhlCnbKTKaw7mvLVLJ2c3UUCu8ZYa9qUvEzxmWTjIIN8dWbzu1MXEn4s6WUNZaEr
-+7lQoE/7DJ7oS0D6piOCbV6pTrbIS/Tfyu7LenWIlXOI8GD2YN21K7hIR/5XbGyU
-RRuEJbkunUeJvKS+Mvkk43VF6xGga/ChbQ32t2GX6lj8bOfdpXkKdGbPm8kB+LtY
-dwc+UfJqIzHP5OtcqzmL9HvcjpEGJF1WgBgfwowD3kYsCZq1N6MCTCm2WEDz7Q5Y
-ylsi/sFMyoiNUtXIj+T2w9HfM82NOAzAHGGZVAhVPtHtfU/m5Yo8rFMkdmbwxeJZ
-NwVoWOyJzefCMNXMosHxOCTef7FB24UGa+vi+e7WC6mLVny1FjTxCpxkb8Bw3+e1
-OHetZZisp0PK8gQGA4XiyMaAOKCpKGNoIYPwaNzB0S6qB9OM4ohyiBiOYglnQtv8
-JrLWJVjV2mBZRREfjc+Ik9iKGFbF95xAKvW66T3zBpJQjkjPQ6exsQKv3tGaL9mX
-VW5ySdJ9IXAm5tiqfakE2BYvozsyGRD5m+Z1v71zA9ovY1utlIf0iBuSnQvgxcTp
-KJyiBtXkAPrRLz1tD3wrXA==
------END ENCRYPTED PRIVATE KEY-----
-Bag Attributes
-    friendlyName: solr-ssl
-    localKeyID: 54 69 6D 65 20 31 36 30 35 37 30 37 38 34 34 38 32 36 
-subject=C = Country, ST = State, L = Location, O = Organization, OU = Organizational Unit, CN = localhost
-
-issuer=C = Country, ST = State, L = Location, O = Organization, OU = Organizational Unit, CN = localhost
-
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIEM3jJlzANBgkqhkiG9w0BAQsFADB+MRAwDgYDVQQGEwdD
-b3VudHJ5MQ4wDAYDVQQIEwVTdGF0ZTERMA8GA1UEBxMITG9jYXRpb24xFTATBgNV
-BAoTDE9yZ2FuaXphdGlvbjEcMBoGA1UECxMTT3JnYW5pemF0aW9uYWwgVW5pdDES
-MBAGA1UEAxMJbG9jYWxob3N0MB4XDTIwMTExODEzNTcxMFoXDTQ4MDQwNDEzNTcx
-MFowfjEQMA4GA1UEBhMHQ291bnRyeTEOMAwGA1UECBMFU3RhdGUxETAPBgNVBAcT
-CExvY2F0aW9uMRUwEwYDVQQKEwxPcmdhbml6YXRpb24xHDAaBgNVBAsTE09yZ2Fu
-aXphdGlvbmFsIFVuaXQxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAOwmcDqlyOwC8vv3j7NrC1Y24sBmgAyfuLy0Y4KF
-yakZIVJQSWLm2NyjmK3a3ZN2gjsv8dcLdg+8KJvvwUDhMxMeS+xXS4UjHX27crL2
-AouKI/ueAC+thhfvdPIgR/opnrLXueK6kRgLiHOq4Ao18QJ0VCYhpfQx73ZXAMPN
-g4XdktmdZURCx96noYB6oG5SQ/SL2LT+g5GDPbJHGDIvMSe6j1no5Sqn11Q46Azf
-DZfhP6+OzT7zWOGCvi/Tn7qPQ6hX27esin93zlKA9fY/hIbq2o5u6ARS0SV3xNhd
-8MlHC7s4ML0SD7ecZMbK6Xb4ECFvVkiNa0SScEpJ21eEL5sCAwEAAaM9MDswHQYD
-VR0OBBYEFBNQ3LdaHZHA44JakfiUWV9pm7RbMBoGA1UdEQQTMBGCCWxvY2FsaG9z
-dIcEfwAAATANBgkqhkiG9w0BAQsFAAOCAQEAHTGU1JEjwDOongGlRC+e+zJVLymJ
-6x+npvmrIwjpGL/FoSfEtk8UH4TU02hzXPrq+mKlYIXVgvh2Ip7LSPSBNH1dPksi
-qhKXxNsnqdED9svQ8wjoIC/4PNJ1+cRUwOeC5rmEZlJaBmL7qgAmf/UsgPs5/zM9
-a+OEOyCoiA+I8hQYBhrbeDoJGhLsIxePMQVTPjoKHk10j+o7h7MpOmeCe4Sy3pT4
-yN+Z3esa9wlJoRiJVqlYoYq2ZI4NedTWksVu+B2sdNb8jWMT4V6gCF8Se/rNKifr
-kR0KR/InP19Ioz6t7IMYFyVDaoUsRK8DmUlTwXiWV+5sCiJZYYUOLGIbTg==
------END CERTIFICATE-----
diff --git a/pom.xml b/pom.xml
index 5ffb33d..01f5309 100644
--- a/pom.xml
+++ b/pom.xml
@@ -415,6 +415,7 @@
                             <exclude>**/*.cnf</exclude>
                             <exclude>**/*.conf</exclude>
                             <exclude>**/*.csv</exclude>
+                            <exclude>**/*.der</exclude>
                             <exclude>**/*.ftl</exclude>
                             <exclude>**/*.graphql</exclude>
                             <exclude>**/*.ics</exclude>
diff --git a/tooling/scripts/test-categories.yaml b/tooling/scripts/test-categories.yaml
index 1c57d37..c4c65c0 100644
--- a/tooling/scripts/test-categories.yaml
+++ b/tooling/scripts/test-categories.yaml
@@ -25,6 +25,7 @@ cache-networking3:
   - jsch
   - ssh
 cloud:
+  - solr
   - aws
   - aws2
   - azure
@@ -33,7 +34,6 @@ cloud:
   - grpc
   - protobuf
   - smallrye-reactive-messaging
-  - solr
 core-main-validation:
   - core
   - core-discovery-disabled