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

Anton Vinogradov updated IGNITE-29210:
--------------------------------------
    Description: 
Let administrators replace node certificates and trust stores without 
restarting nodes or closing established connections. {{control.sh --ssl 
reload}} applies replacements; {{control.sh --ssl status}} reports the material 
in use on every server and client node in the current topology. Automatic 
renewal and HTTP REST reuse this mechanism in IGNITE-29211 and IGNITE-29212.

h3. Result and acceptance

* Cover discovery, communication, the client connector and binary REST. 
Transports sharing the same factory object switch together; distinct factory 
instances remain independent. New connections use accepted replacement material 
and existing connections remain usable. Communication reconnects reuse the 
registered context, including with a plain {{Factory<SSLContext>}}.
* Validate before publication: reject unsupported TLS settings, a context 
already in use, invalid dates in any reported chain, or a known empty chain 
map. Retain the working bundle on failure. Manual reload does not require a 
later expiry.
* Preserve permissive first initialization for certificate dates and missing 
chains. Unknown metadata allows manual reload but prevents date validation; 
status must distinguish it from an empty chain map and report only included 
X.509 chains.
* Report each node, factory, transport and reload outcome. A failure, including 
a selected node leaving before execution, makes the command fail while other 
nodes are still processed. Require {{ADMIN_OPS}} for both commands and audit 
reload attempts with their initiator.
* Test mutual TLS and trust changes with real connections, shared/separate 
factories, partial failures, permissions and direct {{init()}} calls visible 
through node transports and status.

h3. Operator and extension compatibility

