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

Anton Vinogradov updated IGNITE-29212:
--------------------------------------
    Description: 
Let HTTP REST use the same certificate reload and status workflow as the other 
node transports. With {{ConnectorConfiguration.httpSslFactory}}, administrators 
can rotate HTTPS certificates and trust stores without restarting the 
connector. The same registered factory can participate in automatic renewal 
once IGNITE-29211 is also present.

h3. Result and acceptance

* Support the built-in Jetty connector and HTTP connectors supplied through 
XML. New HTTPS connections use replacement material; established connections 
remain usable, and failed reloads retain the working context.
* Preserve factory protocols/cipher suites, applicable Jetty cipher exclusions 
and explicitly configured {{SecureRequestCustomizer}} settings. Verify the TLS 
settings actually used by Jetty.
* {{httpSslClientAuth=true}} requires a trusted client certificate before and 
after certificate/trust changes, and requires {{httpSslFactory}}. Reject a 
managed factory combined with the connector's own TLS configuration or the 
PROXY protocol.
* Keep existing Jetty-owned TLS working when {{httpSslFactory}} is absent. Test 
real HTTPS requests, open/new connections, mutual TLS after trust changes, XML 
connectors and rejected startup configurations.

h3. Migration boundaries

Moving TLS ownership from Jetty XML requires a rolling restart. Remove the 
connector's own TLS, move stores and enabled protocols/ciphers into the Ignite 
factory, and preserve mandatory client authentication, host/SNI checks and 
revocation policy. These settings are not all transferred automatically.

The standard Ignite factory has no key-alias selector: preserve an explicitly 
selected alias with a store containing only that key, using matching key/store 
passwords. {{httpSslClientAuth}} does not represent optional 
{{wantClientAuth}}; preserve it with a custom factory or retain Jetty TLS. 
Likewise, reproduce Jetty CRL/OCSP checks through suitable trust managers or 
retain Jetty TLS. Custom trust managers remain unchanged by reload.

