[ 
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 other node 
transports. {{ConnectorConfiguration.httpSslFactory}} allows HTTPS certificate 
and trust-store rotation without restarting the connector. With IGNITE-29211, 
the same factory can also renew certificates automatically.

h3. Result and acceptance

* Support built-in and XML-supplied Jetty HTTP connectors. 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.
* {{httpSslClientAuth=true}} requires {{httpSslFactory}} and a trusted client 
certificate before and after certificate/trust changes. Reject a managed 
factory combined with the connector's own TLS configuration or PROXY protocol.
* Keep existing Jetty-owned TLS working when {{httpSslFactory}} is absent. 
Verify real HTTPS connections, mutual TLS, XML connectors and rejected startup 
configurations.

h3. Migration boundaries

Moving TLS ownership from Jetty XML requires a rolling restart. Client 
authentication, host/SNI checks and revocation policy must be preserved 
explicitly; settings are not all transferred automatically.

The standard Ignite factory has no key-alias selector: preserve a selected 
alias with a store containing only that key and matching key/store passwords. 
{{httpSslClientAuth}} does not represent optional {{wantClientAuth}}; use a 
custom factory or retain Jetty TLS. Reproduce Jetty CRL/OCSP checks through 
suitable trust managers or retain Jetty TLS. Explicitly configured 
{{trustManagers}} remain in use; peer trust remains an operator responsibility.

See [Jetty XML 
migration|https://github.com/anton-vinogradov/ignite/blob/ignite-29212/docs/_docs/restapi.adoc#https-and-certificate-reload],
 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].

h3. Delivery and automatic renewal

Depends on IGNITE-29210 and works independently of IGNITE-29211. Once both 
renewal and HTTP are present, include the [joint integration 
commit|https://github.com/anton-vinogradov/ignite/commit/889a3fde5349850cc29428f0511bc51f42a6d599]
 once in the PR that merges second; it adds HTTPS renewal coverage and 
documentation.

Local checks: all 9 HTTP cases and Checkstyle passed at {{271ff0ed}}; combined 
HTTPS renewal passed at {{fe6d4afd}}. This is 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/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.



> 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 other 
> node transports. {{ConnectorConfiguration.httpSslFactory}} allows HTTPS 
> certificate and trust-store rotation without restarting the connector. With 
> IGNITE-29211, the same factory can also renew certificates automatically.
> h3. Result and acceptance
> * Support built-in and XML-supplied Jetty HTTP connectors. 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.
> * {{httpSslClientAuth=true}} requires {{httpSslFactory}} and a trusted client 
> certificate before and after certificate/trust changes. Reject a managed 
> factory combined with the connector's own TLS configuration or PROXY protocol.
> * Keep existing Jetty-owned TLS working when {{httpSslFactory}} is absent. 
> Verify real HTTPS connections, mutual TLS, XML connectors and rejected 
> startup configurations.
> h3. Migration boundaries
> Moving TLS ownership from Jetty XML requires a rolling restart. Client 
> authentication, host/SNI checks and revocation policy must be preserved 
> explicitly; settings are not all transferred automatically.
> The standard Ignite factory has no key-alias selector: preserve a selected 
> alias with a store containing only that key and matching key/store passwords. 
> {{httpSslClientAuth}} does not represent optional {{wantClientAuth}}; use a 
> custom factory or retain Jetty TLS. Reproduce Jetty CRL/OCSP checks through 
> suitable trust managers or retain Jetty TLS. Explicitly configured 
> {{trustManagers}} remain in use; peer trust remains an operator 
> responsibility.
> See [Jetty XML 
> migration|https://github.com/anton-vinogradov/ignite/blob/ignite-29212/docs/_docs/restapi.adoc#https-and-certificate-reload],
>  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].
> h3. Delivery and automatic renewal
> Depends on IGNITE-29210 and works independently of IGNITE-29211. Once both 
> renewal and HTTP are present, include the [joint integration 
> commit|https://github.com/anton-vinogradov/ignite/commit/889a3fde5349850cc29428f0511bc51f42a6d599]
>  once in the PR that merges second; it adds HTTPS renewal coverage and 
> documentation.
> Local checks: all 9 HTTP cases and Checkstyle passed at {{271ff0ed}}; 
> combined HTTPS renewal passed at {{fe6d4afd}}. This is not full CI.



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

Reply via email to