Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
### Added

- hadoop: Add precompiled hadoop for later reuse in dependent images ([#1466]).
- nifi: Add version `2.9.0` ([#1463]).

### Changed

Expand All @@ -21,6 +22,7 @@ All notable changes to this project will be documented in this file.
[#1452]: https://github.com/stackabletech/docker-images/pull/1452
[#1453]: https://github.com/stackabletech/docker-images/pull/1453
[#1454]: https://github.com/stackabletech/docker-images/pull/1454
[#1463]: https://github.com/stackabletech/docker-images/pull/1463
[#1466]: https://github.com/stackabletech/docker-images/pull/1466

## [26.3.0] - 2026-03-16
Expand Down
2 changes: 1 addition & 1 deletion java-devel/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ ARG STACKABLE_USER_UID

# Find the latest version here: https://github.com/apache/maven/releases
# renovate: datasource=github-tags packageName=apache/maven
ARG MAVEN_VERSION="3.9.11"
ARG MAVEN_VERSION="3.9.14"

# See: https://adoptium.net/en-gb/installation/linux/#_centosrhelfedora_instructions
RUN cat <<EOF > /etc/yum.repos.d/adoptium.repo
Expand Down
17 changes: 14 additions & 3 deletions nifi/boil-config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ java-devel = "11"
git-sync-version = "v4.4.1"
# Check for new versions at the upstream: https://github.com/stackabletech/nifi-opa-plugin/tags
# Checkout a Patchable version (patch-series) for the new tag
nifi-opa-authorizer-plugin-version = "0.4.0"
nifi-opa-authorizer-plugin-version = "0.5.0"

[versions."2.6.0".local-images]
java-base = "21"
Expand All @@ -18,7 +18,7 @@ java-devel = "21"
git-sync-version = "v4.4.1"
# Check for new versions at the upstream: https://github.com/stackabletech/nifi-opa-plugin/tags
# Checkout a Patchable version (patch-series) for the new tag
nifi-opa-authorizer-plugin-version = "0.4.0"
nifi-opa-authorizer-plugin-version = "0.5.0"

# Release a new version here: https://github.com/stackabletech/nifi-iceberg-bundle
# Checkout a Patchable version (patch-series) for the new tag
Expand All @@ -33,4 +33,15 @@ java-devel = "21"
git-sync-version = "v4.4.1"
# Check for new versions at the upstream: https://github.com/stackabletech/nifi-opa-plugin/tags
# Checkout a Patchable version (patch-series) for the new tag
nifi-opa-authorizer-plugin-version = "0.4.0"
nifi-opa-authorizer-plugin-version = "0.5.0"

[versions."2.9.0".local-images]
java-base = "21" # As stated in GitHub README
java-devel = "21"
"shared/logback" = "1.5.32" # https://github.com/apache/nifi/blob/rel/nifi-2.9.0/pom.xml#L171

[versions."2.9.0".build-arguments]
git-sync-version = "v4.4.1"
# Check for new versions at the upstream: https://github.com/stackabletech/nifi-opa-plugin/tags
# Checkout a Patchable version (patch-series) for the new tag
nifi-opa-authorizer-plugin-version = "0.5.0"
2 changes: 2 additions & 0 deletions nifi/opa-plugin/stackable/patches/0.5.0/patchable.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
mirror = "https://github.com/stackabletech/nifi-opa-plugin.git"
base = "e544db52f445c449f97d809441079b04b5cb1a0b"
21 changes: 21 additions & 0 deletions nifi/stackable/patches/2.9.0/0001-no-zip-assembly.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
From d4f0275b86729bd28d83f8d4b28166c827a3385a Mon Sep 17 00:00:00 2001
From: Nick Larsen <nick.larsen@stackable.tech>
Date: Mon, 17 Feb 2025 17:26:20 +0100
Subject: no zip assembly

---
nifi-assembly/pom.xml | 1 -
1 file changed, 1 deletion(-)

diff --git a/nifi-assembly/pom.xml b/nifi-assembly/pom.xml
index 60250bd60e..d49fe6d0d9 100644
--- a/nifi-assembly/pom.xml
+++ b/nifi-assembly/pom.xml
@@ -66,7 +66,6 @@ language governing permissions and limitations under the License. -->
<tarLongFileMode>posix</tarLongFileMode>
<formats>
<format>dir</format>
- <format>zip</format>
</formats>
</configuration>
</execution>
38 changes: 38 additions & 0 deletions nifi/stackable/patches/2.9.0/0002-add-cyclonedx-plugin.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
From a5e683212fa31aca9386654878e810a506154e16 Mon Sep 17 00:00:00 2001
From: Nick Larsen <nick.larsen@stackable.tech>
Date: Mon, 17 Feb 2025 17:31:17 +0100
Subject: add cyclonedx plugin

---
pom.xml | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)

diff --git a/pom.xml b/pom.xml
index 3a865337ec..8ca44ad5ac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1075,6 +1075,24 @@
</rulesets>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.cyclonedx</groupId>
+ <artifactId>cyclonedx-maven-plugin</artifactId>
+ <version>2.8.0</version>
+ <configuration>
+ <projectType>application</projectType>
+ <schemaVersion>1.5</schemaVersion>
+ <skipNotDeployed>false</skipNotDeployed>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>makeBom</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
<profiles>
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
From 43fc3a1d33ae436c2add60adf72d2e0148ea7b56 Mon Sep 17 00:00:00 2001
From: Benedikt Labrenz <benedikt@labrenz.org>
Date: Thu, 22 May 2025 14:47:24 +0200
Subject: disable host port validation if list of allowed hosts only contains
'*'

---
.../connector/FrameworkServerConnectorFactory.java | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/connector/FrameworkServerConnectorFactory.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/connector/FrameworkServerConnectorFactory.java
index 24ce43a51f..526695b9da 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/connector/FrameworkServerConnectorFactory.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/connector/FrameworkServerConnectorFactory.java
@@ -54,6 +54,8 @@ public class FrameworkServerConnectorFactory extends StandardServerConnectorFact

private final String excludeCipherSuites;

+ private final boolean disableHostPortValidator;
+
private final Set<Integer> validPorts;

private SslContextFactory.Server sslContextFactory;
@@ -72,6 +74,11 @@ public class FrameworkServerConnectorFactory extends StandardServerConnectorFact
headerSize = DataUnit.parseDataSize(properties.getWebMaxHeaderSize(), DataUnit.B).intValue();
validPorts = getValidPorts(properties);

+ // Check if the property for allowed hosts has only the wildcard entry and
+ // if so store this in disableHostPortValidator for later use
+ List<String> configuredHostNames = properties.getAllowedHostsAsList();
+ disableHostPortValidator = configuredHostNames.size() == 1 && configuredHostNames.contains("*");
+
if (properties.isHTTPSConfigured()) {
if (properties.isClientAuthRequiredForRestApi()) {
setNeedClientAuth(true);
@@ -102,8 +109,10 @@ public class FrameworkServerConnectorFactory extends StandardServerConnectorFact
// Add HostHeaderCustomizer to set Host Header for HTTP/2 and HostHeaderHandler
httpConfiguration.addCustomizer(new HostHeaderCustomizer());

- final HostPortValidatorCustomizer hostPortValidatorCustomizer = new HostPortValidatorCustomizer(validPorts);
- httpConfiguration.addCustomizer(hostPortValidatorCustomizer);
+ if (!disableHostPortValidator) {
+ final HostPortValidatorCustomizer hostPortValidatorCustomizer = new HostPortValidatorCustomizer(validPorts);
+ httpConfiguration.addCustomizer(hostPortValidatorCustomizer);
+ }

return httpConfiguration;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
From 6a6b84866f01dd160701af869870a25b90c48a02 Mon Sep 17 00:00:00 2001
From: Lars Francke <git@lars-francke.de>
Date: Wed, 13 Aug 2025 14:16:55 +0200
Subject: NIFI-14858: Make SNI checking configurable

Introduces two new properties:
- nifi.web.https.sni.required (default: false)
- nifi.web.https.sni.host.check (default: true)

These defaults mean that SNI is not required (this is the current behavior already) but if SNI is provided then the host has to match.
---
.../StandardServerConnectorFactory.java | 24 +++++++++++++++++++
.../org/apache/nifi/util/NiFiProperties.java | 10 ++++++++
.../FrameworkServerConnectorFactory.java | 4 ++++
3 files changed, 38 insertions(+)

diff --git a/nifi-commons/nifi-jetty-configuration/src/main/java/org/apache/nifi/jetty/configuration/connector/StandardServerConnectorFactory.java b/nifi-commons/nifi-jetty-configuration/src/main/java/org/apache/nifi/jetty/configuration/connector/StandardServerConnectorFactory.java
index 892755cded..856ef646b0 100644
--- a/nifi-commons/nifi-jetty-configuration/src/main/java/org/apache/nifi/jetty/configuration/connector/StandardServerConnectorFactory.java
+++ b/nifi-commons/nifi-jetty-configuration/src/main/java/org/apache/nifi/jetty/configuration/connector/StandardServerConnectorFactory.java
@@ -70,6 +70,10 @@ public class StandardServerConnectorFactory implements ServerConnectorFactory {

private int requestHeaderSize = 8192;

+ private boolean sniRequired = false;
+
+ private boolean sniHostCheck = true;
+
/**
* Standard Server Connector Factory Constructor with required properties
*
@@ -181,6 +185,24 @@ public class StandardServerConnectorFactory implements ServerConnectorFactory {
this.requestHeaderSize = requestHeaderSize;
}

+ /**
+ * Set to true if a SNI certificate is required, else requests will be rejected with 400 response.
+ *
+ * @param sniRequired SNI Required status
+ */
+ public void setSniRequired(final boolean sniRequired) {
+ this.sniRequired = sniRequired;
+ }
+
+ /**
+ * Set to true if the SNI Host name must match when there is an SNI certificate.
+ *
+ * @param sniHostCheck SNI Host Check status
+ */
+ public void setSniHostCheck(final boolean sniHostCheck) {
+ this.sniHostCheck = sniHostCheck;
+ }
+
protected Server getServer() {
return server;
}
@@ -195,6 +217,8 @@ public class StandardServerConnectorFactory implements ServerConnectorFactory {
httpConfiguration.setSendServerVersion(SEND_SERVER_VERSION);

final SecureRequestCustomizer secureRequestCustomizer = new SecureRequestCustomizer();
+ secureRequestCustomizer.setSniRequired(sniRequired);
+ secureRequestCustomizer.setSniHostCheck(sniHostCheck);
httpConfiguration.addCustomizer(secureRequestCustomizer);
}

diff --git a/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java b/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
index 94f79197d9..11ca1424ab 100644
--- a/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
+++ b/nifi-commons/nifi-properties/src/main/java/org/apache/nifi/util/NiFiProperties.java
@@ -219,6 +219,8 @@ public class NiFiProperties extends ApplicationProperties {
public static final String WEB_HTTPS_CIPHERSUITES_INCLUDE = "nifi.web.https.ciphersuites.include";
public static final String WEB_HTTPS_CIPHERSUITES_EXCLUDE = "nifi.web.https.ciphersuites.exclude";
public static final String WEB_HTTPS_NETWORK_INTERFACE_PREFIX = "nifi.web.https.network.interface.";
+ public static final String WEB_HTTPS_SNI_REQUIRED = "nifi.web.https.sni.required";
+ public static final String WEB_HTTPS_SNI_HOST_CHECK = "nifi.web.https.sni.host.check";
public static final String WEB_WORKING_DIR = "nifi.web.jetty.working.directory";
public static final String WEB_THREADS = "nifi.web.jetty.threads";
public static final String WEB_MAX_HEADER_SIZE = "nifi.web.max.header.size";
@@ -720,6 +722,14 @@ public class NiFiProperties extends ApplicationProperties {
return Arrays.stream(protocols.split("\\s+")).collect(Collectors.toSet());
}

+ public boolean isWebHttpsSniRequired() {
+ return Boolean.parseBoolean(getProperty(WEB_HTTPS_SNI_REQUIRED, "false"));
+ }
+
+ public boolean isWebHttpsSniHostCheck() {
+ return Boolean.parseBoolean(getProperty(WEB_HTTPS_SNI_HOST_CHECK, "true"));
+ }
+
public String getWebMaxHeaderSize() {
return getProperty(WEB_MAX_HEADER_SIZE, DEFAULT_WEB_MAX_HEADER_SIZE);
}
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/connector/FrameworkServerConnectorFactory.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/connector/FrameworkServerConnectorFactory.java
index 526695b9da..1ad87bacce 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/connector/FrameworkServerConnectorFactory.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/connector/FrameworkServerConnectorFactory.java
@@ -90,6 +90,10 @@ public class FrameworkServerConnectorFactory extends StandardServerConnectorFact

// Set Transport Layer Security Protocols based on platform configuration
setIncludeSecurityProtocols(TlsPlatform.getPreferredProtocols().toArray(new String[0]));
+
+ // Set SNI configuration from properties
+ setSniRequired(properties.isWebHttpsSniRequired());
+ setSniHostCheck(properties.isWebHttpsSniHostCheck());
}
}

Loading
Loading