Follow [Migrate TLS from Jetty 
XML|https://github.com/anton-vinogradov/ignite/blob/ignite-29212/docs/_docs/restapi.adoc#https-and-certificate-reload]
 for the exact steps, including implicit {{SecureRequestCustomizer}} host 
checks, and the [ConnectorConfiguration 
contracts|https://github.com/anton-vinogradov/ignite/blob/ignite-29212/modules/core/src/main/java/org/apache/ignite/configuration/ConnectorConfiguration.java#L528].
 Verify application host names and client certificates after migration. Peer 
trust remains an operator responsibility.

h3. Delivery and automatic renewal

Open the PR after IGNITE-29210 merges. This task works independently of 
IGNITE-29211.

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.

Local validation at {{271ff0ed}}: all 9 HTTP tests passed, with Checkstyle. The 
combined HTTPS renewal test also passed at {{fe6d4afd}}. These are targeted 
local checks, not full CI.


  was:
Let HTTP REST use the same certificate reload and status workflow as the other 
node transports. With {{ConnectorConfiguration.httpSslFactory}}, administrators 
can rotate HTTPS certificates and trust stores without restarting the 
connector. The same registered factory can participate in automatic renewal 
once IGNITE-29211 is also present.

h3. Result and acceptance

* Support the built-in Jetty connector and HTTP connectors supplied through 
XML. New HTTPS connections use replacement material; established connections 
remain usable, and failed reloads retain the working context.
* Preserve factory protocols/cipher suites, applicable Jetty cipher exclusions 
and explicitly configured {{SecureRequestCustomizer}} settings. Verify the TLS 
settings actually used by Jetty.
* {{httpSslClientAuth=true}} requires a trusted client certificate before and 
after certificate/trust changes, and requires {{httpSslFactory}}. Reject a 
managed factory combined with the connector's own TLS configuration or the 
PROXY protocol.
* Keep existing Jetty-owned TLS working when {{httpSslFactory}} is absent. Test 
real HTTPS requests, open/new connections, mutual TLS after trust changes, XML 
connectors and rejected startup configurations.

h3. Migration boundaries

Moving TLS ownership from Jetty XML requires a rolling restart. Remove the 
connector's own TLS, move stores and enabled protocols/ciphers into the Ignite 
factory, and preserve mandatory client authentication, host/SNI checks and 
revocation policy. These settings are not all transferred automatically.

The standard Ignite factory has no key-alias selector: preserve an explicitly 
selected alias with a store containing only that key, using matching key/store 
passwords. {{httpSslClientAuth}} does not represent optional 
{{wantClientAuth}}; preserve it with a custom factory or retain Jetty TLS. 
Likewise, reproduce Jetty CRL/OCSP checks through suitable trust managers or 
retain Jetty TLS. Custom trust managers remain unchanged by reload.

Follow [Migrate TLS from Jetty 
XML|https://github.com/anton-vinogradov/ignite/blob/ignite-29212/docs/_docs/restapi.adoc#https-and-certificate-reload]
 for the exact steps, including implicit {{SecureRequestCustomizer}} host 
checks, and the [ConnectorConfiguration 
contracts|https://github.com/anton-vinogradov/ignite/blob/ignite-29212/modules/core/src/main/java/org/apache/ignite/configuration/ConnectorConfiguration.java#L528].
 Verify application host names and client certificates after migration. Peer 
trust remains an operator responsibility.

h3. Delivery and automatic renewal

Open the PR after IGNITE-29210 merges. This task works independently of 
IGNITE-29211.

After IGNITE-29211 and IGNITE-29212 are both present, include the single [joint 
integration 
commit|https://github.com/anton-vinogradov/ignite/commit/e1a7c86c428cf775ef86750bfdca746d1cdeb88c]
 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.

Final head: {{90489d2a}}. All nine standalone HTTPS tests and Checkstyle 
passed. The only subsequent change was loading-hook Javadoc; Java code is 
unchanged. These are local targeted checks, not full CI.



> Support certificate reload for HTTP REST
> ----------------------------------------
>
>                 Key: IGNITE-29212
>                 URL: https://issues.apache.org/jira/browse/IGNITE-29212
>             Project: Ignite
>          Issue Type: Sub-task
>            Reporter: Anton Vinogradov
>            Assignee: Anton Vinogradov
>            Priority: Major
>              Labels: ise
>
> Let HTTP REST use the same certificate reload and status workflow as the 
> other node transports. With {{ConnectorConfiguration.httpSslFactory}}, 
> administrators can rotate HTTPS certificates and trust stores without 
> restarting the connector. The same registered factory can participate in 
> automatic renewal once IGNITE-29211 is also present.
> h3. Result and acceptance
> * Support the built-in Jetty connector and HTTP connectors supplied through 
> XML. New HTTPS connections use replacement material; established connections 
> remain usable, and failed reloads retain the working context.
> * Preserve factory protocols/cipher suites, applicable Jetty cipher 
> exclusions and explicitly configured {{SecureRequestCustomizer}} settings. 
> Verify the TLS settings actually used by Jetty.
> * {{httpSslClientAuth=true}} requires a trusted client certificate before and 
> after certificate/trust changes, and requires {{httpSslFactory}}. Reject a 
> managed factory combined with the connector's own TLS configuration or the 
> PROXY protocol.
> * Keep existing Jetty-owned TLS working when {{httpSslFactory}} is absent. 
> Test real HTTPS requests, open/new connections, mutual TLS after trust 
> changes, XML connectors and rejected startup configurations.
> h3. Migration boundaries
> Moving TLS ownership from Jetty XML requires a rolling restart. Remove the 
> connector's own TLS, move stores and enabled protocols/ciphers into the 
> Ignite factory, and preserve mandatory client authentication, host/SNI checks 
> and revocation policy. These settings are not all transferred automatically.
> The standard Ignite factory has no key-alias selector: preserve an explicitly 
> selected alias with a store containing only that key, using matching 
> key/store passwords. {{httpSslClientAuth}} does not represent optional 
> {{wantClientAuth}}; preserve it with a custom factory or retain Jetty TLS. 
> Likewise, reproduce Jetty CRL/OCSP checks through suitable trust managers or 
> retain Jetty TLS. Custom trust managers remain unchanged by reload.
> Follow [Migrate TLS from Jetty 
> XML|https://github.com/anton-vinogradov/ignite/blob/ignite-29212/docs/_docs/restapi.adoc#https-and-certificate-reload]
>  for the exact steps, including implicit {{SecureRequestCustomizer}} host 
> checks, and the [ConnectorConfiguration 
> contracts|https://github.com/anton-vinogradov/ignite/blob/ignite-29212/modules/core/src/main/java/org/apache/ignite/configuration/ConnectorConfiguration.java#L528].
>  Verify application host names and client certificates after migration. Peer 
> trust remains an operator responsibility.
> h3. Delivery and automatic renewal
> Open the PR after IGNITE-29210 merges. This task works independently of 
> IGNITE-29211.
> 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.
> Local validation at {{271ff0ed}}: all 9 HTTP tests passed, with Checkstyle. 
> The combined HTTPS renewal test also passed at {{fe6d4afd}}. These are 
> targeted local checks, not full CI.



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

Reply via email to