This is an automated email from the ASF dual-hosted git repository.
bejancsaba pushed a commit to branch support/nifi-1.x
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/support/nifi-1.x by this push:
new 5d50950534 NIFI-11344 Make minifi fips compatible
5d50950534 is described below
commit 5d50950534509876bbce9baa196706f2460d0f78
Author: Ferenc Erdei <[email protected]>
AuthorDate: Wed Mar 29 14:17:07 2023 +0200
NIFI-11344 Make minifi fips compatible
This closes #7098.
(cherry picked form commit 595b1b4dd3c92255c4d90dca77966d8f78102eec)
---
minifi/minifi-assembly/pom.xml | 15 +++
.../main/assembly/dependencies-windows-service.xml | 2 +
.../src/main/assembly/dependencies.xml | 2 +
minifi/minifi-bootstrap/pom.xml | 14 +++
.../ingestors/RestChangeIngestor.java | 70 ++++++++-----
...InvokeHttpMiNiFiProxyNoPasswordTemplateTest.yml | 2 +-
.../InvokeHttpMiNiFiProxyPasswordTemplateTest.yml | 2 +-
.../src/test/resources/MINIFI-216/config.yml | 2 +-
.../test/resources/MINIFI-216/configOverrides.yml | 2 +-
.../resources/MINIFI-216/nifi.properties.before | 2 +-
.../src/test/resources/MINIFI-245/config.yml | 2 +-
.../resources/MINIFI-245/nifi.properties.before | 2 +-
.../src/test/resources/MINIFI-277/config.yml | 2 +-
.../src/test/resources/MINIFI-277/nifi.properties | 2 +-
.../src/test/resources/MINIFI-516/config.yml | 2 +-
.../src/test/resources/NIFI-8753/config.yml | 2 +-
.../resources/NIFI-8753/nifi.properties.before | 2 +-
.../test/resources/SimpleRPGToLogAttributes.yml | 2 +-
.../bootstrap-provenance-reporting/config.yml | 2 +-
.../test/resources/bootstrap-ssl-ctx/config.yml | 2 +-
.../src/test/resources/config-funnel-and-rpg.yml | 2 +-
.../src/test/resources/config-malformed-field.yml | 2 +-
.../resources/config-missing-required-field.yml | 2 +-
.../src/test/resources/config-multiple-RPGs.yml | 2 +-
.../test/resources/config-multiple-input-ports.yml | 2 +-
.../test/resources/config-multiple-problems.yml | 2 +-
.../test/resources/config-multiple-processors.yml | 2 +-
.../src/test/resources/config-process-groups.yml | 2 +-
.../src/test/resources/config-reporting-task.yml | 2 +-
.../src/test/resources/config-v1.yml | 2 +-
.../minifi-bootstrap/src/test/resources/config.yml | 2 +-
.../resources/stress-test-framework-funnel.yml | 2 +-
.../minifi/c2/api/properties/C2Properties.java | 38 +------
.../src/main/resources/bin/c2.sh | 4 +-
.../src/main/resources/conf/authorizations.yaml | 4 -
.../main/resources/files/raspi3/config.text.yml.v1 | 2 +-
.../src/test/resources/files/config.text.yaml.v1 | 2 +-
.../resources/c2/files/raspi2/config.text.yml.v1 | 2 +-
.../resources/c2/files/raspi3/config.text.yml.v1 | 2 +-
.../resources/c2/files/raspi3/config.text.yml.v2 | 2 +-
minifi/minifi-c2/minifi-c2-jetty/pom.xml | 12 +++
.../apache/nifi/minifi/c2/jetty/JettyServer.java | 110 +++++++++++++++------
.../minifi-c2-provider-util/pom.xml | 4 +
.../minifi/c2/provider/util/HttpConnector.java | 91 +++++++++++++----
.../nifi/minifi/c2/service/ConfigService.java | 62 ++++++------
.../minifi-commons/minifi-commons-schema/pom.xml | 4 +
.../commons/schema/SecurityPropertiesSchema.java | 11 ++-
.../files/edge1/raspi3/config.text.yml.v1 | 2 +-
.../files/edge2/raspi2/config.text.yml.v1 | 2 +-
.../files/edge3/raspi3/config.text.yml.v1 | 2 +-
.../src/test/resources/conf/nifi.properties | 2 +-
.../standalone/v1/CsvToJson/yml/CsvToJson.yml | 2 +-
.../yml/DecompressionCircularFlow.yml | 2 +-
.../yml/MiNiFiTailLogAttribute.yml | 2 +-
...eplaceTextExpressionLanguageCSVReformatting.yml | 2 +-
.../yml/MultipleRelationships.yml | 2 +-
.../v2/ProcessGroups/yml/ProcessGroups.yml | 2 +-
.../yml/StressTestFramework.yml | 2 +-
minifi/pom.xml | 5 +
59 files changed, 338 insertions(+), 196 deletions(-)
diff --git a/minifi/minifi-assembly/pom.xml b/minifi/minifi-assembly/pom.xml
index b7be9e4912..e922d81955 100644
--- a/minifi/minifi-assembly/pom.xml
+++ b/minifi/minifi-assembly/pom.xml
@@ -262,6 +262,21 @@ limitations under the License.
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ <scope>compile</scope>
+ </dependency>
<!-- dependencies for jaxb/activation/annotation for running MiNiFi on
Java 11 -->
<!-- TODO: remove these once minimum Java version is 11 -->
diff --git
a/minifi/minifi-assembly/src/main/assembly/dependencies-windows-service.xml
b/minifi/minifi-assembly/src/main/assembly/dependencies-windows-service.xml
index 754fdb49d4..eaf6f451aa 100644
--- a/minifi/minifi-assembly/src/main/assembly/dependencies-windows-service.xml
+++ b/minifi/minifi-assembly/src/main/assembly/dependencies-windows-service.xml
@@ -36,6 +36,7 @@
<exclude>*:nifi-bootstrap-utils</exclude>
<exclude>*:minifi-bootstrap</exclude>
<exclude>*:minifi-resources</exclude>
+ <exclude>org.eclipse.jetty:*</exclude>
<!-- Filter items introduced via transitive dependencies that
are provided in associated NARs -->
<exclude>*:swagger-annotations</exclude>
@@ -56,6 +57,7 @@
<fileMode>0660</fileMode>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
+ <include>org.eclipse.jetty:*</include>
<include>*:nifi-bootstrap-utils</include>
<include>*:minifi-bootstrap</include>
<include>*:minifi-utils</include>
diff --git a/minifi/minifi-assembly/src/main/assembly/dependencies.xml
b/minifi/minifi-assembly/src/main/assembly/dependencies.xml
index 342b520ab3..c56b2c8e4c 100644
--- a/minifi/minifi-assembly/src/main/assembly/dependencies.xml
+++ b/minifi/minifi-assembly/src/main/assembly/dependencies.xml
@@ -36,6 +36,7 @@
<exclude>*:nifi-bootstrap-utils</exclude>
<exclude>*:minifi-bootstrap</exclude>
<exclude>*:minifi-resources</exclude>
+ <exclude>org.eclipse.jetty:*</exclude>
<!-- Filter items introduced via transitive dependencies that
are provided in associated NARs -->
<exclude>*:swagger-annotations</exclude>
@@ -56,6 +57,7 @@
<fileMode>0660</fileMode>
<useTransitiveFiltering>true</useTransitiveFiltering>
<includes>
+ <include>org.eclipse.jetty:*</include>
<include>*:nifi-bootstrap-utils</include>
<include>*:minifi-bootstrap</include>
<include>*:minifi-utils</include>
diff --git a/minifi/minifi-bootstrap/pom.xml b/minifi/minifi-bootstrap/pom.xml
index 5a1fdfea8b..bf0e24551d 100644
--- a/minifi/minifi-bootstrap/pom.xml
+++ b/minifi/minifi-bootstrap/pom.xml
@@ -40,6 +40,16 @@ limitations under the License.
<artifactId>nifi-api</artifactId>
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-jetty-configuration</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-security-utils-api</artifactId>
+ <scope>compile</scope>
+ </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>c2-client-api</artifactId>
@@ -127,6 +137,10 @@ limitations under the License.
<artifactId>nifi-security-utils</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcprov-jdk18on</artifactId>
+ </dependency>
</dependencies>
diff --git
a/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/configuration/ingestors/RestChangeIngestor.java
b/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/configuration/ingestors/RestChangeIngestor.java
index fe0ccbf548..d9695b81ad 100644
---
a/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/configuration/ingestors/RestChangeIngestor.java
+++
b/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/configuration/ingestors/RestChangeIngestor.java
@@ -20,19 +20,25 @@ package
org.apache.nifi.minifi.bootstrap.configuration.ingestors;
import static
org.apache.nifi.minifi.bootstrap.configuration.ConfigurationChangeCoordinator.NOTIFIER_INGESTORS_KEY;
import static
org.apache.nifi.minifi.bootstrap.configuration.differentiators.WholeConfigDifferentiator.WHOLE_CONFIG_KEY;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
+import java.io.UncheckedIOException;
import java.net.URI;
import java.nio.ByteBuffer;
+import java.security.KeyStore;
+import java.security.Security;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.function.Supplier;
+import javax.net.ssl.SSLContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
+import
org.apache.nifi.jetty.configuration.connector.StandardServerConnectorFactory;
import org.apache.nifi.minifi.bootstrap.ConfigurationFileHolder;
import
org.apache.nifi.minifi.bootstrap.configuration.ConfigurationChangeNotifier;
import org.apache.nifi.minifi.bootstrap.configuration.ListenerHandleResult;
@@ -40,12 +46,15 @@ import
org.apache.nifi.minifi.bootstrap.configuration.differentiators.Differenti
import
org.apache.nifi.minifi.bootstrap.configuration.differentiators.WholeConfigDifferentiator;
import
org.apache.nifi.minifi.bootstrap.configuration.ingestors.interfaces.ChangeIngestor;
import org.apache.nifi.minifi.bootstrap.util.ConfigTransformer;
+import org.apache.nifi.security.ssl.StandardKeyStoreBuilder;
+import org.apache.nifi.security.ssl.StandardSslContextBuilder;
+import org.apache.nifi.security.util.TlsPlatform;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
-import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -60,6 +69,7 @@ public class RestChangeIngestor implements ChangeIngestor {
tempMap.put(WHOLE_CONFIG_KEY,
WholeConfigDifferentiator::getByteBufferDifferentiator);
DIFFERENTIATOR_CONSTRUCTOR_MAP = Collections.unmodifiableMap(tempMap);
+ Security.addProvider(new BouncyCastleProvider());
}
@@ -99,7 +109,7 @@ public class RestChangeIngestor implements ChangeIngestor {
this.configurationFileHolder = configurationFileHolder;
this.properties = properties;
logger.info("Initializing");
- final String differentiatorName =
properties.getProperty(DIFFERENTIATOR_KEY);
+ String differentiatorName = properties.getProperty(DIFFERENTIATOR_KEY);
if (differentiatorName != null && !differentiatorName.isEmpty()) {
Supplier<Differentiator<ByteBuffer>> differentiatorSupplier =
DIFFERENTIATOR_CONSTRUCTOR_MAP.get(differentiatorName);
@@ -132,7 +142,7 @@ public class RestChangeIngestor implements ChangeIngestor {
public void start() {
try {
jetty.start();
- logger.info("RestChangeIngester has started and is listening on
port {}.", new Object[]{getPort()});
+ logger.info("RestChangeIngester has started and is listening on
port {}.", getPort());
} catch (Exception e) {
throw new IllegalStateException(e);
}
@@ -163,7 +173,7 @@ public class RestChangeIngestor implements ChangeIngestor {
}
private void createConnector(Properties properties) {
- final ServerConnector http = new ServerConnector(jetty);
+ ServerConnector http = new ServerConnector(jetty);
http.setPort(Integer.parseInt(properties.getProperty(PORT_KEY, "0")));
http.setHost(properties.getProperty(HOST_KEY, "localhost"));
@@ -172,39 +182,53 @@ public class RestChangeIngestor implements ChangeIngestor
{
http.setIdleTimeout(30000L);
jetty.addConnector(http);
- logger.info("Added an http connector on the host '{}' and port '{}'",
new Object[]{http.getHost(), http.getPort()});
+ logger.info("Added an http connector on the host '{}' and port '{}'",
http.getHost(), http.getPort());
}
private void createSecureConnector(Properties properties) {
- SslContextFactory ssl = new SslContextFactory();
-
- if (properties.getProperty(KEYSTORE_LOCATION_KEY) != null) {
- ssl.setKeyStorePath(properties.getProperty(KEYSTORE_LOCATION_KEY));
-
ssl.setKeyStorePassword(properties.getProperty(KEYSTORE_PASSWORD_KEY));
- ssl.setKeyStoreType(properties.getProperty(KEYSTORE_TYPE_KEY));
+ KeyStore keyStore;
+ KeyStore trustStore = null;
+
+ try (FileInputStream keyStoreStream = new
FileInputStream(properties.getProperty(KEYSTORE_LOCATION_KEY))) {
+ keyStore = new StandardKeyStoreBuilder()
+ .type(properties.getProperty(KEYSTORE_TYPE_KEY))
+ .inputStream(keyStoreStream)
+
.password(properties.getProperty(KEYSTORE_PASSWORD_KEY).toCharArray())
+ .build();
+ } catch (IOException ioe) {
+ throw new UncheckedIOException("Key Store loading failed", ioe);
}
if (properties.getProperty(TRUSTSTORE_LOCATION_KEY) != null) {
-
ssl.setTrustStorePath(properties.getProperty(TRUSTSTORE_LOCATION_KEY));
-
ssl.setTrustStorePassword(properties.getProperty(TRUSTSTORE_PASSWORD_KEY));
- ssl.setTrustStoreType(properties.getProperty(TRUSTSTORE_TYPE_KEY));
-
ssl.setNeedClientAuth(Boolean.parseBoolean(properties.getProperty(NEED_CLIENT_AUTH_KEY,
"true")));
+ try (FileInputStream trustStoreStream = new
FileInputStream(properties.getProperty(TRUSTSTORE_LOCATION_KEY))) {
+ trustStore = new StandardKeyStoreBuilder()
+ .type(properties.getProperty(TRUSTSTORE_TYPE_KEY))
+ .inputStream(trustStoreStream)
+
.password(properties.getProperty(TRUSTSTORE_PASSWORD_KEY).toCharArray())
+ .build();
+ } catch (IOException ioe) {
+ throw new UncheckedIOException("Trust Store loading failed",
ioe);
+ }
}
- // build the connector
- final ServerConnector https = new ServerConnector(jetty, ssl);
+ SSLContext sslContext = new StandardSslContextBuilder()
+ .keyStore(keyStore)
+
.keyPassword(properties.getProperty(KEYSTORE_PASSWORD_KEY).toCharArray())
+ .trustStore(trustStore)
+ .build();
- // set host and port
- https.setPort(Integer.parseInt(properties.getProperty(PORT_KEY, "0")));
- https.setHost(properties.getProperty(HOST_KEY, "localhost"));
+ StandardServerConnectorFactory serverConnectorFactory = new
StandardServerConnectorFactory(jetty,
Integer.parseInt(properties.getProperty(PORT_KEY, "0")));
+
serverConnectorFactory.setNeedClientAuth(Boolean.parseBoolean(properties.getProperty(NEED_CLIENT_AUTH_KEY,
"true")));
+ serverConnectorFactory.setSslContext(sslContext);
+
serverConnectorFactory.setIncludeSecurityProtocols(TlsPlatform.getPreferredProtocols().toArray(new
String[0]));
- // Severely taxed environments may have significant delays when
executing.
- https.setIdleTimeout(30000L);
+ ServerConnector https = serverConnectorFactory.getServerConnector();
+ https.setHost(properties.getProperty(HOST_KEY, "localhost"));
// add the connector
jetty.addConnector(https);
- logger.info("Added an https connector on the host '{}' and port '{}'",
new Object[]{https.getHost(), https.getPort()});
+ logger.info("HTTPS Connector added for Host [{}] and Port [{}]",
https.getHost(), https.getPort());
}
protected void setDifferentiator(Differentiator<ByteBuffer>
differentiator) {
diff --git
a/minifi/minifi-bootstrap/src/test/resources/InvokeHttpMiNiFiProxyNoPasswordTemplateTest.yml
b/minifi/minifi-bootstrap/src/test/resources/InvokeHttpMiNiFiProxyNoPasswordTemplateTest.yml
index 084da2d37d..2c39c9baed 100644
---
a/minifi/minifi-bootstrap/src/test/resources/InvokeHttpMiNiFiProxyNoPasswordTemplateTest.yml
+++
b/minifi/minifi-bootstrap/src/test/resources/InvokeHttpMiNiFiProxyNoPasswordTemplateTest.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 0a73c5e4-7216-4cdf-9008-ace353478d55
diff --git
a/minifi/minifi-bootstrap/src/test/resources/InvokeHttpMiNiFiProxyPasswordTemplateTest.yml
b/minifi/minifi-bootstrap/src/test/resources/InvokeHttpMiNiFiProxyPasswordTemplateTest.yml
index 348219bd84..254616ee50 100644
---
a/minifi/minifi-bootstrap/src/test/resources/InvokeHttpMiNiFiProxyPasswordTemplateTest.yml
+++
b/minifi/minifi-bootstrap/src/test/resources/InvokeHttpMiNiFiProxyPasswordTemplateTest.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 0a73c5e4-7216-4cdf-9008-ace353478d55
diff --git a/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/config.yml
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/config.yml
index 8886205ef7..ec0c8704ae 100644
--- a/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/config.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/config.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 94b8e610-b4ed-3ec9-b26f-c839931bf3e2
diff --git
a/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/configOverrides.yml
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/configOverrides.yml
index 45673b0696..d4c3f0d119 100644
--- a/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/configOverrides.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/configOverrides.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 94b8e610-b4ed-3ec9-b26f-c839931bf3e2
diff --git
a/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/nifi.properties.before
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/nifi.properties.before
index 0c60b4be9f..4f0e0b25e0 100644
---
a/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/nifi.properties.before
+++
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-216/nifi.properties.before
@@ -92,7 +92,7 @@ nifi.web.jetty.threads=200
# security properties #
# This needs to be ignored during unit testing: nifi.sensitive.props.key=
-nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.algorithm=NIFI_PBKDF2_AES_GCM_256
nifi.security.keystore=/tmp/ssl/localhost-ks.jks
nifi.security.keystoreType=JKS
diff --git a/minifi/minifi-bootstrap/src/test/resources/MINIFI-245/config.yml
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-245/config.yml
index f76a561a34..3ad05952ce 100644
--- a/minifi/minifi-bootstrap/src/test/resources/MINIFI-245/config.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/MINIFI-245/config.yml
@@ -54,7 +54,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 94b8e610-b4ed-3ec9-b26f-c839931bf3e2
diff --git
a/minifi/minifi-bootstrap/src/test/resources/MINIFI-245/nifi.properties.before
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-245/nifi.properties.before
index 0c60b4be9f..4f0e0b25e0 100644
---
a/minifi/minifi-bootstrap/src/test/resources/MINIFI-245/nifi.properties.before
+++
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-245/nifi.properties.before
@@ -92,7 +92,7 @@ nifi.web.jetty.threads=200
# security properties #
# This needs to be ignored during unit testing: nifi.sensitive.props.key=
-nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.algorithm=NIFI_PBKDF2_AES_GCM_256
nifi.security.keystore=/tmp/ssl/localhost-ks.jks
nifi.security.keystoreType=JKS
diff --git a/minifi/minifi-bootstrap/src/test/resources/MINIFI-277/config.yml
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-277/config.yml
index def266649d..b61b9507c8 100644
--- a/minifi/minifi-bootstrap/src/test/resources/MINIFI-277/config.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/MINIFI-277/config.yml
@@ -54,7 +54,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 94b8e610-b4ed-3ec9-b26f-c839931bf3e2
diff --git
a/minifi/minifi-bootstrap/src/test/resources/MINIFI-277/nifi.properties
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-277/nifi.properties
index 5b2b1a7be4..6020f316a3 100644
--- a/minifi/minifi-bootstrap/src/test/resources/MINIFI-277/nifi.properties
+++ b/minifi/minifi-bootstrap/src/test/resources/MINIFI-277/nifi.properties
@@ -93,7 +93,7 @@ nifi.web.jetty.threads=200
# security properties #
# This needs to be ignored during unit testing: nifi.sensitive.props.key=
-nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.algorithm=NIFI_PBKDF2_AES_GCM_256
nifi.security.keystore=/tmp/ssl/localhost-ks.jks
nifi.security.keystoreType=JKS
diff --git a/minifi/minifi-bootstrap/src/test/resources/MINIFI-516/config.yml
b/minifi/minifi-bootstrap/src/test/resources/MINIFI-516/config.yml
index 665622f05b..d9b3b3fe60 100644
--- a/minifi/minifi-bootstrap/src/test/resources/MINIFI-516/config.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/MINIFI-516/config.yml
@@ -55,7 +55,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: d636b1bb-fdc7-3e7e-0000-000000000000
diff --git a/minifi/minifi-bootstrap/src/test/resources/NIFI-8753/config.yml
b/minifi/minifi-bootstrap/src/test/resources/NIFI-8753/config.yml
index b9112287d7..be27ed8092 100644
--- a/minifi/minifi-bootstrap/src/test/resources/NIFI-8753/config.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/NIFI-8753/config.yml
@@ -54,7 +54,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 94b8e610-b4ed-3ec9-b26f-c839931bf3e2
diff --git
a/minifi/minifi-bootstrap/src/test/resources/NIFI-8753/nifi.properties.before
b/minifi/minifi-bootstrap/src/test/resources/NIFI-8753/nifi.properties.before
index 0c60b4be9f..4f0e0b25e0 100644
---
a/minifi/minifi-bootstrap/src/test/resources/NIFI-8753/nifi.properties.before
+++
b/minifi/minifi-bootstrap/src/test/resources/NIFI-8753/nifi.properties.before
@@ -92,7 +92,7 @@ nifi.web.jetty.threads=200
# security properties #
# This needs to be ignored during unit testing: nifi.sensitive.props.key=
-nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.algorithm=NIFI_PBKDF2_AES_GCM_256
nifi.security.keystore=/tmp/ssl/localhost-ks.jks
nifi.security.keystoreType=JKS
diff --git
a/minifi/minifi-bootstrap/src/test/resources/SimpleRPGToLogAttributes.yml
b/minifi/minifi-bootstrap/src/test/resources/SimpleRPGToLogAttributes.yml
index 578143ae84..6e0672fb41 100644
--- a/minifi/minifi-bootstrap/src/test/resources/SimpleRPGToLogAttributes.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/SimpleRPGToLogAttributes.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 6b97126a-015a-1000-0000-000000000000
diff --git
a/minifi/minifi-bootstrap/src/test/resources/bootstrap-provenance-reporting/config.yml
b/minifi/minifi-bootstrap/src/test/resources/bootstrap-provenance-reporting/config.yml
index ca062f5279..5f412f396e 100644
---
a/minifi/minifi-bootstrap/src/test/resources/bootstrap-provenance-reporting/config.yml
+++
b/minifi/minifi-bootstrap/src/test/resources/bootstrap-provenance-reporting/config.yml
@@ -54,7 +54,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 94b8e610-b4ed-3ec9-b26f-c839931bf3e2
diff --git
a/minifi/minifi-bootstrap/src/test/resources/bootstrap-ssl-ctx/config.yml
b/minifi/minifi-bootstrap/src/test/resources/bootstrap-ssl-ctx/config.yml
index def266649d..b61b9507c8 100644
--- a/minifi/minifi-bootstrap/src/test/resources/bootstrap-ssl-ctx/config.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/bootstrap-ssl-ctx/config.yml
@@ -54,7 +54,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 94b8e610-b4ed-3ec9-b26f-c839931bf3e2
diff --git
a/minifi/minifi-bootstrap/src/test/resources/config-funnel-and-rpg.yml
b/minifi/minifi-bootstrap/src/test/resources/config-funnel-and-rpg.yml
index fd58662d4b..055f03386c 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config-funnel-and-rpg.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config-funnel-and-rpg.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: f028f52b-e4da-44fe-94b0-93eab6918cde
diff --git
a/minifi/minifi-bootstrap/src/test/resources/config-malformed-field.yml
b/minifi/minifi-bootstrap/src/test/resources/config-malformed-field.yml
index ecce9a8b84..f74f15d509 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config-malformed-field.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config-malformed-field.yml
@@ -56,7 +56,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
diff --git
a/minifi/minifi-bootstrap/src/test/resources/config-missing-required-field.yml
b/minifi/minifi-bootstrap/src/test/resources/config-missing-required-field.yml
index 9339d8cfac..fb7eadbd3a 100644
---
a/minifi/minifi-bootstrap/src/test/resources/config-missing-required-field.yml
+++
b/minifi/minifi-bootstrap/src/test/resources/config-missing-required-field.yml
@@ -55,7 +55,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
diff --git
a/minifi/minifi-bootstrap/src/test/resources/config-multiple-RPGs.yml
b/minifi/minifi-bootstrap/src/test/resources/config-multiple-RPGs.yml
index a79909756a..5548e28d2c 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config-multiple-RPGs.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config-multiple-RPGs.yml
@@ -55,7 +55,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
diff --git
a/minifi/minifi-bootstrap/src/test/resources/config-multiple-input-ports.yml
b/minifi/minifi-bootstrap/src/test/resources/config-multiple-input-ports.yml
index 1581163912..42e05da1cd 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config-multiple-input-ports.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config-multiple-input-ports.yml
@@ -55,7 +55,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
diff --git
a/minifi/minifi-bootstrap/src/test/resources/config-multiple-problems.yml
b/minifi/minifi-bootstrap/src/test/resources/config-multiple-problems.yml
index c30bfb9702..e75d167527 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config-multiple-problems.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config-multiple-problems.yml
@@ -55,7 +55,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
diff --git
a/minifi/minifi-bootstrap/src/test/resources/config-multiple-processors.yml
b/minifi/minifi-bootstrap/src/test/resources/config-multiple-processors.yml
index 5a3cf92347..49917e1307 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config-multiple-processors.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config-multiple-processors.yml
@@ -55,7 +55,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
diff --git
a/minifi/minifi-bootstrap/src/test/resources/config-process-groups.yml
b/minifi/minifi-bootstrap/src/test/resources/config-process-groups.yml
index aa788db3b2..3efeef5e5d 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config-process-groups.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config-process-groups.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 207748d1-0158-1000-0000-000000000000
diff --git
a/minifi/minifi-bootstrap/src/test/resources/config-reporting-task.yml
b/minifi/minifi-bootstrap/src/test/resources/config-reporting-task.yml
index b746316aac..388e50ded1 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config-reporting-task.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config-reporting-task.yml
@@ -57,7 +57,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
diff --git a/minifi/minifi-bootstrap/src/test/resources/config-v1.yml
b/minifi/minifi-bootstrap/src/test/resources/config-v1.yml
index 2af6b9beca..a487afe7f9 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config-v1.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config-v1.yml
@@ -58,7 +58,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
diff --git a/minifi/minifi-bootstrap/src/test/resources/config.yml
b/minifi/minifi-bootstrap/src/test/resources/config.yml
index e18d74a253..1ac02388fc 100644
--- a/minifi/minifi-bootstrap/src/test/resources/config.yml
+++ b/minifi/minifi-bootstrap/src/test/resources/config.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: TLS
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 94b8e610-b4ed-3ec9-b26f-c839931bf3e2
diff --git
a/minifi/minifi-bootstrap/src/test/resources/stress-test-framework-funnel.yml
b/minifi/minifi-bootstrap/src/test/resources/stress-test-framework-funnel.yml
index 95e8f52551..9a715a7e90 100644
---
a/minifi/minifi-bootstrap/src/test/resources/stress-test-framework-funnel.yml
+++
b/minifi/minifi-bootstrap/src/test/resources/stress-test-framework-funnel.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- name: GenerateFlowFile
diff --git
a/minifi/minifi-c2/minifi-c2-api/src/main/java/org/apache/nifi/minifi/c2/api/properties/C2Properties.java
b/minifi/minifi-c2/minifi-c2-api/src/main/java/org/apache/nifi/minifi/c2/api/properties/C2Properties.java
index cf8e462f56..cd9e4c9927 100644
---
a/minifi/minifi-c2/minifi-c2-api/src/main/java/org/apache/nifi/minifi/c2/api/properties/C2Properties.java
+++
b/minifi/minifi-c2/minifi-c2-api/src/main/java/org/apache/nifi/minifi/c2/api/properties/C2Properties.java
@@ -17,17 +17,8 @@
package org.apache.nifi.minifi.c2.api.properties;
-import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.io.IOException;
import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.security.GeneralSecurityException;
-import java.security.KeyStore;
import java.util.Properties;
public class C2Properties extends Properties {
@@ -40,9 +31,7 @@ public class C2Properties extends Properties {
public static final String MINIFI_C2_SERVER_TRUSTSTORE_TYPE =
"minifi.c2.server.truststoreType";
public static final String MINIFI_C2_SERVER_TRUSTSTORE_PASSWD =
"minifi.c2.server.truststorePasswd";
- private static final Logger logger =
LoggerFactory.getLogger(C2Properties.class);
private static final C2Properties properties = initProperties();
- private static final String C2_SERVER_HOME =
System.getenv("C2_SERVER_HOME");
private static C2Properties initProperties() {
C2Properties properties = new C2Properties();
@@ -59,31 +48,6 @@ public class C2Properties extends Properties {
}
public boolean isSecure() {
- return Boolean.valueOf(getProperty(MINIFI_C2_SERVER_SECURE, "false"));
- }
-
- public SslContextFactory getSslContextFactory() throws
GeneralSecurityException, IOException {
- SslContextFactory sslContextFactory = new SslContextFactory.Server();
- KeyStore keyStore =
KeyStore.getInstance(properties.getProperty(MINIFI_C2_SERVER_KEYSTORE_TYPE));
- Path keyStorePath =
Paths.get(C2_SERVER_HOME).resolve(properties.getProperty(MINIFI_C2_SERVER_KEYSTORE)).toAbsolutePath();
- logger.debug("keystore path: " + keyStorePath);
- try (InputStream inputStream = Files.newInputStream(keyStorePath)) {
- keyStore.load(inputStream,
properties.getProperty(MINIFI_C2_SERVER_KEYSTORE_PASSWD).toCharArray());
- }
- sslContextFactory.setKeyStore(keyStore);
-
sslContextFactory.setKeyManagerPassword(properties.getProperty(MINIFI_C2_SERVER_KEY_PASSWD));
- sslContextFactory.setWantClientAuth(true);
-
- String trustStorePath =
Paths.get(C2_SERVER_HOME).resolve(properties.getProperty(MINIFI_C2_SERVER_TRUSTSTORE)).toAbsolutePath().toFile().getAbsolutePath();
- logger.debug("truststore path: " + trustStorePath);
- sslContextFactory.setTrustStorePath(trustStorePath);
-
sslContextFactory.setTrustStoreType(properties.getProperty(MINIFI_C2_SERVER_TRUSTSTORE_TYPE));
-
sslContextFactory.setTrustStorePassword(properties.getProperty(MINIFI_C2_SERVER_TRUSTSTORE_PASSWD));
- try {
- sslContextFactory.start();
- } catch (Exception e) {
- throw new IOException(e);
- }
- return sslContextFactory;
+ return Boolean.parseBoolean(getProperty(MINIFI_C2_SERVER_SECURE,
"false"));
}
}
diff --git a/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/bin/c2.sh
b/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/bin/c2.sh
index c6dc8de0a9..f20f072253 100755
--- a/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/bin/c2.sh
+++ b/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/bin/c2.sh
@@ -114,9 +114,9 @@ run() {
echo
if [ "$1" = "debug" ]; then
- "${JAVA}" -cp "${CLASSPATH}" -Xms12m -Xmx24m
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
-Djava.net.preferIPv4Stack=true org.apache.nifi.minifi.c2.jetty.JettyServer $@
+ "${JAVA}" -cp "${CLASSPATH}" -Xms12m -Xmx128m
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
-Djava.net.preferIPv4Stack=true org.apache.nifi.minifi.c2.jetty.JettyServer $@
else
- "${JAVA}" -cp "${CLASSPATH}" -Xms12m -Xmx24m
-Djava.net.preferIPv4Stack=true org.apache.nifi.minifi.c2.jetty.JettyServer $@
+ "${JAVA}" -cp "${CLASSPATH}" -Xms12m -Xmx128m
-Djava.net.preferIPv4Stack=true org.apache.nifi.minifi.c2.jetty.JettyServer $@
fi
return $?
}
diff --git
a/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/conf/authorizations.yaml
b/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/conf/authorizations.yaml
index 14386e5c17..d341a50a58 100644
---
a/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/conf/authorizations.yaml
+++
b/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/conf/authorizations.yaml
@@ -42,8 +42,6 @@ Paths:
Default Action: deny
Actions:
- Authorization: CLASS_RASPI_3
- Query Parameters:
- class: raspi3
Action: allow
- Authorization: ROLE_SUPERUSER
Action: allow
@@ -56,8 +54,6 @@ Paths:
Default Action: deny
Actions:
- Authorization: CLASS_RASPI_3
- Query Parameters:
- class: raspi3
Action: allow
- Authorization: ROLE_SUPERUSER
Action: allow
diff --git
a/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/files/raspi3/config.text.yml.v1
b/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/files/raspi3/config.text.yml.v1
index 1a7f872dc7..76ce1cd26c 100644
---
a/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/files/raspi3/config.text.yml.v1
+++
b/minifi/minifi-c2/minifi-c2-assembly/src/main/resources/files/raspi3/config.text.yml.v1
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors: []
Process Groups: []
diff --git
a/minifi/minifi-c2/minifi-c2-cache/minifi-c2-cache-filesystem/src/test/resources/files/config.text.yaml.v1
b/minifi/minifi-c2/minifi-c2-cache/minifi-c2-cache-filesystem/src/test/resources/files/config.text.yaml.v1
index 5237bc136b..de7ea51579 100644
---
a/minifi/minifi-c2/minifi-c2-cache/minifi-c2-cache-filesystem/src/test/resources/files/config.text.yaml.v1
+++
b/minifi/minifi-c2/minifi-c2-cache/minifi-c2-cache-filesystem/src/test/resources/files/config.text.yaml.v1
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors: []
Process Groups: []
diff --git
a/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi2/config.text.yml.v1
b/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi2/config.text.yml.v1
index 116426fefb..6c01f107eb 100644
---
a/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi2/config.text.yml.v1
+++
b/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi2/config.text.yml.v1
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors: []
Process Groups: []
diff --git
a/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi3/config.text.yml.v1
b/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi3/config.text.yml.v1
index 690cdaabff..5daf281d6f 100644
---
a/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi3/config.text.yml.v1
+++
b/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi3/config.text.yml.v1
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors: []
Process Groups: []
diff --git
a/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi3/config.text.yml.v2
b/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi3/config.text.yml.v2
index 14750b698a..83230e1a19 100644
---
a/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi3/config.text.yml.v2
+++
b/minifi/minifi-c2/minifi-c2-integration-tests/src/test/resources/c2/files/raspi3/config.text.yml.v2
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors: []
Process Groups: []
diff --git a/minifi/minifi-c2/minifi-c2-jetty/pom.xml
b/minifi/minifi-c2/minifi-c2-jetty/pom.xml
index b9ad7c4c68..25b5477ea2 100644
--- a/minifi/minifi-c2/minifi-c2-jetty/pom.xml
+++ b/minifi/minifi-c2/minifi-c2-jetty/pom.xml
@@ -55,5 +55,17 @@ limitations under the License.
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-jetty-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-security-ssl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcprov-jdk18on</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git
a/minifi/minifi-c2/minifi-c2-jetty/src/main/java/org/apache/nifi/minifi/c2/jetty/JettyServer.java
b/minifi/minifi-c2/minifi-c2-jetty/src/main/java/org/apache/nifi/minifi/c2/jetty/JettyServer.java
index 77b67509a2..c960f6abbc 100644
---
a/minifi/minifi-c2/minifi-c2-jetty/src/main/java/org/apache/nifi/minifi/c2/jetty/JettyServer.java
+++
b/minifi/minifi-c2/minifi-c2-jetty/src/main/java/org/apache/nifi/minifi/c2/jetty/JettyServer.java
@@ -17,59 +17,70 @@
package org.apache.nifi.minifi.c2.jetty;
-import org.apache.nifi.minifi.c2.api.properties.C2Properties;
-import org.eclipse.jetty.server.Handler;
-import org.eclipse.jetty.server.HttpConfiguration;
-import org.eclipse.jetty.server.HttpConnectionFactory;
-import org.eclipse.jetty.server.SecureRequestCustomizer;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.SslConnectionFactory;
-import org.eclipse.jetty.server.handler.HandlerCollection;
-import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.eclipse.jetty.webapp.WebAppClassLoader;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_KEYSTORE;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_KEYSTORE_PASSWD;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_KEYSTORE_TYPE;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_KEY_PASSWD;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_TRUSTSTORE;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_TRUSTSTORE_PASSWD;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_TRUSTSTORE_TYPE;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.security.KeyStore;
+import java.security.Security;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import javax.net.ssl.SSLContext;
+import
org.apache.nifi.jetty.configuration.connector.StandardServerConnectorFactory;
+import org.apache.nifi.minifi.c2.api.properties.C2Properties;
+import org.apache.nifi.security.ssl.StandardKeyStoreBuilder;
+import org.apache.nifi.security.ssl.StandardSslContextBuilder;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.handler.HandlerCollection;
+import org.eclipse.jetty.webapp.WebAppClassLoader;
+import org.eclipse.jetty.webapp.WebAppContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class JettyServer {
private static final Logger logger =
LoggerFactory.getLogger(JettyServer.class);
- private static String C2_SERVER_HOME = System.getenv("C2_SERVER_HOME");
+ private static final String C2_SERVER_HOME =
System.getenv("C2_SERVER_HOME");
private static final String WEB_DEFAULTS_XML = "webdefault.xml";
+ static {
+ Security.addProvider(new BouncyCastleProvider());
+ }
+
public static void main(String[] args) throws Exception {
C2Properties properties = C2Properties.getInstance();
final HandlerCollection handlers = new HandlerCollection();
- for (Path path : Files.list(Paths.get(C2_SERVER_HOME,
"webapps")).collect(Collectors.toList())) {
- handlers.addHandler(loadWar(path.toFile(), "/c2",
JettyServer.class.getClassLoader()));
+ try (Stream<Path> files = Files.list(Paths.get(C2_SERVER_HOME,
"webapps"))) {
+ files.forEach(path -> handlers.addHandler(loadWar(path.toFile(),
"/c2", JettyServer.class.getClassLoader())));
}
Server server;
int port =
Integer.parseInt(properties.getProperty("minifi.c2.server.port", "10090"));
if (properties.isSecure()) {
- SslContextFactory sslContextFactory =
properties.getSslContextFactory();
- HttpConfiguration config = new HttpConfiguration();
- config.setSecureScheme("https");
- config.setSecurePort(port);
- config.addCustomizer(new SecureRequestCustomizer());
-
server = new Server();
+ StandardServerConnectorFactory serverConnectorFactory = new
StandardServerConnectorFactory(server, port);
+ serverConnectorFactory.setSslContext(buildSSLContext(properties));
+ serverConnectorFactory.setWantClientAuth(true);
- ServerConnector serverConnector = new ServerConnector(server, new
SslConnectionFactory(sslContextFactory, "http/1.1"), new
HttpConnectionFactory(config));
- serverConnector.setPort(port);
-
- server.addConnector(serverConnector);
+ ServerConnector https =
serverConnectorFactory.getServerConnector();
+ https.setPort(port);
+ server.addConnector(https);
} else {
server = new Server(port);
}
@@ -100,7 +111,42 @@ public class JettyServer {
server.join();
}
- private static WebAppContext loadWar(final File warFile, final String
contextPath, final ClassLoader parentClassLoader) throws IOException {
+ private static SSLContext buildSSLContext(C2Properties properties) {
+ KeyStore keyStore;
+ KeyStore truststore;
+
+ File keyStoreFile =
Paths.get(C2_SERVER_HOME).resolve(properties.getProperty(MINIFI_C2_SERVER_KEYSTORE)).toFile();
+ logger.debug("Loading Key Store [{}]", keyStoreFile.getPath());
+ try (FileInputStream keyStoreStream = new
FileInputStream(keyStoreFile)) {
+ keyStore = new StandardKeyStoreBuilder()
+ .type(properties.getProperty(MINIFI_C2_SERVER_KEYSTORE_TYPE))
+ .inputStream(keyStoreStream)
+
.password(properties.getProperty(MINIFI_C2_SERVER_KEYSTORE_PASSWD).toCharArray())
+ .build();
+ } catch (IOException ioe) {
+ throw new UncheckedIOException("Key Store loading failed", ioe);
+ }
+
+ File trustStoreFile =
Paths.get(C2_SERVER_HOME).resolve(properties.getProperty(MINIFI_C2_SERVER_TRUSTSTORE)).toFile();
+ logger.debug("Loading Trust Store [{}]", trustStoreFile.getPath());
+ try (FileInputStream trustStoreStream = new
FileInputStream(trustStoreFile)) {
+ truststore = new StandardKeyStoreBuilder()
+ .type(properties.getProperty(MINIFI_C2_SERVER_TRUSTSTORE_TYPE))
+ .inputStream(trustStoreStream)
+
.password(properties.getProperty(MINIFI_C2_SERVER_TRUSTSTORE_PASSWD).toCharArray())
+ .build();
+ } catch (IOException ioe) {
+ throw new UncheckedIOException("Trust Store loading failed", ioe);
+ }
+
+ return new StandardSslContextBuilder()
+ .keyStore(keyStore)
+
.keyPassword(properties.getProperty(MINIFI_C2_SERVER_KEY_PASSWD).toCharArray())
+ .trustStore(truststore)
+ .build();
+ }
+
+ private static WebAppContext loadWar(final File warFile, final String
contextPath, final ClassLoader parentClassLoader) {
final WebAppContext webappContext = new
WebAppContext(warFile.getPath(), contextPath);
webappContext.setContextPath(contextPath);
webappContext.setDisplayName(contextPath);
@@ -134,7 +180,11 @@ public class JettyServer {
// configure the max form size (3x the default)
webappContext.setMaxFormContentSize(600000);
- webappContext.setClassLoader(new WebAppClassLoader(parentClassLoader,
webappContext));
+ try {
+ webappContext.setClassLoader(new
WebAppClassLoader(parentClassLoader, webappContext));
+ } catch (IOException e) {
+ throw new UncheckedIOException("ClassLoader initialization
failed", e);
+ }
logger.info("Loading WAR: " + warFile.getAbsolutePath() + " with
context path set to " + contextPath);
return webappContext;
diff --git
a/minifi/minifi-c2/minifi-c2-provider/minifi-c2-provider-util/pom.xml
b/minifi/minifi-c2/minifi-c2-provider/minifi-c2-provider-util/pom.xml
index 98d281d7cb..fe08bec0dd 100644
--- a/minifi/minifi-c2/minifi-c2-provider/minifi-c2-provider-util/pom.xml
+++ b/minifi/minifi-c2/minifi-c2-provider/minifi-c2-provider-util/pom.xml
@@ -35,5 +35,9 @@ limitations under the License.
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-security-ssl</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git
a/minifi/minifi-c2/minifi-c2-provider/minifi-c2-provider-util/src/main/java/org/apache/nifi/minifi/c2/provider/util/HttpConnector.java
b/minifi/minifi-c2/minifi-c2-provider/minifi-c2-provider-util/src/main/java/org/apache/nifi/minifi/c2/provider/util/HttpConnector.java
index 1c8e0c75da..49fe6a70a9 100644
---
a/minifi/minifi-c2/minifi-c2-provider/minifi-c2-provider-util/src/main/java/org/apache/nifi/minifi/c2/provider/util/HttpConnector.java
+++
b/minifi/minifi-c2/minifi-c2-provider/minifi-c2-provider-util/src/main/java/org/apache/nifi/minifi/c2/provider/util/HttpConnector.java
@@ -17,35 +17,51 @@
package org.apache.nifi.minifi.c2.provider.util;
-import org.apache.nifi.minifi.c2.api.ConfigurationProviderException;
-import org.apache.nifi.minifi.c2.api.InvalidParameterException;
-import org.apache.nifi.minifi.c2.api.properties.C2Properties;
-import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_KEYSTORE;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_KEYSTORE_PASSWD;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_KEYSTORE_TYPE;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_KEY_PASSWD;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_TRUSTSTORE;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_TRUSTSTORE_PASSWD;
+import static
org.apache.nifi.minifi.c2.api.properties.C2Properties.MINIFI_C2_SERVER_TRUSTSTORE_TYPE;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
+import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.UncheckedIOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.security.GeneralSecurityException;
+import java.security.KeyStore;
import java.util.Base64;
import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import org.apache.nifi.minifi.c2.api.ConfigurationProviderException;
+import org.apache.nifi.minifi.c2.api.InvalidParameterException;
+import org.apache.nifi.minifi.c2.api.properties.C2Properties;
+import org.apache.nifi.security.ssl.StandardKeyStoreBuilder;
+import org.apache.nifi.security.ssl.StandardSslContextBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class HttpConnector {
+
private static final Logger logger =
LoggerFactory.getLogger(HttpConnector.class);
+ private static final String HTTPS = "https:";
+ private static final String C2_SERVER_HOME =
System.getenv("C2_SERVER_HOME");
private final String baseUrl;
- private final SslContextFactory sslContextFactory;
+ private final SSLContext sslContext;
private final Proxy proxy;
private final String proxyAuthorization;
@@ -57,14 +73,11 @@ public class HttpConnector {
this(baseUrl, proxyHost, proxyPort, null, null);
}
- public HttpConnector(String baseUrl, String proxyHost, int proxyPort,
String proxyUsername, String proxyPassword) throws InvalidParameterException,
GeneralSecurityException, IOException {
- if (baseUrl.startsWith("https:")) {
- sslContextFactory =
C2Properties.getInstance().getSslContextFactory();
- if (sslContextFactory == null) {
- throw new InvalidParameterException("Need sslContextFactory to
connect to https endpoint (" + baseUrl + ")");
- }
+ public HttpConnector(String baseUrl, String proxyHost, int proxyPort,
String proxyUsername, String proxyPassword) throws InvalidParameterException {
+ if (baseUrl.startsWith(HTTPS)) {
+ sslContext = buildSSLContext();
} else {
- sslContextFactory = null;
+ sslContext = null;
}
this.baseUrl = baseUrl;
if (proxyHost != null && !proxyHost.isEmpty()) {
@@ -89,6 +102,43 @@ public class HttpConnector {
}
}
+ private SSLContext buildSSLContext() {
+ C2Properties properties = C2Properties.getInstance();
+ KeyStore keyStore;
+ KeyStore truststore;
+
+ Path c2ServerHome = Paths.get(C2_SERVER_HOME);
+ File keyStoreFile =
c2ServerHome.resolve(properties.getProperty(MINIFI_C2_SERVER_KEYSTORE)).toFile();
+ logger.debug("Loading Key Store [{}]", keyStoreFile.getPath());
+ try (FileInputStream keyStoreStream = new
FileInputStream(keyStoreFile)) {
+ keyStore = new StandardKeyStoreBuilder()
+ .type(properties.getProperty(MINIFI_C2_SERVER_KEYSTORE_TYPE))
+ .inputStream(keyStoreStream)
+
.password(properties.getProperty(MINIFI_C2_SERVER_KEYSTORE_PASSWD).toCharArray())
+ .build();
+ } catch (IOException ioe) {
+ throw new UncheckedIOException("Key Store loading failed", ioe);
+ }
+
+ File trustStoreFile =
c2ServerHome.resolve(properties.getProperty(MINIFI_C2_SERVER_TRUSTSTORE)).toFile();
+ logger.debug("Loading Trust Store [{}]", trustStoreFile.getPath());
+ try (FileInputStream trustStoreStream = new
FileInputStream(trustStoreFile)) {
+ truststore = new StandardKeyStoreBuilder()
+ .type(properties.getProperty(MINIFI_C2_SERVER_TRUSTSTORE_TYPE))
+ .inputStream(trustStoreStream)
+
.password(properties.getProperty(MINIFI_C2_SERVER_TRUSTSTORE_PASSWD).toCharArray())
+ .build();
+ } catch (IOException ioe) {
+ throw new UncheckedIOException("Trust Store loading failed", ioe);
+ }
+
+ return new StandardSslContextBuilder()
+ .keyStore(keyStore)
+
.keyPassword(properties.getProperty(MINIFI_C2_SERVER_KEY_PASSWD).toCharArray())
+ .trustStore(truststore)
+ .build();
+ }
+
public HttpURLConnection get(String endpointPath) throws
ConfigurationProviderException {
return get(endpointPath, Collections.emptyMap());
}
@@ -112,9 +162,8 @@ public class HttpConnector {
} else {
httpURLConnection = (HttpURLConnection)
url.openConnection(proxy);
}
- if (sslContextFactory != null) {
+ if (sslContext != null) {
HttpsURLConnection httpsURLConnection = (HttpsURLConnection)
httpURLConnection;
- SSLContext sslContext = sslContextFactory.getSslContext();
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
httpsURLConnection.setSSLSocketFactory(socketFactory);
}
@@ -124,7 +173,7 @@ public class HttpConnector {
if (proxyAuthorization != null) {
httpURLConnection.setRequestProperty("Proxy-Authorization",
proxyAuthorization);
}
- headers.forEach((s, strings) ->
httpURLConnection.setRequestProperty(s,
strings.stream().collect(Collectors.joining(","))));
+ headers.forEach((s, strings) ->
httpURLConnection.setRequestProperty(s, String.join(",", strings)));
return httpURLConnection;
}
}
diff --git
a/minifi/minifi-c2/minifi-c2-service/src/main/java/org/apache/nifi/minifi/c2/service/ConfigService.java
b/minifi/minifi-c2/minifi-c2-service/src/main/java/org/apache/nifi/minifi/c2/service/ConfigService.java
index 59d048320d..8349a9834f 100644
---
a/minifi/minifi-c2/minifi-c2-service/src/main/java/org/apache/nifi/minifi/c2/service/ConfigService.java
+++
b/minifi/minifi-c2/minifi-c2-service/src/main/java/org/apache/nifi/minifi/c2/service/ConfigService.java
@@ -17,6 +17,9 @@
package org.apache.nifi.minifi.c2.service;
+import static javax.ws.rs.core.HttpHeaders.CONTENT_LENGTH;
+import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
+
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Suppliers;
import com.google.common.cache.CacheBuilder;
@@ -28,33 +31,6 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
-import org.apache.nifi.c2.protocol.api.C2Heartbeat;
-import org.apache.nifi.c2.protocol.api.C2HeartbeatResponse;
-import org.apache.nifi.c2.protocol.api.C2OperationAck;
-import org.apache.nifi.minifi.c2.api.ConfigurationProvider;
-import org.apache.nifi.minifi.c2.api.ConfigurationProviderException;
-import org.apache.nifi.minifi.c2.api.InvalidParameterException;
-import
org.apache.nifi.minifi.c2.api.security.authorization.AuthorizationException;
-import org.apache.nifi.minifi.c2.api.security.authorization.Authorizer;
-import org.apache.nifi.minifi.c2.api.util.Pair;
-import org.apache.nifi.minifi.c2.util.HttpRequestUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -72,9 +48,32 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.stream.Collectors;
-
-import static javax.ws.rs.core.HttpHeaders.CONTENT_LENGTH;
-import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import org.apache.nifi.c2.protocol.api.C2Heartbeat;
+import org.apache.nifi.c2.protocol.api.C2HeartbeatResponse;
+import org.apache.nifi.c2.protocol.api.C2OperationAck;
+import org.apache.nifi.minifi.c2.api.ConfigurationProvider;
+import org.apache.nifi.minifi.c2.api.ConfigurationProviderException;
+import org.apache.nifi.minifi.c2.api.InvalidParameterException;
+import
org.apache.nifi.minifi.c2.api.security.authorization.AuthorizationException;
+import org.apache.nifi.minifi.c2.api.security.authorization.Authorizer;
+import org.apache.nifi.minifi.c2.api.util.Pair;
+import org.apache.nifi.minifi.c2.util.HttpRequestUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.context.SecurityContextHolder;
@Configuration
@Path("/config")
@@ -361,14 +360,11 @@ public class ConfigService {
int read;
try (InputStream inputStream = configuration.getInputStream();
ByteArrayOutputStream outputStream = new
ByteArrayOutputStream()) {
- MessageDigest md5 = MessageDigest.getInstance("MD5");
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
while ((read = inputStream.read(buffer)) >= 0) {
outputStream.write(buffer, 0, read);
- md5.update(buffer, 0, read);
sha256.update(buffer, 0, read);
}
- ok = ok.header("Content-MD5", bytesToHex(md5.digest()));
ok = ok.header("X-Content-SHA-256",
bytesToHex(sha256.digest()));
ok = ok.entity(outputStream.toByteArray());
} catch (ConfigurationProviderException | IOException |
NoSuchAlgorithmException e) {
diff --git a/minifi/minifi-commons/minifi-commons-schema/pom.xml
b/minifi/minifi-commons/minifi-commons-schema/pom.xml
index 5a8df2d64a..7dce9c63cd 100644
--- a/minifi/minifi-commons/minifi-commons-schema/pom.xml
+++ b/minifi/minifi-commons/minifi-commons-schema/pom.xml
@@ -33,5 +33,9 @@
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-security-utils-api</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git
a/minifi/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/SecurityPropertiesSchema.java
b/minifi/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/SecurityPropertiesSchema.java
index 8ad68bbb75..a8115213a4 100644
---
a/minifi/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/SecurityPropertiesSchema.java
+++
b/minifi/minifi-commons/minifi-commons-schema/src/main/java/org/apache/nifi/minifi/commons/schema/SecurityPropertiesSchema.java
@@ -17,11 +17,14 @@
package org.apache.nifi.minifi.commons.schema;
+import java.util.Arrays;
+import java.util.stream.Collectors;
import org.apache.nifi.minifi.commons.schema.common.BaseSchema;
import org.apache.nifi.minifi.commons.schema.common.StringUtil;
import org.apache.nifi.minifi.commons.schema.common.WritableSchema;
import java.util.Map;
+import org.apache.nifi.security.util.KeystoreType;
import static
org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.SECURITY_PROPS_KEY;
import static
org.apache.nifi.minifi.commons.schema.common.CommonPropertyKeys.SENSITIVE_PROPS_KEY;
@@ -60,7 +63,8 @@ public class SecurityPropertiesSchema extends BaseSchema
implements WritableSche
keystoreType = getOptionalKeyAsType(map, KEYSTORE_TYPE_KEY,
String.class, SECURITY_PROPS_KEY, "");
if (!StringUtil.isNullOrEmpty(keystoreType)) {
if (validateStoreType(keystoreType)) {
- addValidationIssue(KEYSTORE_TYPE_KEY, SECURITY_PROPS_KEY, "it
is not a supported type (must be either PKCS12 or JKS format)");
+ addValidationIssue(KEYSTORE_TYPE_KEY, SECURITY_PROPS_KEY, "it
is not a supported type (must be either " +
+
Arrays.stream(KeystoreType.values()).map(KeystoreType::getType).collect(Collectors.joining(",
")) + " format)");
}
}
@@ -73,7 +77,8 @@ public class SecurityPropertiesSchema extends BaseSchema
implements WritableSche
truststoreType = getOptionalKeyAsType(map, TRUSTSTORE_TYPE_KEY,
String.class, SECURITY_PROPS_KEY, "");
if (!StringUtil.isNullOrEmpty(truststoreType)) {
if (validateStoreType(truststoreType)) {
- addValidationIssue(TRUSTSTORE_TYPE_KEY, SECURITY_PROPS_KEY,
"it is not a supported type (must be either PKCS12 or JKS format)");
+ addValidationIssue(TRUSTSTORE_TYPE_KEY, SECURITY_PROPS_KEY,
"it is not a supported type (must be either " +
+
Arrays.stream(KeystoreType.values()).map(KeystoreType::getType).collect(Collectors.joining(",
")) + " format)");
}
}
@@ -134,7 +139,7 @@ public class SecurityPropertiesSchema extends BaseSchema
implements WritableSche
}
private boolean validateStoreType(String store) {
- return !store.isEmpty() && !(store.equalsIgnoreCase("JKS") ||
store.equalsIgnoreCase("PKCS12"));
+ return !store.isEmpty() && !KeystoreType.isValidKeystoreType(store);
}
public boolean useSSL() {
diff --git
a/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge1/raspi3/config.text.yml.v1
b/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge1/raspi3/config.text.yml.v1
index d778600f24..459b7e8864 100644
---
a/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge1/raspi3/config.text.yml.v1
+++
b/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge1/raspi3/config.text.yml.v1
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors: []
Process Groups: []
diff --git
a/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge2/raspi2/config.text.yml.v1
b/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge2/raspi2/config.text.yml.v1
index d762ad6913..772f37994e 100644
---
a/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge2/raspi2/config.text.yml.v1
+++
b/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge2/raspi2/config.text.yml.v1
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors: []
Process Groups: []
diff --git
a/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge3/raspi3/config.text.yml.v1
b/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge3/raspi3/config.text.yml.v1
index da30790409..9a9ea12388 100644
---
a/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge3/raspi3/config.text.yml.v1
+++
b/minifi/minifi-integration-tests/src/test/resources/c2/hierarchical/c2-authoritative/files/edge3/raspi3/config.text.yml.v1
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key: ''
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors: []
Process Groups: []
diff --git
a/minifi/minifi-integration-tests/src/test/resources/conf/nifi.properties
b/minifi/minifi-integration-tests/src/test/resources/conf/nifi.properties
index e23c5b0d09..b2530ed55e 100644
--- a/minifi/minifi-integration-tests/src/test/resources/conf/nifi.properties
+++ b/minifi/minifi-integration-tests/src/test/resources/conf/nifi.properties
@@ -71,7 +71,7 @@ nifi.web.jetty.working.directory=./target/work/jetty
# security properties #
nifi.sensitive.props.key=key
-nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.algorithm=NIFI_PBKDF2_AES_GCM_256
nifi.security.keystore=
nifi.security.keystoreType=
diff --git
a/minifi/minifi-integration-tests/src/test/resources/standalone/v1/CsvToJson/yml/CsvToJson.yml
b/minifi/minifi-integration-tests/src/test/resources/standalone/v1/CsvToJson/yml/CsvToJson.yml
index 1237ac8c4b..73867a4fc2 100644
---
a/minifi/minifi-integration-tests/src/test/resources/standalone/v1/CsvToJson/yml/CsvToJson.yml
+++
b/minifi/minifi-integration-tests/src/test/resources/standalone/v1/CsvToJson/yml/CsvToJson.yml
@@ -52,7 +52,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- name: ExtractText
diff --git
a/minifi/minifi-integration-tests/src/test/resources/standalone/v1/DecompressionCircularFlow/yml/DecompressionCircularFlow.yml
b/minifi/minifi-integration-tests/src/test/resources/standalone/v1/DecompressionCircularFlow/yml/DecompressionCircularFlow.yml
index 743fdf670a..dedbce90b8 100644
---
a/minifi/minifi-integration-tests/src/test/resources/standalone/v1/DecompressionCircularFlow/yml/DecompressionCircularFlow.yml
+++
b/minifi/minifi-integration-tests/src/test/resources/standalone/v1/DecompressionCircularFlow/yml/DecompressionCircularFlow.yml
@@ -52,7 +52,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- name: Compressed?
diff --git
a/minifi/minifi-integration-tests/src/test/resources/standalone/v1/MiNiFiTailLogAttribute/yml/MiNiFiTailLogAttribute.yml
b/minifi/minifi-integration-tests/src/test/resources/standalone/v1/MiNiFiTailLogAttribute/yml/MiNiFiTailLogAttribute.yml
index 88f5c6d391..1adb3e1d6a 100644
---
a/minifi/minifi-integration-tests/src/test/resources/standalone/v1/MiNiFiTailLogAttribute/yml/MiNiFiTailLogAttribute.yml
+++
b/minifi/minifi-integration-tests/src/test/resources/standalone/v1/MiNiFiTailLogAttribute/yml/MiNiFiTailLogAttribute.yml
@@ -52,7 +52,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- name: LogAttribute
diff --git
a/minifi/minifi-integration-tests/src/test/resources/standalone/v1/ReplaceTextExpressionLanguageCSVReformatting/yml/ReplaceTextExpressionLanguageCSVReformatting.yml
b/minifi/minifi-integration-tests/src/test/resources/standalone/v1/ReplaceTextExpressionLanguageCSVReformatting/yml/ReplaceTextExpressionLanguageCSVReformatting.yml
index 8c280c8bb3..e06b8f387f 100644
---
a/minifi/minifi-integration-tests/src/test/resources/standalone/v1/ReplaceTextExpressionLanguageCSVReformatting/yml/ReplaceTextExpressionLanguageCSVReformatting.yml
+++
b/minifi/minifi-integration-tests/src/test/resources/standalone/v1/ReplaceTextExpressionLanguageCSVReformatting/yml/ReplaceTextExpressionLanguageCSVReformatting.yml
@@ -52,7 +52,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- name: Generate Empty File
diff --git
a/minifi/minifi-integration-tests/src/test/resources/standalone/v2/MultipleRelationships/yml/MultipleRelationships.yml
b/minifi/minifi-integration-tests/src/test/resources/standalone/v2/MultipleRelationships/yml/MultipleRelationships.yml
index 71dce07452..ab3f54f5cc 100644
---
a/minifi/minifi-integration-tests/src/test/resources/standalone/v2/MultipleRelationships/yml/MultipleRelationships.yml
+++
b/minifi/minifi-integration-tests/src/test/resources/standalone/v2/MultipleRelationships/yml/MultipleRelationships.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 7c755ed6-0157-1000-0000-000000000000
diff --git
a/minifi/minifi-integration-tests/src/test/resources/standalone/v2/ProcessGroups/yml/ProcessGroups.yml
b/minifi/minifi-integration-tests/src/test/resources/standalone/v2/ProcessGroups/yml/ProcessGroups.yml
index fc837b63e1..8a03330761 100644
---
a/minifi/minifi-integration-tests/src/test/resources/standalone/v2/ProcessGroups/yml/ProcessGroups.yml
+++
b/minifi/minifi-integration-tests/src/test/resources/standalone/v2/ProcessGroups/yml/ProcessGroups.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: e25cd92a-0157-1000-0000-000000000000
diff --git
a/minifi/minifi-integration-tests/src/test/resources/standalone/v2/StressTestFramework/yml/StressTestFramework.yml
b/minifi/minifi-integration-tests/src/test/resources/standalone/v2/StressTestFramework/yml/StressTestFramework.yml
index 46cd84d02b..220f9da14d 100644
---
a/minifi/minifi-integration-tests/src/test/resources/standalone/v2/StressTestFramework/yml/StressTestFramework.yml
+++
b/minifi/minifi-integration-tests/src/test/resources/standalone/v2/StressTestFramework/yml/StressTestFramework.yml
@@ -53,7 +53,7 @@ Security Properties:
ssl protocol: ''
Sensitive Props:
key:
- algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
+ algorithm: NIFI_PBKDF2_AES_GCM_256
provider: BC
Processors:
- id: 16a47794-5391-4ad2-0000-000000000000
diff --git a/minifi/pom.xml b/minifi/pom.xml
index f7b542fb5a..e79a0d81d1 100644
--- a/minifi/pom.xml
+++ b/minifi/pom.xml
@@ -279,6 +279,11 @@ limitations under the License.
<artifactId>nifi-toolkit-tls</artifactId>
<version>1.21.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-jetty-configuration</artifactId>
+ <version>1.21.0-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-resources</artifactId>