[
https://issues.apache.org/jira/browse/IGNITE-28867?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Anton Vinogradov updated IGNITE-28867:
--------------------------------------
Description:
Allow administrators to replace node TLS certificates and trust stores without
restarting nodes. When an external system delivers certificates, let Ignite
load valid replacements automatically before the current chains expire.
Existing connections remain usable; peer trust must be prepared separately.
h3. Parts and consumers
# IGNITE-29208 preserves the peer address of wrapped SSL engines; [PR
#13750|https://github.com/apache/ignite/pull/13750] is merged.
# IGNITE-29209 keeps a factory-owned context and certificate snapshot from one
store read. {{init()}} publishes replacements atomically and retains working
material on failure; {{create()}}/{{sslBundle()}} reuse accepted material.
Previously obtained contexts remain snapshots. [PR
#13751|https://github.com/apache/ignite/pull/13751] covers this part.
# IGNITE-29210 adds reload/status for discovery, communication, the client
connector and binary REST, with validation, per-node results, permissions and
audit. Its forwarding context lets node transports follow replacements.
# IGNITE-29211 adds opt-in renewal, retries and monitoring; the external system
still issues and supplies certificates.
# IGNITE-29212 adds HTTP REST to reload/status and, together with IGNITE-29211,
automatic HTTPS renewal.
h3. Merge and integration order
Merge IGNITE-29209, then IGNITE-29210. Open IGNITE-29211 and IGNITE-29212 after
that; they may merge in either order. Include the [joint integration
commit|https://github.com/anton-vinogradov/ignite/commit/889a3fde5349850cc29428f0511bc51f42a6d599]
once in the PR that merges second, after both foundations are present.
h3. Completion
Each part includes tests and user/developer documentation. Verify the combined
solution with mutual TLS, trust changes, existing configurations and automatic
HTTPS renewal, preserving configured HTTP TLS parameters.
Factory subclasses require adaptation and recompilation under IGNITE-29209;
plain {{Factory<SSLContext>}} remains supported. Transport and Jetty migration
limits belong to their owning tasks. See [factory
migration|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#migrating-an-existing-factory]
and [certificate
rollout/recovery|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#upgrading-certificates].
Targeted local checks passed for all prepared parts. Combined validation at
{{fe6d4afd}} passed 109 cases with two existing JMX skips and Checkstyle. This
is not full CI. Close the umbrella after all parts merge and combined
validation passes.
was:
Allow administrators to replace node TLS certificates and trust stores without
restarting nodes. When an external system delivers certificates, let Ignite
load valid replacements automatically before the current chains expire.
Existing connections remain usable; administrators prepare peer trust and
verify new connections.
h3. Parts and consumers
# IGNITE-29208 preserves the peer address of wrapped SSL engines. This
independently fixes existing addressed clients; [PR
#13750|https://github.com/apache/ignite/pull/13750] is merged.
# IGNITE-29209 provides a factory-owned context and certificate snapshot from
one store read. Explicit {{init()}} publishes replacements; repeated
{{create()}}/{{sslBundle()}} calls reuse accepted material. Previously obtained
contexts remain snapshots; callers obtain the replacement from the factory.
Reload/status and renewal consume this API. [PR
#13751|https://github.com/apache/ignite/pull/13751] covers this part.
# IGNITE-29210 adds operator reload/status for discovery, communication, the
client connector and binary REST, with replacement checks, per-node results,
permissions and audit. Its node-owned forwarding context supplies the shared
mechanism used by the remaining tasks.
# IGNITE-29211 schedules opt-in certificate renewal, retries and monitoring.
The external delivery system remains responsible for issuing and supplying
replacements.
# IGNITE-29212 connects HTTP REST to reload/status. Together with IGNITE-29211,
it also supports automatic HTTPS certificate renewal.
h3. Merge and integration order
Merge IGNITE-29209, then open and merge IGNITE-29210. Open IGNITE-29211 and
IGNITE-29212 after that; they may merge in either order.
After IGNITE-29211 and IGNITE-29212 are both present, include the single [joint
integration
commit|https://github.com/anton-vinogradov/ignite/commit/889a3fde5349850cc29428f0511bc51f42a6d599]
in the PR that merges second. Apply it once, without replaying older
integration patches. It adds HTTPS automatic-renewal coverage and the
corresponding documentation/Javadoc. Run {{JettySslContextReloadTest}} and
{{SslRenewalNodeTest}} on that combined branch.
After a prerequisite is squash-merged, preserve the prepared branch and record
its exact prerequisite head. Create the dependent review branch from current
master and apply only its diff against that recorded head. If a PR is already
open, merge master normally. This keeps each review limited to its task without
force-pushing prepared branches.
h3. Completion
Each part must include its tests and user/developer documentation. Run targeted
checks on refreshed heads and verify the combined solution with mutual TLS,
trust changes, existing configurations and real automatic HTTPS renewal.
Preserve HTTP's configured TLS parameters when combining the branches.
The API passed 18 selected cases, Checkstyle and Javadoc/doclint at
{{06489a85}}. Manual checks passed 24 cases with one existing JMX skip: 23
provider/reload/reconnect cases at {{4a7ce7c9}}, then the CLI case and
Checkstyle at {{756e613f}}; the commons and core source trees are identical
between those heads. These are targeted local checks, not full CI.
Standalone renewal passed all 35 cases at {{a4bd1b1c}}; HTTP passed all 9 at
{{271ff0ed}}. Combined validation at {{fe6d4afd}} passed 109 cases with two
existing JMX skips, including automatic HTTPS renewal, permissions and audit.
Checkstyle passed for each run. The single joint commit {{889a3fde}} produces
the exact tested integration tree after merging the renewal and HTTP
foundations.
The private DataGrid/SecMan port and its final validation are still pending.
Follow [certificate rollout and
recovery|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#upgrading-certificates]
and [factory
migration|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#migrating-an-existing-factory].
Factory subclass compatibility changes belong to IGNITE-29209; transport and
Jetty migration limits are documented in their owning tasks. Close the umbrella
after all parts merge and combined validation passes.
The separate {{KillCommandsControlShTest}} stability fix is prepared on
{{ignite-consistency-cancellation-status}} for independent review. At
{{54b82830}}, both requested CLI tests passed; the two existing JMX variants
were skipped, and Checkstyle passed. It is not part of the TLS changes or a
dependency of this umbrella.
> [Umbrella] TLS certificate reload and automatic renewal
> -------------------------------------------------------
>
> Key: IGNITE-28867
> URL: https://issues.apache.org/jira/browse/IGNITE-28867
> Project: Ignite
> Issue Type: Task
> Reporter: Mikhail Petrov
> Assignee: Anton Vinogradov
> Priority: Major
> Labels: ise
> Fix For: 2.19
>
> Time Spent: 6h 50m
> Remaining Estimate: 0h
>
> Allow administrators to replace node TLS certificates and trust stores
> without restarting nodes. When an external system delivers certificates, let
> Ignite load valid replacements automatically before the current chains
> expire. Existing connections remain usable; peer trust must be prepared
> separately.
> h3. Parts and consumers
> # IGNITE-29208 preserves the peer address of wrapped SSL engines; [PR
> #13750|https://github.com/apache/ignite/pull/13750] is merged.
> # IGNITE-29209 keeps a factory-owned context and certificate snapshot from
> one store read. {{init()}} publishes replacements atomically and retains
> working material on failure; {{create()}}/{{sslBundle()}} reuse accepted
> material. Previously obtained contexts remain snapshots. [PR
> #13751|https://github.com/apache/ignite/pull/13751] covers this part.
> # IGNITE-29210 adds reload/status for discovery, communication, the client
> connector and binary REST, with validation, per-node results, permissions and
> audit. Its forwarding context lets node transports follow replacements.
> # IGNITE-29211 adds opt-in renewal, retries and monitoring; the external
> system still issues and supplies certificates.
> # IGNITE-29212 adds HTTP REST to reload/status and, together with
> IGNITE-29211, automatic HTTPS renewal.
> h3. Merge and integration order
> Merge IGNITE-29209, then IGNITE-29210. Open IGNITE-29211 and IGNITE-29212
> after that; they may merge in either order. Include the [joint integration
> commit|https://github.com/anton-vinogradov/ignite/commit/889a3fde5349850cc29428f0511bc51f42a6d599]
> once in the PR that merges second, after both foundations are present.
> h3. Completion
> Each part includes tests and user/developer documentation. Verify the
> combined solution with mutual TLS, trust changes, existing configurations and
> automatic HTTPS renewal, preserving configured HTTP TLS parameters.
> Factory subclasses require adaptation and recompilation under IGNITE-29209;
> plain {{Factory<SSLContext>}} remains supported. Transport and Jetty
> migration limits belong to their owning tasks. See [factory
> migration|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#migrating-an-existing-factory]
> and [certificate
> rollout/recovery|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#upgrading-certificates].
> Targeted local checks passed for all prepared parts. Combined validation at
> {{fe6d4afd}} passed 109 cases with two existing JMX skips and Checkstyle.
> This is not full CI. Close the umbrella after all parts merge and combined
> validation passes.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)