This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 84b4d100a8 NIFI-11848 Allocate unused port in
TlsCertificateAuthorityTest
84b4d100a8 is described below
commit 84b4d100a8f0afdaf0ae52d90e8ecabb552d1f1b
Author: Nandor Soma Abonyi <[email protected]>
AuthorDate: Sat Jul 22 23:59:03 2023 +0200
NIFI-11848 Allocate unused port in TlsCertificateAuthorityTest
This closes #7514
Signed-off-by: David Handermann <[email protected]>
---
.../server/TlsCertificateAuthorityService.java | 37 ++++++++++++----------
.../tls/service/TlsCertificateAuthorityTest.java | 10 +++---
2 files changed, 26 insertions(+), 21 deletions(-)
diff --git
a/nifi-toolkit/nifi-toolkit-tls/src/main/java/org/apache/nifi/toolkit/tls/service/server/TlsCertificateAuthorityService.java
b/nifi-toolkit/nifi-toolkit-tls/src/main/java/org/apache/nifi/toolkit/tls/service/server/TlsCertificateAuthorityService.java
index 26d3d44dab..b181d41295 100644
---
a/nifi-toolkit/nifi-toolkit-tls/src/main/java/org/apache/nifi/toolkit/tls/service/server/TlsCertificateAuthorityService.java
+++
b/nifi-toolkit/nifi-toolkit-tls/src/main/java/org/apache/nifi/toolkit/tls/service/server/TlsCertificateAuthorityService.java
@@ -18,13 +18,6 @@
package org.apache.nifi.toolkit.tls.service.server;
import com.fasterxml.jackson.databind.ObjectMapper;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.security.KeyPair;
-import java.security.KeyStore;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
import org.apache.nifi.security.util.TlsPlatform;
import org.apache.nifi.toolkit.tls.configuration.TlsConfig;
import org.apache.nifi.toolkit.tls.manager.TlsCertificateAuthorityManager;
@@ -32,7 +25,6 @@ import
org.apache.nifi.toolkit.tls.manager.writer.JsonConfigurationWriter;
import org.apache.nifi.toolkit.tls.service.BaseCertificateAuthorityCommandLine;
import org.apache.nifi.toolkit.tls.util.OutputStreamFactory;
import org.eclipse.jetty.http.HttpVersion;
-import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.SecureRequestCustomizer;
@@ -43,6 +35,14 @@ import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.security.KeyPair;
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+
/**
* Starts a Jetty server that will either load an existing CA or create one
and use it to sign CSRs
*/
@@ -51,6 +51,8 @@ public class TlsCertificateAuthorityService {
private final OutputStreamFactory outputStreamFactory;
private Server server;
+ private ServerConnector serverConnector;
+
public TlsCertificateAuthorityService() {
this(FileOutputStream::new);
}
@@ -59,9 +61,7 @@ public class TlsCertificateAuthorityService {
this.outputStreamFactory = outputStreamFactory;
}
- private static Server createServer(Handler handler, int port, KeyStore
keyStore, String keyPassword) throws Exception {
- Server server = new Server();
-
+ private static ServerConnector createSSLConnector(Server server, int port,
KeyStore keyStore, String keyPassword) {
SslContextFactory sslContextFactory = new SslContextFactory.Server();
sslContextFactory.setIncludeProtocols(TlsPlatform.getLatestProtocol());
sslContextFactory.setKeyStore(keyStore);
@@ -73,10 +73,7 @@ public class TlsCertificateAuthorityService {
ServerConnector sslConnector = new ServerConnector(server, new
SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()), new
HttpConnectionFactory(httpsConfig));
sslConnector.setPort(port);
- server.addConnector(sslConnector);
- server.setHandler(handler);
-
- return server;
+ return sslConnector;
}
public synchronized void start(TlsConfig tlsConfig, String configJson,
boolean differentPasswordsForKeyAndKeystore) throws Exception {
@@ -111,8 +108,10 @@ public class TlsCertificateAuthorityService {
tlsManager.write(outputStreamFactory);
String signingAlgorithm = tlsConfig.getSigningAlgorithm();
int days = tlsConfig.getDays();
- server = createServer(new
TlsCertificateAuthorityServiceHandler(signingAlgorithm, days,
tlsConfig.getToken(), caCert, keyPair, objectMapper), tlsConfig.getPort(),
tlsManager.getKeyStore(),
- tlsConfig.getKeyPassword());
+ server = new Server();
+ serverConnector = createSSLConnector(server, tlsConfig.getPort(),
tlsManager.getKeyStore(), tlsConfig.getKeyPassword());
+ server.addConnector(serverConnector);
+ server.setHandler(new
TlsCertificateAuthorityServiceHandler(signingAlgorithm, days,
tlsConfig.getToken(), caCert, keyPair, objectMapper));
server.start();
}
@@ -123,4 +122,8 @@ public class TlsCertificateAuthorityService {
server.stop();
server.join();
}
+
+ public int getPort() {
+ return serverConnector.getLocalPort();
+ }
}
diff --git
a/nifi-toolkit/nifi-toolkit-tls/src/test/java/org/apache/nifi/toolkit/tls/service/TlsCertificateAuthorityTest.java
b/nifi-toolkit/nifi-toolkit-tls/src/test/java/org/apache/nifi/toolkit/tls/service/TlsCertificateAuthorityTest.java
index 4d5cd61f51..8af81c43e7 100644
---
a/nifi-toolkit/nifi-toolkit-tls/src/test/java/org/apache/nifi/toolkit/tls/service/TlsCertificateAuthorityTest.java
+++
b/nifi-toolkit/nifi-toolkit-tls/src/test/java/org/apache/nifi/toolkit/tls/service/TlsCertificateAuthorityTest.java
@@ -23,7 +23,6 @@ import org.apache.nifi.security.util.KeystoreType;
import org.apache.nifi.toolkit.tls.configuration.TlsClientConfig;
import org.apache.nifi.toolkit.tls.configuration.TlsConfig;
import
org.apache.nifi.toolkit.tls.service.client.TlsCertificateAuthorityClient;
-import
org.apache.nifi.toolkit.tls.service.client.TlsCertificateAuthorityClientCommandLine;
import
org.apache.nifi.toolkit.tls.service.server.TlsCertificateAuthorityService;
import org.apache.nifi.toolkit.tls.standalone.TlsToolkitStandalone;
import org.apache.nifi.toolkit.tls.util.InputStreamFactory;
@@ -100,11 +99,13 @@ public class TlsCertificateAuthorityTest {
serverConfig.setCaHostname("localhost");
serverConfig.setToken(myTestTokenUseSomethingStronger);
serverConfig.setKeyStore(serverKeyStore);
- serverConfig.setPort(0);
serverConfig.setDays(5);
serverConfig.setKeySize(2048);
serverConfig.initDefaults();
+ // set port back to 0, so Jetty will allocate a free port
+ serverConfig.setPort(0);
+
clientConfig = new TlsClientConfig();
clientConfig.setCaHostname("localhost");
clientConfig.setDn("OU=NIFI,CN=otherHostname");
@@ -112,7 +113,6 @@ public class TlsCertificateAuthorityTest {
clientConfig.setTrustStore(clientTrustStore);
clientConfig.setToken(myTestTokenUseSomethingStronger);
clientConfig.setDomainAlternativeNames(Collections.singletonList(subjectAlternativeName));
- clientConfig.setPort(0);
clientConfig.setKeySize(2048);
clientConfig.initDefaults();
@@ -146,6 +146,7 @@ public class TlsCertificateAuthorityTest {
try {
tlsCertificateAuthorityService = new
TlsCertificateAuthorityService(outputStreamFactory);
tlsCertificateAuthorityService.start(serverConfig,
serverConfigFile.getAbsolutePath(), true);
+ clientConfig.setPort(tlsCertificateAuthorityService.getPort());
TlsCertificateAuthorityClient tlsCertificateAuthorityClient = new
TlsCertificateAuthorityClient(outputStreamFactory);
tlsCertificateAuthorityClient.generateCertificateAndGetItSigned(clientConfig,
null, clientConfigFile.getAbsolutePath(), true);
validate();
@@ -162,6 +163,7 @@ public class TlsCertificateAuthorityTest {
try {
tlsCertificateAuthorityService = new
TlsCertificateAuthorityService(outputStreamFactory);
tlsCertificateAuthorityService.start(serverConfig,
serverConfigFile.getAbsolutePath(), false);
+ clientConfig.setPort(tlsCertificateAuthorityService.getPort());
TlsCertificateAuthorityClient tlsCertificateAuthorityClient = new
TlsCertificateAuthorityClient(outputStreamFactory);
tlsCertificateAuthorityClient.generateCertificateAndGetItSigned(clientConfig,
null, clientConfigFile.getAbsolutePath(), false);
validate();
@@ -180,8 +182,8 @@ public class TlsCertificateAuthorityTest {
try {
tlsCertificateAuthorityService = new
TlsCertificateAuthorityService(outputStreamFactory);
tlsCertificateAuthorityService.start(serverConfig,
serverConfigFile.getAbsolutePath(), false);
+ clientConfig.setPort(tlsCertificateAuthorityService.getPort());
TlsCertificateAuthorityClient tlsCertificateAuthorityClient = new
TlsCertificateAuthorityClient(outputStreamFactory);
- new TlsCertificateAuthorityClientCommandLine(inputStreamFactory);
tlsCertificateAuthorityClient.generateCertificateAndGetItSigned(clientConfig,
null, clientConfigFile.getAbsolutePath(), true);
validate();
} finally {