Reload applies changes to store contents. Factory settings require 
configuration changes and a restart; application client stores must be updated 
separately. Explicit {{trustManagers}} remain in use. Prepare peer trust first 
and test new connections afterward: reload does not prove peer trust or roll 
back a successful replacement because a later handshake fails. Follow [Reload 
or 
Restart|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#reload-or-restart],
 [Upgrading 
Certificates|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#upgrading-certificates]
 and the [command 
reference|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/tools/control-script.adoc#reloading-certificates].

Registered node transports follow replacements through their shared forwarding 
context. Code that directly retains a context from {{factory.create()}} must 
obtain it again after successful {{init()}}.

A plain {{Factory<SSLContext>}} is called at registration and reload and must 
return a fresh context for replacement. Follow IGNITE-29209's subclass 
migration. Custom {{TcpDiscoverySpi}} subclasses using the removed protected 
{{sslSockFactory}} or {{sslSrvSockFactory}} fields must also be adapted and 
recompiled.

h3. Delivery

Open the PR after IGNITE-29209 merges; review only this task's changes against 
that accepted API.

All 23 provider/reload/reconnect tests passed at {{4a7ce7c9}}. The 
generated-store CLI test passed at {{756e613f}}, with one existing JMX skip, 
and Checkstyle passed. The commons and core source trees are identical between 
those heads. These are local targeted checks, not full CI.


  was:
Let administrators replace node certificates and trust stores without 
restarting nodes or closing established connections. {{control.sh --ssl 
reload}} applies replacements; {{control.sh --ssl status}} reports the material 
in use on every server and client node in the current topology. Automatic 
renewal and HTTP REST reuse this mechanism in IGNITE-29211 and IGNITE-29212.

h3. Result and acceptance

* Cover discovery, communication, the client connector and binary REST. 
Transports sharing the same factory object switch together; distinct factory 
instances remain independent. New connections use accepted replacement material 
and existing connections remain usable.
* Validate before publication: reject unsupported TLS settings, a context 
already in use, invalid dates in any reported chain, or a known empty chain 
map. Retain the working bundle on failure. Manual reload does not require a 
later expiry.
* Preserve permissive first initialization for certificate dates and missing 
chains. Unknown metadata allows manual reload but prevents date validation; 
status must distinguish it from an empty chain map and report only included 
X.509 chains.
* Report each node, factory, transport and reload outcome. A failure, including 
a selected node leaving before execution, makes the command fail while other 
nodes are still processed. Require {{ADMIN_OPS}} for both commands and audit 
reload attempts with their initiator.
* Test mutual TLS and trust changes with real connections, shared/separate 
factories, partial failures, permissions and direct {{init()}} calls visible 
through node transports and status.

h3. Operator and extension compatibility

Reload applies changes to store contents. Factory settings require 
configuration changes and a restart; application client stores must be updated 
separately. Explicit {{trustManagers}} remain in use. Prepare peer trust first 
and test new connections afterward: reload does not prove peer trust or roll 
back a successful replacement because a later handshake fails. Follow [Reload 
or 
Restart|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#reload-or-restart],
 [Upgrading 
Certificates|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#upgrading-certificates]
 and the [command 
reference|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/tools/control-script.adoc#reloading-certificates].

Registered node transports follow replacements through their shared forwarding 
context. Code that directly retains a context from {{factory.create()}} must 
obtain it again after successful {{init()}}.

A plain {{Factory<SSLContext>}} is called at registration and reload and must 
return a fresh context for replacement. Follow IGNITE-29209's subclass 
migration. Custom {{TcpDiscoverySpi}} subclasses using the removed protected 
{{sslSockFactory}} or {{sslSrvSockFactory}} fields must also be adapted and 
recompiled.

h3. Delivery

Open the PR after IGNITE-29209 merges; review only this task's changes against 
that accepted API. Final head: {{16f815de}}. The standalone branch passed a 
clean compile, all 22 provider/reload tests and Checkstyle. These are local 
targeted checks, not full CI.



> 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
>
> Let administrators replace node certificates and trust stores without 
> restarting nodes or closing established connections. {{control.sh --ssl 
> reload}} applies replacements; {{control.sh --ssl status}} reports the 
> material in use on every server and client node in the current topology. 
> Automatic renewal and HTTP REST reuse this mechanism in IGNITE-29211 and 
> IGNITE-29212.
> h3. Result and acceptance
> * Cover discovery, communication, the client connector and binary REST. 
> Transports sharing the same factory object switch together; distinct factory 
> instances remain independent. New connections use accepted replacement 
> material and existing connections remain usable. Communication reconnects 
> reuse the registered context, including with a plain {{Factory<SSLContext>}}.
> * Validate before publication: reject unsupported TLS settings, a context 
> already in use, invalid dates in any reported chain, or a known empty chain 
> map. Retain the working bundle on failure. Manual reload does not require a 
> later expiry.
> * Preserve permissive first initialization for certificate dates and missing 
> chains. Unknown metadata allows manual reload but prevents date validation; 
> status must distinguish it from an empty chain map and report only included 
> X.509 chains.
> * Report each node, factory, transport and reload outcome. A failure, 
> including a selected node leaving before execution, makes the command fail 
> while other nodes are still processed. Require {{ADMIN_OPS}} for both 
> commands and audit reload attempts with their initiator.
> * Test mutual TLS and trust changes with real connections, shared/separate 
> factories, partial failures, permissions and direct {{init()}} calls visible 
> through node transports and status.
> h3. Operator and extension compatibility
> Reload applies changes to store contents. Factory settings require 
> configuration changes and a restart; application client stores must be 
> updated separately. Explicit {{trustManagers}} remain in use. Prepare peer 
> trust first and test new connections afterward: reload does not prove peer 
> trust or roll back a successful replacement because a later handshake fails. 
> Follow [Reload or 
> Restart|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#reload-or-restart],
>  [Upgrading 
> Certificates|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/security/ssl-tls.adoc#upgrading-certificates]
>  and the [command 
> reference|https://github.com/anton-vinogradov/ignite/blob/ignite-29210/docs/_docs/tools/control-script.adoc#reloading-certificates].
> Registered node transports follow replacements through their shared 
> forwarding context. Code that directly retains a context from 
> {{factory.create()}} must obtain it again after successful {{init()}}.
> A plain {{Factory<SSLContext>}} is called at registration and reload and must 
> return a fresh context for replacement. Follow IGNITE-29209's subclass 
> migration. Custom {{TcpDiscoverySpi}} subclasses using the removed protected 
> {{sslSockFactory}} or {{sslSrvSockFactory}} fields must also be adapted and 
> recompiled.
> h3. Delivery
> Open the PR after IGNITE-29209 merges; review only this task's changes 
> against that accepted API.
> All 23 provider/reload/reconnect tests passed at {{4a7ce7c9}}. The 
> generated-store CLI test passed at {{756e613f}}, with one existing JMX skip, 
> and Checkstyle passed. The commons and core source trees are identical 
> between those heads. These are local targeted checks, not full CI.



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

Reply via email to