You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by jd...@apache.org on 2024/10/31 14:49:02 UTC
(solr) 04/10: Use Self Signed Cert-Friendy SSL Context in Integration Test
This is an automated email from the ASF dual-hosted git repository.
jdyer pushed a commit to branch feature/SOLR-17516-c
in repository https://gitbox.apache.org/repos/asf/solr.git
commit 87bf82db3e9458c465e7339b8caa40069f128cde
Author: jdyer1 <jd...@apache.org>
AuthorDate: Thu Oct 31 08:51:43 2024 -0500
Use Self Signed Cert-Friendy SSL Context in Integration Test
---
.../client/solrj/impl/HttpJdkSolrClientTest.java | 82 +--------------------
.../impl/LBHttp2SolrClientIntegrationTest.java | 55 ++++++++++++++
.../solr/client/solrj/impl/MockTrustManager.java | 84 ++++++++++++++++++++++
3 files changed, 140 insertions(+), 81 deletions(-)
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
index 698658a8528..1ae5c9dadfc 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
@@ -20,10 +20,7 @@ package org.apache.solr.client.solrj.impl;
import java.io.IOException;
import java.net.CookieHandler;
import java.net.CookieManager;
-import java.net.Socket;
import java.net.http.HttpClient;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.Collections;
import java.util.Objects;
@@ -31,13 +28,7 @@ import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509ExtendedTrustManager;
import org.apache.lucene.util.NamedThreadFactory;
-import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.ResponseParser;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
@@ -48,34 +39,11 @@ import org.apache.solr.client.solrj.response.SolrPingResponse;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.util.ExecutorUtil;
-import org.apache.solr.util.SSLTestConfig;
import org.junit.After;
-import org.junit.BeforeClass;
import org.junit.Test;
public class HttpJdkSolrClientTest extends HttpSolrClientTestBase {
- private static SSLContext allTrustingSslContext;
-
- @BeforeClass
- public static void beforeClass() {
- try {
- KeyManagerFactory keyManagerFactory =
- KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
- SSLTestConfig stc = SolrTestCaseJ4.sslConfig;
- keyManagerFactory.init(stc.defaultKeyStore(), stc.defaultKeyStorePassword().toCharArray());
-
- SSLContext sslContext = SSLContext.getInstance("SSL");
- sslContext.init(
- keyManagerFactory.getKeyManagers(),
- new TrustManager[] {MOCK_TRUST_MANAGER},
- stc.notSecureSecureRandom());
- allTrustingSslContext = sslContext;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
@After
public void workaroundToReleaseThreads_noClosableUntilJava21() {
Thread[] threads = new Thread[Thread.currentThread().getThreadGroup().activeCount()];
@@ -550,7 +518,7 @@ public class HttpJdkSolrClientTest extends HttpSolrClientTestBase {
.withConnectionTimeout(connectionTimeout, TimeUnit.MILLISECONDS)
.withIdleTimeout(socketTimeout, TimeUnit.MILLISECONDS)
.withDefaultCollection(DEFAULT_CORE)
- .withSSLContext(allTrustingSslContext);
+ .withSSLContext(MockTrustManager.ALL_TRUSTING_SSL_CONTEXT);
return (B) b;
}
@@ -583,52 +551,4 @@ public class HttpJdkSolrClientTest extends HttpSolrClientTestBase {
+ "6f 6e 21 32 e0 28 72 65 73 "
+ "70 6f 6e 73 65 0c 84 60 60 "
+ "00 01 80";
-
- /**
- * Taken from: https://www.baeldung.com/java-httpclient-ssl sec 4.1, 2024/02/12. This is an
- * all-trusting Trust Manager. Works with self-signed certificates.
- */
- private static final TrustManager MOCK_TRUST_MANAGER =
- new X509ExtendedTrustManager() {
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket)
- throws CertificateException {
- // no-op
- }
-
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket)
- throws CertificateException {
- // no-op
- }
-
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine)
- throws CertificateException {
- // no-op
- }
-
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine)
- throws CertificateException {
- // no-op
- }
-
- @Override
- public java.security.cert.X509Certificate[] getAcceptedIssuers() {
- return new java.security.cert.X509Certificate[0];
- }
-
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType)
- throws CertificateException {
- // no-op
- }
-
- @Override
- public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)
- throws CertificateException {
- // no-op
- }
- };
}
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttp2SolrClientIntegrationTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttp2SolrClientIntegrationTest.java
index 05a762669d5..b13882d53b4 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttp2SolrClientIntegrationTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttp2SolrClientIntegrationTest.java
@@ -20,14 +20,20 @@ import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.lang.invoke.MethodHandles;
+import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509ExtendedTrustManager;
import org.apache.lucene.util.IOUtils;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrClient;
@@ -134,6 +140,7 @@ public class LBHttp2SolrClientIntegrationTest extends SolrTestCaseJ4 {
var delegateClient = new HttpJdkSolrClient.Builder()
.withConnectionTimeout(1000, TimeUnit.MILLISECONDS)
.withIdleTimeout(2000, TimeUnit.MILLISECONDS)
+ .withSSLContext(MockTrustManager.ALL_TRUSTING_SSL_CONTEXT)
.build();
var lbClient = new LBHttpJdkSolrClient.Builder(delegateClient, baseSolrEndpoints)
.withDefaultCollection(solr[0].getDefaultCollection())
@@ -371,4 +378,52 @@ public class LBHttp2SolrClientIntegrationTest extends SolrTestCaseJ4 {
}
}
}
+
+ /**
+ * Taken from: https://www.baeldung.com/java-httpclient-ssl sec 4.1, 2024/02/12. This is an
+ * all-trusting Trust Manager. Works with self-signed certificates.
+ */
+ private static final TrustManager MOCK_TRUST_MANAGER =
+ new X509ExtendedTrustManager() {
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+ return new java.security.cert.X509Certificate[0];
+ }
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)
+ throws CertificateException {
+ // no-op
+ }
+ };
}
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/MockTrustManager.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/MockTrustManager.java
new file mode 100644
index 00000000000..7dad3a709cb
--- /dev/null
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/MockTrustManager.java
@@ -0,0 +1,84 @@
+package org.apache.solr.client.solrj.impl;
+
+import java.net.Socket;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509ExtendedTrustManager;
+import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.util.SSLTestConfig;
+
+/**
+ * Taken from: https://www.baeldung.com/java-httpclient-ssl sec 4.1, 2024/02/12. This is an
+ * all-trusting Trust Manager. Works with self-signed certificates.
+ */
+public class MockTrustManager extends X509ExtendedTrustManager {
+
+ public static final SSLContext ALL_TRUSTING_SSL_CONTEXT;
+
+ private static final MockTrustManager INSTANCE = new MockTrustManager();
+
+ static {
+ try {
+ KeyManagerFactory keyManagerFactory =
+ KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+ SSLTestConfig stc = SolrTestCaseJ4.sslConfig;
+ keyManagerFactory.init(stc.defaultKeyStore(), stc.defaultKeyStorePassword().toCharArray());
+
+ SSLContext sslContext = SSLContext.getInstance("SSL");
+ sslContext.init(
+ keyManagerFactory.getKeyManagers(),
+ new TrustManager[] {INSTANCE},
+ stc.notSecureSecureRandom());
+ ALL_TRUSTING_SSL_CONTEXT = sslContext;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private MockTrustManager() {}
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+ return new java.security.cert.X509Certificate[0];
+ }
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ // no-op
+ }
+
+ @Override
+ public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType)
+ throws CertificateException {
+ // no-op
+ }
+}