diff --git a/assets/css/index.css b/assets/css/index.css
index 9aafdaff99..3db48b8ec8 100644
--- a/assets/css/index.css
+++ b/assets/css/index.css
@@ -101,6 +101,25 @@ section.prose {
@apply mt-16 scroll-mt-6;
}
+/* Reduce top margin when headers immediately follow other headers */
+.prose h1[id] + h2[id],
+.prose h1[id] + h3[id],
+.prose h1[id] + h4[id],
+.prose h1[id] + h5[id],
+.prose h1[id] + h6[id],
+.prose h2[id] + h3[id],
+.prose h2[id] + h4[id],
+.prose h2[id] + h5[id],
+.prose h2[id] + h6[id],
+.prose h3[id] + h4[id],
+.prose h3[id] + h5[id],
+.prose h3[id] + h6[id],
+.prose h4[id] + h5[id],
+.prose h4[id] + h6[id],
+.prose h5[id] + h6[id] {
+ @apply mt-6;
+}
+
.prose p:empty,
.prose li:empty {
@apply hidden;
@@ -579,6 +598,11 @@ html {
scrollbar-gutter: stable;
}
+/* Auto-clickable for standalone images */
+img:not(a img):not(.image-card-img):not([src*="#no-click"]) {
+ cursor: pointer;
+}
+
/* Chroma syntax highlighting */
/* Background */
diff --git a/content/embeds/rs-prometheus-metrics-v2.md b/content/embeds/rs-prometheus-metrics-v2.md
index e2008dc5e3..2121cd245f 100644
--- a/content/embeds/rs-prometheus-metrics-v2.md
+++ b/content/embeds/rs-prometheus-metrics-v2.md
@@ -51,6 +51,7 @@
| node_available_memory_no_overbooking_bytes | gauge | Available RAM in the node (bytes) without taking into account overbooking |
| node_bigstore_free_bytes | gauge | Sum of free space of back-end flash (used by flash database's [BigRedis]) on all cluster nodes (bytes); returned only when BigRedis is enabled |
| node_cert_expires_in_seconds | gauge | Certificate expiration (in seconds) per given node; read more about [certificates in Redis Enterprise]({{< relref "/operate/rs/security/certificates" >}}) and [monitoring certificates]({{< relref "/operate/rs/security/certificates/monitor-certificates" >}}) |
+| customer_managed_ine_certificates | gauge | Indicates whether customer-provided internode encryption certificates are in use
0=No
1=Yes |
| node_ephemeral_storage_avail_bytes | gauge | Disk space available to RLEC processes on configured ephemeral disk (bytes) |
| node_ephemeral_storage_free_bytes | gauge | Free disk space on configured ephemeral disk (bytes) |
| node_memory_MemFree_bytes | gauge | Free memory in the node (bytes) |
diff --git a/content/operate/rs/references/cli-utilities/rladmin/cluster/certificate.md b/content/operate/rs/references/cli-utilities/rladmin/cluster/certificate.md
index 37bab0bea7..503e0b2979 100644
--- a/content/operate/rs/references/cli-utilities/rladmin/cluster/certificate.md
+++ b/content/operate/rs/references/cli-utilities/rladmin/cluster/certificate.md
@@ -5,7 +5,7 @@ categories:
- docs
- operate
- rs
-description: Sets the cluster certificate.
+description: Sets cluster certificates.
headerRange: '[1-2]'
linkTitle: certificate
tags:
@@ -14,13 +14,14 @@ toc: 'true'
weight: $weight
---
+## `cluster certificate set `
+
Sets a cluster certificate to a specified PEM file.
```sh
-rladmin cluster certificate
- set
- certificate_file
- [ key_file ]
+rladmin cluster certificate set
+ certificate_file
+ [ key_file ]
```
To set a certificate for a specific service, use the corresponding certificate name. See the [certificates table]({{< relref "/operate/rs/security/certificates" >}}) for the list of cluster certificates and their descriptions.
@@ -29,7 +30,7 @@ To set a certificate for a specific service, use the corresponding certificate n
| Parameter | Type/Value | Description |
|-----------|------------|-------------|
-| certificate name | 'cm'
'api'
'proxy'
'syncer'
'metrics_exporter' | Name of the certificate to update |
+| certificate_name | 'cm'
'api'
'proxy'
'syncer'
'metrics_exporter' | Name of the certificate to update. See the [certificates table]({{< relref "/operate/rs/security/certificates" >}}) for descriptions. |
| certificate_file | filepath | Path to the certificate file |
| key_file | filepath | Path to the key file (optional) |
@@ -39,8 +40,47 @@ Reports that the certificate was set to the specified file. Returns an error mes
### Example
+Update the proxy certificate:
+
```sh
$ rladmin cluster certificate set proxy \
certificate_file /tmp/proxy.pem
Set proxy certificate to contents of file /tmp/proxy.pem
```
+
+## `cluster certificate set internal`
+
+Sets [customer-provided internode encryption certificates]({{}}).
+
+```sh
+rladmin cluster certificate set internal
+ dpine_certificate_file
+ dpine_key_file
+ cpine_certificate_file
+ cpine_key_file
+```
+
+### Parameters
+
+| Parameter | Type/Value | Description |
+|-----------|------------|-------------|
+| dpine_certificate_file | filepath | Path to the data plane internode encryption (DPINE) certificate file |
+| dpine_key_file | filepath | Path to the data plane internode encryption (DPINE) key file |
+| cpine_certificate_file | filepath | Path to the control plane internode encryption (CPINE) certificate file |
+| cpine_key_file | filepath | Path to the control plane internode encryption (CPINE) key file |
+
+### Returns
+
+Reports that the internal certificates were set to the specified files. Returns an error message if the certificates fail to update.
+
+### Example
+
+Set up [customer-provided internode encryption certificates]({{}}):
+
+```sh
+$ rladmin cluster certificate set internal \
+ dpine_certificate_file /tmp/dpine_cert.pem \
+ dpine_key_file /tmp/dpine_key.pem \
+ cpine_certificate_file /tmp/cpine_cert.pem \
+ cpine_key_file /tmp/cpine_key.pem
+```
diff --git a/content/operate/rs/references/rest-api/objects/certificates.md b/content/operate/rs/references/rest-api/objects/certificates.md
new file mode 100644
index 0000000000..6d24c0fc75
--- /dev/null
+++ b/content/operate/rs/references/rest-api/objects/certificates.md
@@ -0,0 +1,19 @@
+---
+Title: Certificates object
+alwaysopen: false
+categories:
+- docs
+- operate
+- rs
+description: An object that represents a certificate
+linkTitle: certificates
+weight: $weight
+---
+
+An API object that represents a certificate used by a Redis Enterprise Software cluster.
+
+| Name | Type/Value | Description |
+|------|------------|-------------|
+| name | `cm`
`api`
`mtls_trusted_ca`
`proxy`
`metrics_exporter`
`syncer`
`ldap_client`
`ccs_internode_encryption`
`data_internode_encryption` | Certificate type.
See the [certificates table]({{< relref "/operate/rs/security/certificates" >}}) for the list of cluster certificates and their descriptions. |
+| certificate | string | The certificate in PEM format |
+| key | string | The private key in PEM format |
diff --git a/content/operate/rs/references/rest-api/requests/cluster/certificates/_index.md b/content/operate/rs/references/rest-api/requests/cluster/certificates/_index.md
index 8e221e2048..ec59573a31 100644
--- a/content/operate/rs/references/rest-api/requests/cluster/certificates/_index.md
+++ b/content/operate/rs/references/rest-api/requests/cluster/certificates/_index.md
@@ -15,7 +15,8 @@ weight: $weight
| Method | Path | Description |
|--------|------|-------------|
| [GET](#get-cluster-certificates) | `/v1/cluster/certificates` | Get cluster certificates |
-| [PUT](#put-cluster-update_cert) | `/v1/cluster/update_cert` | Update a cluster certificate |
+| [PUT](#put-cluster-certificates) | `/v1/cluster/certificates` | Update cluster certificates |
+| [PUT](#put-cluster-update_cert) | `/v1/cluster/update_cert` | Update a cluster certificate (deprecated as of Redis Enterprise Software version 7.22.2) |
| [DELETE](#delete-cluster-certificate) | `/v1/cluster/certificates/{certificate_name}` | Delete cluster certificate |
## Get cluster certificates {#get-cluster-certificates}
@@ -62,15 +63,83 @@ Returns a JSON object that contains the cluster's certificates and keys.
| Code | Description |
|------|-------------|
-| [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | No error |
+| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | No error |
+## Update cluster certificates {#put-cluster-certificates}
+
+```sh
+PUT /v1/cluster/certificates
+```
+
+Replaces multiple cluster certificates with the provided certificates on all nodes within the cluster. This endpoint validates all provided certificates before actually updating the cluster.
+
+See the [certificates table]({{< relref "/operate/rs/security/certificates" >}}) for the list of cluster certificates and their descriptions.
+
+### Request {#put-certificates-request}
+
+#### Example HTTP request
+
+```sh
+PUT /v1/cluster/certificates
+```
+
+#### Example JSON body
+
+```json
+{
+ "certificates": [
+ {
+ "name": "proxy",
+ "certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
+ "key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
+ },
+ {
+ "name": "api",
+ "certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
+ "key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
+ }
+ ]
+}
+```
+
+#### Request headers
+
+| Key | Value | Description |
+|-----|-------|-------------|
+| Host | cnm.cluster.fqdn | Domain name |
+| Accept | application/json | Accepted media type |
+
+#### Request body
+
+Include an array of [certificate objects]({{}}) in the request body.
+
+### Response {#put-certificates-response}
+
+Returns a `200 OK` status code if all certificates are successfully replaced across the entire cluster.
+
+If the response returns a failed status code, you should retry updating the certificates in case the cluster is no longer in an optimal state.
+
+### Status codes {#put-certificates-status-codes}
+
+| Code | Description |
+|------|-------------|
+| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | No error |
+| [400 Bad Request](https://www.rfc-editor.org/rfc/rfc9110.html#name-400-bad-request) | Failed, invalid certificate(s) |
+| [403 Forbidden](https://www.rfc-editor.org/rfc/rfc9110.html#name-403-forbidden) | Failed, unknown certificate(s) |
+| [406 Not Acceptable](https://www.rfc-editor.org/rfc/rfc9110.html#name-406-not-acceptable) | Failed, expired certificate(s) |
+| [409 Conflict](https://www.rfc-editor.org/rfc/rfc9110.html#name-409-conflict) | Failed, not all nodes have been updated |
+
## Update cluster certificate {#put-cluster-update_cert}
```sh
PUT /v1/cluster/update_cert
```
+{{}}
+This REST API path is deprecated as of Redis Enterprise Software 7.22.2 and will be removed in a future version. Use [`PUT /v1/cluster/certificates`](#put-cluster-certificates) instead.
+{{}}
+
Replaces an existing certificate on all nodes within the cluster with a new certificate. The new certificate must pass validation before it can replace the old certificate.
See the [certificates table]({{< relref "/operate/rs/security/certificates" >}}) for the list of cluster certificates and their descriptions.
@@ -105,12 +174,12 @@ Otherwise, retry the certificate update in case the failure was due to a tempora
| Code | Description |
|------|-------------|
-| [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | No error |
-| [400 Bad Request](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1) | Failed, invalid certificate. |
-| [403 Forbidden](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4) | Failed, unknown certificate. |
-| [404 Not Found](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5) | Failed, invalid certificate. |
-| [406 Not Acceptable](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7) | Failed, expired certificate. |
-| [409 Conflict](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.10) | Failed, not all nodes have been updated. |
+| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | No error |
+| [400 Bad Request](https://www.rfc-editor.org/rfc/rfc9110.html#name-400-bad-request) | Failed, invalid certificate. |
+| [403 Forbidden](https://www.rfc-editor.org/rfc/rfc9110.html#name-403-forbidden) | Failed, unknown certificate. |
+| [404 Not Found](https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found) | Failed, invalid certificate. |
+| [406 Not Acceptable](https://www.rfc-editor.org/rfc/rfc9110.html#name-406-not-acceptable) | Failed, expired certificate. |
+| [409 Conflict](https://www.rfc-editor.org/rfc/rfc9110.html#name-409-conflict) | Failed, not all nodes have been updated. |
## Delete cluster certificate {#delete-cluster-certificate}
@@ -143,7 +212,7 @@ Returns a status code that indicates the certificate deletion success or failure
| Code | Description |
|------|-------------|
-| [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | Operation successful |
-| [404 Not Found](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5) | Failed, requested deletion of an unknown certificate |
-| [403 Forbidden](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4) | Failed, requested deletion of a required certificate |
-| [500 Internal Server Error](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1) | Failed, error while deleting certificate from disk |
+| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | Operation successful |
+| [404 Not Found](https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found) | Failed, requested deletion of an unknown certificate |
+| [403 Forbidden](https://www.rfc-editor.org/rfc/rfc9110.html#name-403-forbidden) | Failed, requested deletion of a required certificate |
+| [500 Internal Server Error](https://www.rfc-editor.org/rfc/rfc9110.html#name-500-internal-server-error) | Failed, error while deleting certificate from disk |
diff --git a/content/operate/rs/release-notes/rs-7-22-releases/_index.md b/content/operate/rs/release-notes/rs-7-22-releases/_index.md
index 9e2e2e2e43..c00aaf41c2 100644
--- a/content/operate/rs/release-notes/rs-7-22-releases/_index.md
+++ b/content/operate/rs/release-notes/rs-7-22-releases/_index.md
@@ -55,6 +55,8 @@ For more detailed release notes, select a build version from the following table
- Deprecated the `data_files` option for the `recovery_plan` specified in [`POST /v2/bdbs`]({{}}) requests. Use the new `original_bdb_shards` option to recover a database from the provided list of shards instead.
+- Deprecated [`PUT /v1/cluster/update_cert`]({{}}) REST API requests as of Redis Enterprise Software version 7.22.2. Use [`PUT /v1/cluster/certificates`]({{}}) to update cluster certificates instead.
+
#### Internal monitoring and v1 Prometheus metrics deprecation
The existing [internal monitoring engine]({{}}) is deprecated. We recommend transitioning to the new [metrics stream engine]({{}}) for improved performance, enhanced integration capabilities, and modernized metrics streaming.
diff --git a/content/operate/rs/release-notes/rs-7-22-releases/rs-7-22-2-14.md b/content/operate/rs/release-notes/rs-7-22-releases/rs-7-22-2-14.md
new file mode 100644
index 0000000000..f0114f1937
--- /dev/null
+++ b/content/operate/rs/release-notes/rs-7-22-releases/rs-7-22-2-14.md
@@ -0,0 +1,265 @@
+---
+Title: Redis Enterprise Software release notes 7.22.2-14 (September 2025)
+alwaysopen: false
+categories:
+- docs
+- operate
+- rs
+compatibleOSSVersion: Redis 7.4.0
+description: Customer-managed certificates for internode encryption. Cluster Manager UI bug fixes for viewing shard memory usage metrics and editing Active-Active databases that have participating clusters with empty ports.
+linkTitle: 7.22.2-14 (September 2025)
+weight: 86
+---
+
+[Redis Enterprise Software version 7.22.2](https://redis.io/downloads/#software) is now available! This release includes API enhancements that warranted a new minor version instead of a maintenance release for version 7.22.0. However, you can upgrade from 7.22.0 to 7.22.2 without issue.
+
+## Highlights
+
+This version offers:
+
+- Customer-managed certificates for internode encryption
+
+- Cluster Manager UI bug fixes for viewing shard memory usage metrics and editing Active-Active databases that have participating clusters with empty ports
+
+## New in this release
+
+### New features
+
+#### Customer-managed certificates for internode encryption
+
+Instead of using Redis Enterprise Software's self-signed certificates for internode encryption, you can provide certificates generated by your Certificate Authority (CA). See [Customer-provided certificates ]({{}}) for details.
+
+### Redis database versions
+
+Redis Enterprise Software version 7.22.2 includes three Redis database versions: 7.4, 7.2, and 6.2.
+
+The [default Redis database version]({{}}) is 7.4.
+
+### Redis module feature sets
+
+Redis Enterprise Software comes packaged with several modules. As of version 7.22.0, Redis Enterprise Software includes three feature sets, compatible with different Redis database versions.
+
+The following table shows which Redis modules are compatible with each Redis database version included in this release.
+
+| Redis database version | Compatible Redis modules |
+|------------------------|--------------------------|
+| 7.4 | [RediSearch 2.10]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.10-release-notes.md" >}})
[RedisJSON 2.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.8-release-notes.md" >}})
[RedisTimeSeries 1.12]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.12-release-notes.md" >}})
[RedisBloom 2.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.8-release-notes.md" >}}) |
+| 7.2 | [RediSearch 2.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.8-release-notes.md" >}})
[RedisJSON 2.6]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.6-release-notes.md" >}})
[RedisTimeSeries 1.10]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.10-release-notes.md" >}})
[RedisBloom 2.6]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.6-release-notes.md" >}}) |
+| 6.2 | [RediSearch 2.6]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisearch/redisearch-2.6-release-notes.md" >}})
[RedisJSON 2.4]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisjson/redisjson-2.4-release-notes.md" >}})
[RedisTimeSeries 1.8]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.8-release-notes.md" >}})
[RedisBloom 2.4]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisbloom/redisbloom-2.4-release-notes.md" >}}) |
+
+### Resolved issues
+
+- RS165532: Fixed an issue that could prevent viewing shard memory usage metrics in the Cluster Manager UI and cause the page to fail to load when switching between database and shard metrics.
+
+- RS166270: Fixed an issue in the Cluster Manager UI that prevented editing Active-Active databases that have participating clusters with empty ports.
+
+
+## Version changes
+
+### Deprecations
+
+#### API deprecations
+
+- Deprecated [`PUT /v1/cluster/update_cert`]({{}}) REST API requests. Use [`PUT /v1/cluster/certificates`]({{}}) to update cluster certificates instead.
+
+### Supported platforms
+
+The following table provides a snapshot of supported platforms as of this Redis Enterprise Software release. See the [supported platforms reference]({{< relref "/operate/rs/references/supported-platforms" >}}) for more details about operating system compatibility.
+
+✅ Supported – The platform is supported for this version of Redis Enterprise Software and Redis Stack modules.
+
+:warning: Deprecation warning – The platform is still supported for this version of Redis Enterprise Software, but support will be removed in a future release.
+
+| Redis Software
major versions | 7.22 | 7.8 | 7.4 | 7.2 | 6.4 | 6.2 |
+|---------------------------------|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+| **Release date** | May 2025 | Nov 2024 | Feb 2024 | Aug 2023 | Feb 2023 | Aug 2021 |
+| [**End-of-life date**]({{< relref "/operate/rs/installing-upgrading/product-lifecycle#endoflife-schedule" >}}) | Determined after
next major release | May 2027 | Nov 2026 | Feb 2026 | Aug 2025 | Feb 2025 |
+| **Platforms** | | | | | | |
+| RHEL 9 &
compatible distros[1](#table-note-1) | ✅ | ✅ | ✅ | – | – | – |
+| RHEL 9
FIPS mode[5](#table-note-5) | ✅ | ✅ | – | – | – | – |
+| RHEL 8 &
compatible distros[1](#table-note-1) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| RHEL 7 &
compatible distros[1](#table-note-1) | – | – | – | :warning: | ✅ | ✅ |
+| Ubuntu 22.04[2](#table-note-2) | ✅ | ✅ | – | – | – | – |
+| Ubuntu 20.04[2](#table-note-2) | ✅ | ✅ | ✅ | ✅ | ✅ | – |
+| Ubuntu 18.04[2](#table-note-2) | – | – | :warning: | :warning: | ✅ | ✅ |
+| Ubuntu 16.04[2](#table-note-2) | – | – | – | :warning: | ✅ | ✅ |
+| Amazon Linux 2 | ✅ | ✅ | ✅ | ✅ | ✅ | – |
+| Amazon Linux 1 | – | – | – | ✅ | ✅ | ✅ |
+| Kubernetes[3](#table-note-3) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Docker[4](#table-note-4) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+
+1. The RHEL-compatible distributions CentOS, CentOS Stream, Alma, and Rocky are supported if they have full RHEL compatibility. Oracle Linux running the Red Hat Compatible Kernel (RHCK) is supported, but the Unbreakable Enterprise Kernel (UEK) is not supported.
+
+2. The server version of Ubuntu is recommended for production installations. The desktop version is only recommended for development deployments.
+
+3. See the [Redis Enterprise for Kubernetes documentation]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) for details about support per version and Kubernetes distribution.
+
+4. [Docker images]({{< relref "/operate/rs/installing-upgrading/quickstarts/docker-quickstart" >}}) of Redis Enterprise Software are certified for development and testing only.
+
+5. Supported only if [FIPS was enabled during RHEL installation](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/security_hardening/switching-rhel-to-fips-mode_security-hardening#proc_installing-the-system-with-fips-mode-enabled_switching-rhel-to-fips-mode) to ensure FIPS compliance.
+
+## Downloads
+
+The following table shows the SHA256 checksums for the available packages:
+
+| Package | SHA256 checksum (7.22.2-14 September release) |
+|---------|---------------------------------------|
+| Ubuntu 20 | 20643eb1b112aad74af75ffdcac96fa4fa74a2ccb8778cf5498e79b4a4f44a27 |
+| Ubuntu 22 | 2d22f96005758f076af16d4e47da7407ec1a14a793460bf57eaeb41eb69bef19 |
+| Red Hat Enterprise Linux (RHEL) 8 | ece47e14ae1129ae1bd8924510139461819ca31084e540b1b159d74668265ba2 |
+| Red Hat Enterprise Linux (RHEL) 9 | 160238efe7246276dc7e62f9aa05544516e615f3c791241bd87a455588f156c3 |
+| Amazon Linux 2 | 41d177582ff6f237441d2a5f5c121e69de6b5578ada6877f8cc4084a538cf498 |
+
+## Known issues
+
+- RS131972: Creating an ACL that contains a line break in the Cluster Manager UI can cause shard migration to fail due to ACL errors.
+
+- RS155734: Endpoint availability metrics do not work as expected due to a calculation error.
+
+- RS156391: The `job_scheduler`'s memory usage can increase significantly when the diagnostic logging service is enabled.
+
+- RS153589: The metrics stream engine preview reports incorrect latency metrics.
+
+## Known limitations
+
+#### Upload modules before OS upgrade
+
+If the cluster contains any databases that use modules, you must upload module packages for the target OS version to a node in the existing cluster before you upgrade the cluster's operating system.
+
+See [Upgrade a cluster's operating system]({{}}) for detailed upgrade instructions.
+
+#### New Cluster Manager UI limitations
+
+The following legacy UI features are not yet available in the new Cluster Manager UI:
+
+- Purge an Active-Active instance.
+
+ Use [`crdb-cli crdb purge-instance`]({{< relref "/operate/rs/references/cli-utilities/crdb-cli/crdb/purge-instance" >}}) instead.
+
+- Search and export the log.
+
+#### RedisGraph prevents upgrade to RHEL 9
+
+You cannot upgrade from a prior RHEL version to RHEL 9 if the Redis Enterprise Software cluster contains a RedisGraph module, even if unused by any database. The [RedisGraph module has reached End-of-Life](https://redis.com/blog/redisgraph-eol/) and is completely unavailable in RHEL 9.
+
+#### Query results might include hash keys with lazily expired fields
+
+If one or more fields of a hash key expire after an `FT.SEARCH` or `FT.AGGREGATE` query begins, Redis does not account for these lazily expired fields. As a result, keys with expired fields might still be included in the query results, leading to potentially incorrect or inconsistent results.
+
+#### Active defragmentation does not stop mid-key for JSON
+
+Active defragmentation does not stop mid-key for JSON data. Large keys are defragmented in full, which might cause latency spikes.
+
+## Security
+
+#### Open source Redis security fixes compatibility
+
+As part of Redis's commitment to security, Redis Enterprise Software implements the latest [security fixes](https://github.com/redis/redis/releases) available with [open source Redis](https://github.com/redis/redis). Redis Enterprise Software has already included the fixes for the relevant CVEs.
+
+Some CVEs announced for open source Redis do not affect Redis Enterprise Software due to different or additional functionality available in Redis Enterprise Software that is not available in open source Redis.
+
+Redis Enterprise Software 7.22.2-14 supports open source Redis 7.4, 7.2, and 6.2. Below is the list of open source Redis CVEs fixed by version.
+
+Redis 7.4.x:
+
+- (CVE-2025-32023) An authenticated user can use a specially crafted string to trigger a stack/heap out-of-bounds write on HyperLogLog operations, which can lead to remote code execution.
+
+- (CVE-2025-21605) An unauthenticated client can cause unlimited growth of output buffers until the server runs out of memory or is terminated, which can lead to denial-of-service.
+
+Redis 7.2.x:
+
+- (CVE-2025-32023) An authenticated user can use a specially crafted string to trigger a stack/heap out-of-bounds write on HyperLogLog operations, which can lead to remote code execution.
+
+- (CVE-2025-21605) An unauthenticated client can cause unlimited growth of output buffers until the server runs out of memory or is terminated, which can lead to denial-of-service.
+
+- (CVE-2024-31449) An authenticated user may use a specially crafted Lua script to trigger a stack buffer overflow in the bit library, which may potentially lead to remote code execution.
+
+- (CVE-2024-31228) An authenticated user can trigger a denial-of-service by using specially crafted, long string match patterns on supported commands such as `KEYS`, `SCAN`, `PSUBSCRIBE`, `FUNCTION LIST`, `COMMAND LIST`, and ACL definitions. Matching of extremely long patterns may result in unbounded recursion, leading to stack overflow and process crashes.
+
+- (CVE-2023-41056) In some cases, Redis may incorrectly handle resizing of memory buffers, which can result in incorrect accounting of buffer sizes and lead to heap overflow and potential remote code execution.
+
+- (CVE-2023-41053) Redis does not correctly identify keys accessed by `SORT_RO` and, as a result, may grant users executing this command access to keys that are not explicitly authorized by the ACL configuration. (Redis 7.2.1)
+
+Redis 7.0.x:
+
+- (CVE-2024-31449) An authenticated user may use a specially crafted Lua script to trigger a stack buffer overflow in the bit library, which may potentially lead to remote code execution.
+
+- (CVE-2024-31228) An authenticated user can trigger a denial-of-service by using specially crafted, long string match patterns on supported commands such as `KEYS`, `SCAN`, `PSUBSCRIBE`, `FUNCTION LIST`, `COMMAND LIST`, and ACL definitions. Matching of extremely long patterns may result in unbounded recursion, leading to stack overflow and process crashes.
+
+- (CVE-2023-41056) In some cases, Redis may incorrectly handle resizing of memory buffers, which can result in incorrect accounting of buffer sizes and lead to heap overflow and potential remote code execution.
+
+- (CVE-2023-41053) Redis does not correctly identify keys accessed by `SORT_RO` and, as a result, may grant users executing this command access to keys that are not explicitly authorized by the ACL configuration. (Redis 7.0.13)
+
+- (CVE-2023-36824) Extracting key names from a command and a list of arguments may, in some cases, trigger a heap overflow and result in reading random heap memory, heap corruption, and potentially remote code execution. Specifically: using `COMMAND GETKEYS*` and validation of key names in ACL rules. (Redis 7.0.12)
+
+- (CVE-2023-28856) Authenticated users can use the `HINCRBYFLOAT` command to create an invalid hash field that will crash Redis on access. (Redis 7.0.11)
+
+- (CVE-2023-28425) Specially crafted `MSETNX` commands can lead to assertion and denial-of-service. (Redis 7.0.10)
+
+- (CVE-2023-25155) Specially crafted `SRANDMEMBER`, `ZRANDMEMBER`, and `HRANDFIELD` commands can trigger an integer overflow, resulting in a runtime assertion and termination of the Redis server process. (Redis 7.0.9)
+
+- (CVE-2023-22458) Integer overflow in the Redis `HRANDFIELD` and `ZRANDMEMBER` commands can lead to denial-of-service. (Redis 7.0.8)
+
+- (CVE-2022-36021) String matching commands (like `SCAN` or `KEYS`) with a specially crafted pattern to trigger a denial-of-service attack on Redis can cause it to hang and consume 100% CPU time. (Redis 7.0.9)
+
+- (CVE-2022-35977) Integer overflow in the Redis `SETRANGE` and `SORT`/`SORT_RO` commands can drive Redis to OOM panic. (Redis 7.0.8)
+
+- (CVE-2022-35951) Executing an `XAUTOCLAIM` command on a stream key in a specific state, with a specially crafted `COUNT` argument, may cause an integer overflow, a subsequent heap overflow, and potentially lead to remote code execution. The problem affects Redis versions 7.0.0 or newer. (Redis 7.0.5)
+
+- (CVE-2022-31144) A specially crafted `XAUTOCLAIM` command on a stream key in a specific state may result in heap overflow and potentially remote code execution. The problem affects Redis versions 7.0.0 or newer. (Redis 7.0.4)
+
+- (CVE-2022-24834) A specially crafted Lua script executing in Redis can trigger a heap overflow in the cjson and cmsgpack libraries, and result in heap corruption and potentially remote code execution. The problem exists in all versions of Redis with Lua scripting support, starting from 2.6, and affects only authenticated and authorized users. (Redis 7.0.12)
+
+- (CVE-2022-24736) An attacker attempting to load a specially crafted Lua script can cause NULL pointer dereference which will result in a crash of the `redis-server` process. This issue affects all versions of Redis. (Redis 7.0.0)
+
+- (CVE-2022-24735) By exploiting weaknesses in the Lua script execution environment, an attacker with access to Redis can inject Lua code that will execute with the (potentially higher) privileges of another Redis user. (Redis 7.0.0)
+
+Redis 6.2.x:
+
+- (CVE-2025-32023) An authenticated user can use a specially crafted string to trigger a stack/heap out-of-bounds write on HyperLogLog operations, which can lead to remote code execution.
+
+- (CVE-2025-21605) An unauthenticated client can cause unlimited growth of output buffers until the server runs out of memory or is terminated, which can lead to denial-of-service.
+
+- (CVE-2024-31449) An authenticated user may use a specially crafted Lua script to trigger a stack buffer overflow in the bit library, which may potentially lead to remote code execution.
+
+- (CVE-2024-31228) An authenticated user can trigger a denial-of-service by using specially crafted, long string match patterns on supported commands such as `KEYS`, `SCAN`, `PSUBSCRIBE`, `FUNCTION LIST`, `COMMAND LIST`, and ACL definitions. Matching of extremely long patterns may result in unbounded recursion, leading to stack overflow and process crashes.
+
+- (CVE-2023-28856) Authenticated users can use the `HINCRBYFLOAT` command to create an invalid hash field that will crash Redis on access. (Redis 6.2.12)
+
+- (CVE-2023-25155) Specially crafted `SRANDMEMBER`, `ZRANDMEMBER`, and `HRANDFIELD` commands can trigger an integer overflow, resulting in a runtime assertion and termination of the Redis server process. (Redis 6.2.11)
+
+- (CVE-2023-22458) Integer overflow in the Redis `HRANDFIELD` and `ZRANDMEMBER` commands can lead to denial-of-service. (Redis 6.2.9)
+
+- (CVE-2022-36021) String matching commands (like `SCAN` or `KEYS`) with a specially crafted pattern to trigger a denial-of-service attack on Redis can cause it to hang and consume 100% CPU time. (Redis 6.2.11)
+
+- (CVE-2022-35977) Integer overflow in the Redis `SETRANGE` and `SORT`/`SORT_RO` commands can drive Redis to OOM panic. (Redis 6.2.9)
+
+- (CVE-2022-24834) A specially crafted Lua script executing in Redis can trigger a heap overflow in the cjson and cmsgpack libraries, and result in heap corruption and potentially remote code execution. The problem exists in all versions of Redis with Lua scripting support, starting from 2.6, and affects only authenticated and authorized users. (Redis 6.2.13)
+
+- (CVE-2022-24736) An attacker attempting to load a specially crafted Lua script can cause NULL pointer dereference which will result in a crash of the `redis-server` process. This issue affects all versions of Redis. (Redis 6.2.7)
+
+- (CVE-2022-24735) By exploiting weaknesses in the Lua script execution environment, an attacker with access to Redis can inject Lua code that will execute with the (potentially higher) privileges of another Redis user. (Redis 6.2.7)
+
+- (CVE-2021-41099) Integer to heap buffer overflow handling certain string commands and network payloads, when `proto-max-bulk-len` is manually configured to a non-default, very large value. (Redis 6.2.6)
+
+- (CVE-2021-32762) Integer to heap buffer overflow issue in `redis-cli` and `redis-sentinel` parsing large multi-bulk replies on some older and less common platforms. (Redis 6.2.6)
+
+- (CVE-2021-32761) An integer overflow bug in Redis version 2.2 or newer can be exploited using the `BITFIELD` command to corrupt the heap and potentially result with remote code execution. (Redis 6.2.5)
+
+- (CVE-2021-32687) Integer to heap buffer overflow with intsets, when `set-max-intset-entries` is manually configured to a non-default, very large value. (Redis 6.2.6)
+
+- (CVE-2021-32675) Denial Of Service when processing RESP request payloads with a large number of elements on many connections. (Redis 6.2.6)
+
+- (CVE-2021-32672) Random heap reading issue with Lua Debugger. (Redis 6.2.6)
+
+- (CVE-2021-32628) Integer to heap buffer overflow handling ziplist-encoded data types, when configuring a large, non-default value for `hash-max-ziplist-entries`, `hash-max-ziplist-value`, `zset-max-ziplist-entries` or `zset-max-ziplist-value`. (Redis 6.2.6)
+
+- (CVE-2021-32627) Integer to heap buffer overflow issue with streams, when configuring a non-default, large value for `proto-max-bulk-len` and `client-query-buffer-limit`. (Redis 6.2.6)
+
+- (CVE-2021-32626) Specially crafted Lua scripts may result with Heap buffer overflow. (Redis 6.2.6)
+
+- (CVE-2021-32625) An integer overflow bug in Redis version 6.0 or newer can be exploited using the STRALGO LCS command to corrupt the heap and potentially result with remote code execution. This is a result of an incomplete fix by CVE-2021-29477. (Redis 6.2.4)
+
+- (CVE-2021-29478) An integer overflow bug in Redis 6.2 could be exploited to corrupt the heap and potentially result with remote code execution. The vulnerability involves changing the default set-max-intset-entries configuration value, creating a large set key that consists of integer values and using the COPY command to duplicate it. The integer overflow bug exists in all versions of Redis starting with 2.6, where it could result with a corrupted RDB or DUMP payload, but not exploited through COPY (which did not exist before 6.2). (Redis 6.2.3)
+
+- (CVE-2021-29477) An integer overflow bug in Redis version 6.0 or newer could be exploited using the STRALGO LCS command to corrupt the heap and potentially result in remote code execution. The integer overflow bug exists in all versions of Redis starting with 6.0. (Redis 6.2.3)
diff --git a/content/operate/rs/security/certificates/_index.md b/content/operate/rs/security/certificates/_index.md
index a7e9c17318..7bb5c12c06 100644
--- a/content/operate/rs/security/certificates/_index.md
+++ b/content/operate/rs/security/certificates/_index.md
@@ -22,7 +22,9 @@ Here's the list of supported certificates that create secure, encrypted connecti
| Certificate name | Autogenerated | Description |
|------------------|:---------------:|-------------|
| `api` | ✅ | Encrypts [REST API]({{< relref "/operate/rs/references/rest-api/" >}}) requests and responses. |
+| `ccs_internode_encryption` | ✅ | Control plane [internode encryption]({{< relref "/operate/rs/security/encryption/internode-encryption" >}}). Encrypts internal traffic for cluster management. |
| `cm` | ✅ | Secures connections to the Redis Enterprise Cluster Manager UI. |
+| `data_internode_encryption` | ✅ | Data plane [internode encryption]({{< relref "/operate/rs/security/encryption/internode-encryption" >}}). Encrypts internal data traffic between shards and the data management controller (DMC). |
| `ldap_client` | :x: | Secures connections between LDAP clients and LDAP servers. |
| `metrics_exporter` | ✅ | Sends Redis Enterprise metrics to external [monitoring tools]({{< relref "/operate/rs/monitoring/" >}}) over a secure connection. |
| `mtls_trusted_ca` | :x: | Required to enable certificate-based authentication for secure, passwordless access to the REST API. |
diff --git a/content/operate/rs/security/certificates/certificate-based-authentication.md b/content/operate/rs/security/certificates/certificate-based-authentication.md
index 39b0f72006..f35fef3562 100644
--- a/content/operate/rs/security/certificates/certificate-based-authentication.md
+++ b/content/operate/rs/security/certificates/certificate-based-authentication.md
@@ -26,7 +26,23 @@ To set up certificate-based authentication:
### Add mtls_trusted_ca certificate {#add-cert}
-Add a trusted CA certificate `mtls_trusted_ca` to the cluster using an [update cluster certificate]({{}}) request:
+To add a trusted CA certificate `mtls_trusted_ca` to the cluster, use an [update cluster certificates]({{}}) request.
+
+For Redis Enterprise Software versions 7.22.2 and later, use:
+
+```sh
+PUT /v1/cluster/certificates
+{
+ "certificates": [
+ {
+ "name": "mtls_trusted_ca",
+ "certificate": ""
+ }
+ ]
+}
+```
+
+For Redis Enterprise Software versions 7.22.0 and earlier, use:
```sh
PUT /v1/cluster/update_cert
diff --git a/content/operate/rs/security/certificates/updating-certificates.md b/content/operate/rs/security/certificates/updating-certificates.md
index aac5195b95..3d42a11cc6 100644
--- a/content/operate/rs/security/certificates/updating-certificates.md
+++ b/content/operate/rs/security/certificates/updating-certificates.md
@@ -16,31 +16,27 @@ When you update the certificates, the new certificate replaces the same certific
## How to update certificates
-You can use the [`rladmin`]({{< relref "/operate/rs/references/cli-utilities/rladmin" >}}) command-line interface (CLI) or the [REST API]({{< relref "/operate/rs/references/rest-api" >}}) to update certificates. The Cluster Manager UI lets you update proxy and syncer certificates on the **Cluster > Security > Certificates** screen.
+You can use the [`rladmin`]({{< relref "/operate/rs/references/cli-utilities/rladmin" >}}) command-line interface (CLI) or the [REST API]({{< relref "/operate/rs/references/rest-api" >}}) to update certificates. The Cluster Manager UI lets you update proxy, syncer, and internode encryption certificates on the **Cluster > Security > Certificates** screen.
-The new certificates are used the next time the clients connect to the database.
-
-When you upgrade Redis Enterprise Software, the upgrade process copies the certificates that are on the first upgraded node to all of the nodes in the cluster.
-
-{{}}
-Don't manually overwrite the files located in `/etc/opt/redislabs`. Instead, upload new certificates to a temporary location on one of the cluster nodes, such as the `/tmp` directory.
-{{}}
-
-### Use the Cluster Manager UI
+{{< multitabs id="update-certs"
+tab1="Cluster Manager UI"
+tab2="rladmin"
+tab3="REST API" >}}
To replace proxy or syncer certificates using the Cluster Manager UI:
1. Go to **Cluster > Security > Certificates**.
1. Expand the section for the certificate you want to update:
+ - For internode encryption certificates, expand **Internode encryption certificates**.
- For the proxy certificate, expand **Server authentication**.
- For the syncer certificate, expand **Replica Of and Active-Active authentication**.
- {{}}
+
1. Click **Replace Certificate** to open the dialog.
- {{}}
+
1. Upload the key file.
@@ -48,7 +44,7 @@ To replace proxy or syncer certificates using the Cluster Manager UI:
1. Click **Save**.
-### Use the CLI
+-tab-sep-
To replace certificates with the `rladmin` CLI, run the [`cluster certificate set`]({{< relref "/operate/rs/references/cli-utilities/rladmin/cluster/certificate" >}}) command:
@@ -68,12 +64,29 @@ For example, to replace the Cluster Manager UI (`cm`) certificate with the priva
rladmin cluster certificate set cm certificate_file cluster.pem key_file key.pem
```
-### Use the REST API
+-tab-sep-
+
+To replace a certificate using the REST API, use an [update cluster certificates]({{}}) request.
+
+For Redis Enterprise Software versions 7.22.2 and later, use:
+
+```sh
+PUT https://:/v1/cluster/certificates
+{
+ "certificates": [
+ {
+ "name": "",
+ "certificate": "",
+ "key": ""
+ }
+ ]
+}
+```
-To replace a certificate using the REST API, use [`PUT /v1/cluster/update_cert`]({{< relref "/operate/rs/references/rest-api/requests/cluster/certificates#put-cluster-update_cert" >}}):
+For Redis Enterprise Software versions 7.22.0 and earlier, use:
```sh
-PUT https://[host][:port]/v1/cluster/update_cert
+PUT https://:/v1/cluster/update_cert
'{ "name": "", "key": "", "certificate": "" }'
```
@@ -90,6 +103,16 @@ Replace the following variables with your own values:
- `` - The contents of the \*\_cert.pem file
+{{< /multitabs >}}
+
+New proxy and syncer certificates are used the next time clients connect to the database. For internode encryption certificates, the new certificates are used after they are replaced on all existing nodes in the cluster.
+
+When you add a new node to the cluster, the certificates are automatically copied to the new node.
+
+{{}}
+Don't manually overwrite the files located in `/etc/opt/redislabs`. Instead, upload new certificates to a temporary location on one of the cluster nodes, such as the `/tmp` directory.
+{{}}
+
## Replica Of database certificates
This section describes how to update certificates for Replica Of databases.
diff --git a/content/operate/rs/security/encryption/internode-encryption.md b/content/operate/rs/security/encryption/internode-encryption.md
index f315bc12db..33c0850756 100644
--- a/content/operate/rs/security/encryption/internode-encryption.md
+++ b/content/operate/rs/security/encryption/internode-encryption.md
@@ -87,7 +87,11 @@ To enable internode encryption for new databases by default, use one of the foll
{ "data_internode_encryption": true }
```
-## Encryption ciphers and settings
+## Self-signed certificates
+
+By default, Redis Enterprise Software uses self-signed certificates for internode encryption. These certificates are automatically generated, managed, and rotated by the system.
+
+### Encryption ciphers and settings
To encrypt internode communications, Redis Enterprise Software uses TLS 1.2 and the following cipher suites:
@@ -103,7 +107,7 @@ The TLS layer determines which TLS version to use.
No configurable settings are exposed; internode encryption is used internally within a cluster and not exposed to any outside service.
-## Certificate authority and rotation
+### Certificate authority and rotation
Starting with v6.2.4, internode communication is managed, in part, by two certificates: one for the control plane and one for the data plane. These certificates are signed by a private certificate authority (CA). The CA is not exposed outside of the cluster, so it cannot be accessed by external processes or services. In addition, each cluster generates a unique CA that is not used anywhere else.
@@ -118,3 +122,120 @@ You can use the Redis Enterprise Software REST API to rotate certificates manual
``` rest
POST /v1/cluster/certificates/rotate
```
+
+## Customer-provided certificates
+
+Instead of using Redis Enterprise Software's self-signed certificates for internode encryption, you can provide certificates generated by your Certificate Authority (CA).
+
+### Certificate requirements
+
+Customer-provided internode encryption certificates must meet the following requirements:
+
+- Certificates must be in PEM format.
+
+- Certificates must contain the certificate chain and the leaf certificate.
+
+- Certificates must use an RSA key. Using other key types, such as ECDSA or EdDSA, might prevent internode encryption from working.
+
+### Upload customer-provided certificates
+
+You can upload either:
+
+- One certificate for both data plane internode encryption (DPINE) and control plane internode encryption (CPINE).
+
+- Two separate certificates: one for DPINE and one for CPINE.
+
+To upload internode encryption certificates, use one of the following methods:
+
+{{< multitabs id="upload-ine-certs"
+tab1="Cluster Manager UI"
+tab2="rladmin"
+tab3="REST API" >}}
+
+1. In the Cluster Manager UI, go to **Cluster > Security > Certificates**.
+
+1. Expand the **Internode encryption certificates** section.
+
+1. Click **Replace certificates**.
+
+1. In the **Internode encryption certificates** panel, select one of the following options:
+
+ - Use the same certificate for data and control plane internode encryption
+
+ - Use separate certificates for data and control plane internode encryption
+
+1. For each certificate and key, click **Upload** and use the file browser to select the relevant PEM file.
+
+1. Click **Save & Rotate**.
+
+-tab-sep-
+
+To use the same certificate for data and control plane internode encryption, run the following [`rladmin cluster certificate`]({{< relref "/operate/rs/references/cli-utilities/rladmin/cluster/certificate#cluster-certificate-set-internal" >}}) command:
+
+```sh
+rladmin cluster certificate set internal dpine_certificate_file dpine_key_file cpine_certificate_file cpine_key_file
+```
+
+To use separate certificates for data and control plane internode encryption, run the following [`rladmin cluster certificate`]({{< relref "/operate/rs/references/cli-utilities/rladmin/cluster/certificate#cluster-certificate-set-internal" >}}) command:
+
+```sh
+rladmin cluster certificate set internal dpine_certificate_file dpine_key_file cpine_certificate_file cpine_key_file
+```
+
+-tab-sep-
+
+To use the same certificate for data and control plane internode encryption, send a [`PUT /v1/cluster/certificates`]({{< relref "/operate/rs/references/rest-api/requests/cluster/certificates#put-cluster-certificates" >}}) request:
+
+```sh
+PUT https://:/v1/cluster/certificates
+{
+ "certificates": [
+ {
+ "name": "ccs_internode_encryption",
+ "key": "",
+ "certificate": ""
+ },
+ {
+ "name": "data_internode_encryption",
+ "key": "",
+ "certificate": ""
+ }
+ ]
+}
+```
+
+To use separate certificates for data and control plane internode encryption, send a [`PUT /v1/cluster/certificates`]({{< relref "/operate/rs/references/rest-api/requests/cluster/certificates#put-cluster-certificates" >}}) request:
+
+```sh
+PUT https://:/v1/cluster/certificates
+{
+ "certificates": [
+ {
+ "name": "ccs_internode_encryption",
+ "key": "",
+ "certificate": ""
+ },
+ {
+ "name": "data_internode_encryption",
+ "key": "",
+ "certificate": ""
+ }
+ ]
+}
+```
+
+{{< /multitabs >}}
+
+
+### Certificate expiration and rotation
+
+Customer-provided internode encryption certificates are not rotated automatically. To prevent possible issues with cluster and database unavailability caused by expired internode encryption certificates:
+
+- You should monitor the certificates' expiration dates and renew them before they expire.
+
+- In case you do not renew the customer-managed certificates before they expire, Redis Enterprise Software automatically replaces them with self-signed certificates 5 days before expiration. You can upload new customer-provided certificates to replace these certificates anytime.
+
+### Performance recommendations
+
+For optimal performance with customer-provided certificates, follow the same recommendations as for self-signed certificates detailed in the [Encryption ciphers and settings](#encryption-ciphers-and-settings) section.
+
diff --git a/static/images/rs/screenshots/cluster/security-certs-with-ine-expand-proxy-cert.png b/static/images/rs/screenshots/cluster/security-certs-with-ine-expand-proxy-cert.png
new file mode 100644
index 0000000000..5c3c41ea3f
Binary files /dev/null and b/static/images/rs/screenshots/cluster/security-certs-with-ine-expand-proxy-cert.png differ
diff --git a/static/js/index.js b/static/js/index.js
index fd0c66ffd0..23a1ef2b2d 100644
--- a/static/js/index.js
+++ b/static/js/index.js
@@ -184,4 +184,17 @@ const mobileMenu = (() => {
document.addEventListener('click', clickHandler, false)
document.addEventListener('keydown', keyHandler, false)
-})()
\ No newline at end of file
+})()
+
+// Simple click-to-open for standalone images
+document.addEventListener('click', function(e) {
+ // Check if clicked element is a standalone img (not inside an anchor, not image-card, not no-click)
+ if (e.target.tagName === 'IMG' &&
+ !e.target.closest('a') &&
+ !e.target.classList.contains('image-card-img') &&
+ !e.target.src.includes('#no-click')) {
+
+ // Open image in same tab, just like clicking a regular link
+ window.location.href = e.target.src
+ }
+})
\ No newline at end of file