[ 
https://issues.apache.org/jira/browse/IGNITE-29210?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Anton Vinogradov updated IGNITE-29210:
--------------------------------------
    Description: 
Factories can reload key and trust stores, and new TCP connections can use the 
updated context. Administrators still have no command to trigger that reload 
across running nodes. Add {{control.sh --ssl reload}} to load updated key and 
trust stores and show which nodes succeeded.

h3. What the command must do

# Target all server and thick-client nodes in the current topology. Reload 
factories used by TCP discovery, communication, the client connector and binary 
REST that actually started with TLS. Configuration alone is not enough: a 
binary REST listener may fail to bind a port. Reload a shared factory once per 
node and report all transports using it.
# Require {{ADMIN_OPS}} and confirmation, with {{--yes}} to skip the prompt. 
Each node logs the outcome and, when security is enabled, the initiator.
# Before reloading, each node checks that all its factories support reload. If 
any factory is unsupported, reload nothing on that node. Otherwise, stop at the 
first reload failure. Keep successful replacements and their log records; other 
nodes continue independently.
# Report every target, including nodes with no TCP transports using TLS. Return 
an error if any target fails, uses an unsupported factory or leaves before 
responding. A result received from a node stays in the report even if the node 
leaves later.

The command does not reload TLS for the HTTP REST endpoint (Jetty).

h3. Which factories can reload

Use {{AbstractSslContextFactory.init()}} and make it public. Run reloads of the 
same factory one at a time; cached {{create()}} calls can keep returning the 
working context during loading. Report factory types that do not extend 
{{AbstractSslContextFactory}} as unsupported.

Document the contract for custom factories: an overridden {{create()}} must 
obtain the context from {{super.create()}} on every call. The key and trust 
loading hooks must read fresh material for their changes to take effect. Trust 
managers supplied through {{setTrustManagers()}} are reused.

h3. Operator instructions

Update “Upgrading Certificates” in the SSL/TLS guide: prepare peer trust across 
the cluster, replace stores at the configured paths with the same passwords, 
run reload and verify a new connection. To recover from a bad replacement, 
restore the previous files and reload again. Changing node configuration 
requires a restart.

h3. Done when

The control utility applies a replacement on servers and thick clients, and a 
new connection confirms it. Tests cover shared and custom factories, concurrent 
reloads of the same factory, confirmation, permissions and logs. Tests verify 
that an unsupported factory prevents all reloads on its node, and that a failed 
reload prevents later reloads there. The report retains results from other 
nodes. A listener that did not start must not appear as reloaded; a node with 
no TCP transports using TLS must still appear.

Depends on IGNITE-29256. This ticket adds the command and its documentation, 
not a separate status command, new certificate-date checks or background 
monitoring.

[Implementation plan in PR #13785|https://github.com/apache/ignite/pull/13785]


  was:
Factories can reload key and trust stores, and new TCP connections can use the 
updated context. Administrators still have no command to trigger that reload 
across running nodes. Add {{control.sh --ssl reload}} to load updated key and 
trust stores and show which nodes succeeded.

h3. What the command must do

# Target all server and thick-client nodes in the current topology. Reload 
factories used by TCP discovery, communication, the client connector and binary 
REST that actually started with TLS. Configuration alone is not enough: a 
binary REST listener may fail to bind a port. Reload a shared factory once per 
node and report all transports using it.
# Require {{ADMIN_OPS}} and confirmation, with {{--yes}} to skip the prompt. 
Each node logs the outcome and, when security is enabled, the initiator.
# Report every target, including nodes with no TCP transports using TLS. 
Continue after individual failures and retain successful replacements. Return 
an error if any target fails, uses an unsupported factory or leaves before 
responding. Keep the full report. A result received from a node stays in the 
report even if the node leaves later.

The command does not reload TLS for the HTTP REST endpoint (Jetty).

h3. Which factories can reload

Use {{AbstractSslContextFactory.init()}} and make it public. Run reloads of the 
same factory one at a time; cached {{create()}} calls can keep returning the 
working context during loading. Report factory types that do not extend 
{{AbstractSslContextFactory}} as unsupported.

Document the contract for custom factories: an overridden {{create()}} must 
obtain the context from {{super.create()}} on every call. The key and trust 
loading hooks must read fresh material for their changes to take effect. Trust 
managers supplied through {{setTrustManagers()}} are reused.

h3. Operator instructions

Update “Upgrading Certificates” in the SSL/TLS guide: prepare peer trust across 
the cluster, replace stores at the configured paths with the same passwords, 
run reload and verify a new connection. To recover from a bad replacement, 
restore the previous files and reload again. Changing node configuration 
requires a restart.

h3. Done when

The control utility applies a replacement on servers and thick clients, and a 
new connection confirms it. Tests cover shared and custom factories, concurrent 
reloads of the same factory, confirmation, permissions and logs. The report 
must retain successes alongside failures, unsupported factories and departed 
nodes. A listener that did not start must not appear as reloaded; a node with 
no TCP transports using TLS must still appear.

Depends on IGNITE-29256. This ticket adds the command and its documentation, 
not a separate status command, new certificate-date checks or background 
monitoring.

[Implementation plan in PR #13785|https://github.com/apache/ignite/pull/13785]



> Reload TLS certificates on running nodes
> ----------------------------------------
>
>                 Key: IGNITE-29210
>                 URL: https://issues.apache.org/jira/browse/IGNITE-29210
>             Project: Ignite
>          Issue Type: Sub-task
>            Reporter: Anton Vinogradov
>            Assignee: Anton Vinogradov
>            Priority: Major
>              Labels: ise
>          Time Spent: 4h 50m
>  Remaining Estimate: 0h
>
> Factories can reload key and trust stores, and new TCP connections can use 
> the updated context. Administrators still have no command to trigger that 
> reload across running nodes. Add {{control.sh --ssl reload}} to load updated 
> key and trust stores and show which nodes succeeded.
> h3. What the command must do
> # Target all server and thick-client nodes in the current topology. Reload 
> factories used by TCP discovery, communication, the client connector and 
> binary REST that actually started with TLS. Configuration alone is not 
> enough: a binary REST listener may fail to bind a port. Reload a shared 
> factory once per node and report all transports using it.
> # Require {{ADMIN_OPS}} and confirmation, with {{--yes}} to skip the prompt. 
> Each node logs the outcome and, when security is enabled, the initiator.
> # Before reloading, each node checks that all its factories support reload. 
> If any factory is unsupported, reload nothing on that node. Otherwise, stop 
> at the first reload failure. Keep successful replacements and their log 
> records; other nodes continue independently.
> # Report every target, including nodes with no TCP transports using TLS. 
> Return an error if any target fails, uses an unsupported factory or leaves 
> before responding. A result received from a node stays in the report even if 
> the node leaves later.
> The command does not reload TLS for the HTTP REST endpoint (Jetty).
> h3. Which factories can reload
> Use {{AbstractSslContextFactory.init()}} and make it public. Run reloads of 
> the same factory one at a time; cached {{create()}} calls can keep returning 
> the working context during loading. Report factory types that do not extend 
> {{AbstractSslContextFactory}} as unsupported.
> Document the contract for custom factories: an overridden {{create()}} must 
> obtain the context from {{super.create()}} on every call. The key and trust 
> loading hooks must read fresh material for their changes to take effect. 
> Trust managers supplied through {{setTrustManagers()}} are reused.
> h3. Operator instructions
> Update “Upgrading Certificates” in the SSL/TLS guide: prepare peer trust 
> across the cluster, replace stores at the configured paths with the same 
> passwords, run reload and verify a new connection. To recover from a bad 
> replacement, restore the previous files and reload again. Changing node 
> configuration requires a restart.
> h3. Done when
> The control utility applies a replacement on servers and thick clients, and a 
> new connection confirms it. Tests cover shared and custom factories, 
> concurrent reloads of the same factory, confirmation, permissions and logs. 
> Tests verify that an unsupported factory prevents all reloads on its node, 
> and that a failed reload prevents later reloads there. The report retains 
> results from other nodes. A listener that did not start must not appear as 
> reloaded; a node with no TCP transports using TLS must still appear.
> Depends on IGNITE-29256. This ticket adds the command and its documentation, 
> not a separate status command, new certificate-date checks or background 
> monitoring.
> [Implementation plan in PR #13785|https://github.com/apache/ignite/pull/13785]



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to