Skip to content

Commit b9445fd

Browse files
authored
Move own CA transport layer mtls guidance to security docs (#3932)
1 parent 8ce8e9d commit b9445fd

File tree

9 files changed

+123
-37
lines changed

9 files changed

+123
-37
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{{es}} transport security and TLS certificates are automatically configured by the operator, but you can still [customize its service and CA certificates](/deploy-manage/security/k8s-transport-settings.md).
1+
{{es}} transport security and TLS certificates are automatically configured by the operator, but you can still [customize the {{es}} transport service, certificate authority, and certificates](/deploy-manage/security/k8s-transport-settings.md).
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
:::{warning}
2+
Transport connections between {{es}} nodes are security-critical and you must protect them carefully. Malicious actors who can observe or interfere with node-to-node transport traffic can read or modify cluster data. A malicious actor who can establish a transport connection might be able to invoke system-internal APIs, including APIs that read or modify cluster data.
3+
4+
If you choose to issue node transport certificates using an external CA, then carefully review [](/deploy-manage/security/external-ca-transport.md) to ensure that your certificates meet the security requirements for transport connections.
5+
:::

deploy-manage/security/different-ca.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ products:
1212

1313
# Different CA [update-node-certs-different]
1414

15+
If you have to trust a new CA from your organization, or you need to generate a new CA yourself, instruct your nodes to trust the new CA and then use this new CA to sign the new node certificates.
16+
17+
:::{include} ./_snippets/own-ca-warning.md
18+
:::
1519

16-
If you have to trust a new CA from your organization, or you need to generate a new CA yourself, use this new CA to sign the new node certificates and instruct your nodes to trust the new CA.
1720

1821
## Generate a new certificate for the transport layer [node-certs-different-transport]
1922

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
applies_to:
3+
deployment:
4+
self:
5+
eck:
6+
products:
7+
- id: elasticsearch
8+
navigation_title: External CA for TLS
9+
---
10+
11+
# Using an external certificate authority to secure node-to-node connections
12+
13+
By default, {{es}} uses mutual TLS (mTLS) to secure node-to-node transport connections. Mutual TLS means that data is encrypted in transit, ensuring confidentiality and integrity, and also that both nodes in a connection must present a valid certificate to the other node when establishing the connection. Each node requires that certificates be issued by a trusted certificate authority (CA), ensuring that only authorized nodes can connect. Configure trusted certificate authorities using settings in the [`xpack.security.transport.ssl.*`](elasticsearch://reference/elasticsearch/configuration-reference/security-settings.md#transport-tls-ssl-settings) namespace, such as `xpack.security.transport.ssl.certificate_authorities` and `xpack.security.transport.ssl.truststore.path`.
14+
15+
{{es}} comes with a built-in tool called [`elasticsearch-certutil`](/deploy-manage/security/set-up-basic-security.md), which you can use to create and manage a dedicated certificate authority for each of your clusters, and to issue TLS certificates from this certificate authority. If you prefer not to use `elasticsearch-certutil`, then you must obtain the certificates from another certificate authority using standard TLS tools. Any certificate authority that is not managed using `elasticsearch-certutil` is referred to as an "external certificate authority" or "external CA".
16+
17+
This page explains the requirements and best practices to ensure that certificates generated using an external CA work correctly and protect your cluster properly.
18+
19+
::::{warning}
20+
Transport connections between {{es}} nodes are security-critical and you must protect them carefully. Malicious actors who can observe or interfere with unencrypted node-to-node transport traffic can read or modify cluster data. A malicious actor who can establish a transport connection might be able to invoke system-internal APIs, including APIs that read or modify cluster data.
21+
::::
22+
23+
## Transport mTLS certificate requirements for external CAs
24+
25+
Obtain your transport certificates from a certificate authority that only issues certificates to {{es}} nodes permitted to connect to your cluster. Do not use a public certificate authority or an organization-wide private certificate authority, because these issue certificates to entities beyond your authorized cluster nodes. Use a dedicated private certificate authority for each {{es}} cluster.
26+
27+
Certificates used for transport mTLS must either have no Extended Key Usage extension, or include both `clientAuth` and `serverAuth` values in the extension. Public certificate authorities typically omit the `clientAuth` value in the Extended Key Usage extension, making them unsuitable for mTLS.
28+
29+
### Transport certificates vs. HTTP certificates
30+
31+
Transport certificates have different security requirements than [HTTP certificates](/deploy-manage/security/secure-cluster-communications.md#encrypt-http-communication). HTTP server certificates don't require the `clientAuth` Extended Key Usage extension because they are used solely for server authentication, regardless of whether mTLS is enabled. In practice, HTTP connections don't typically use mTLS because HTTP has its own authentication mechanisms.
32+
33+
HTTP certificates can come from public or organization-wide certificate authorities, while transport certificates should use a cluster-specific private CA. In most cases, you should not use the same certificate for both HTTP and transport connections.
34+
35+
## Turning off mTLS for transport connections [turn-off-mtls]
36+
37+
If your environment has some other way to prevent unauthorized node-to-node connections, you can disable mTLS by setting `xpack.security.transport.ssl.client_authentication: none`. You can still use non-mutual TLS to ensure the confidentiality and integrity of node-to-node traffic by setting `xpack.security.transport.ssl.enabled: true`. With non-mutual TLS, transport certificates don't require the `clientAuth` value in the Extended Key Usage extension.
38+
39+
::::{warning}
40+
Turning off mTLS by setting `xpack.security.transport.ssl.client_authentication` to `optional` or `none` allows anyone with network access to establish transport connections. Malicious actors can use these connections to invoke system-internal APIs that might read or modify cluster data. Use mTLS to
41+
protect your node-to-node transport connections unless you are absolutely certain that unauthorized network access to these nodes cannot occur.
42+
::::

deploy-manage/security/k8s-transport-settings.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ products:
1010

1111
# Manage transport certificates on ECK [k8s-transport-settings]
1212

13-
The transport module in {{es}} is used for internal communication between nodes within the cluster as well as communication between remote clusters. Check the [{{es}} documentation](elasticsearch://reference/elasticsearch/configuration-reference/networking-settings.md) for details. For customization options of the HTTP layer, check [Access services](../deploy/cloud-on-k8s/accessing-services.md) and [HTTP TLS certificates](./k8s-https-settings.md).
13+
The transport module in {{es}} is used for internal communication between nodes within the cluster as well as communication between remote clusters. For more information, refer to [Networking settings](elasticsearch://reference/elasticsearch/configuration-reference/networking-settings.md). For customization options of the HTTP layer, refer to [Access services](../deploy/cloud-on-k8s/accessing-services.md) and [HTTP TLS certificates](./k8s-https-settings.md).
14+
15+
:::{include} ./_snippets/own-ca-warning.md
16+
:::
1417

1518
## Customize the Transport Service [k8s_customize_the_transport_service]
1619

deploy-manage/security/same-ca.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@ products:
1616

1717
This procedure assumes that the you have access to the CA certificate and key that was originally generated (or otherwise held by your organization) and used to sign the node certificates currently in use. It also assumes that the clients connecting to {{es}} on the HTTP layer are configured to trust the CA certificate.
1818

19-
If you have access to the CA used to sign your existing certificates, you only need to replace the certificates and keys for each node in your cluster. If you replace your existing certificates and keys on each node and use the same filenames, {{es}} reloads the files starts using the new certificates and keys.
19+
If you have access to the certificate authority (CA) used to sign your existing certificates, you only need to replace the certificates and keys for each node in your cluster. If you replace your existing certificates and keys on each node and use the same filenames, {{es}} reloads the files starts using the new certificates and keys.
2020

2121
You don’t have to restart each node, but doing so forces new TLS connections and is [a recommended practice](updating-certificates.md#use-rolling-restarts) when updating certificates. Therefore, the following steps include a node restart after updating each certificate.
2222

2323
The following steps provide instructions for generating new node certificates and keys for both the transport layer and the HTTP layer. You might only need to replace one of these layer’s certificates depending on which of your certificates are expiring.
2424

25+
:::{include} ./_snippets/own-ca-warning.md
26+
:::
27+
2528
::::{important}
2629
:name: cert-password-updates
2730

deploy-manage/security/secure-cluster-communications.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ mapped_pages:
44
- https://www.elastic.co/guide/en/elasticsearch/reference/current/security-basic-setup.html
55
- https://www.elastic.co/guide/en/kibana/current/elasticsearch-mutual-tls.html
66
applies_to:
7+
serverless:
78
deployment:
89
self:
910
eck:
1011
ece:
12+
ess:
1113
products:
1214
- id: elasticsearch
1315
- id: kibana
@@ -57,36 +59,43 @@ Securing this layer prevents unauthorized nodes from joining your cluster and pr
5759

5860
The way that transport layer security is managed depends on your deployment type:
5961

60-
::::{tab-set}
62+
:::::{tab-set}
6163
:group: deployments
6264

63-
:::{tab-item} ECH and Serverless
65+
::::{tab-item} ECH and Serverless
6466
:sync: ech
6567
{{es}} transport security is fully managed by Elastic, and no configuration is required.
66-
:::
68+
::::
6769

68-
:::{tab-item} ECE
70+
::::{tab-item} ECE
6971
:sync: ece
70-
{{es}} transport security is fully managed by {{ece}} platform, and no configuration is required.
71-
:::
72+
{{es}} transport security is fully managed by the {{ece}} platform, and no configuration is required.
73+
::::
7274

73-
:::{tab-item} ECK
75+
::::{tab-item} ECK
7476
:sync: eck
7577

7678
:::{include} ./_snippets/eck-transport.md
7779
:::
7880

81+
:::{include} ./_snippets/own-ca-warning.md
7982
:::
8083

81-
:::{tab-item} Self-managed
84+
::::
85+
86+
::::{tab-item} Self-managed
8287
:sync: self
8388
{{es}} transport security can be [automatically configured](self-auto-setup.md), or manually set up by following the steps in [](set-up-basic-security.md).
8489

8590
For additional TLS configuration options, refer to [](./self-tls.md).
91+
92+
:::{include} ./_snippets/own-ca-warning.md
8693
:::
8794

8895
::::
8996

97+
:::::
98+
9099
### HTTP layer security [encrypt-http-communication]
91100

92101
The HTTP layer includes the service endpoints exposed by both {{es}} and {{kib}}, supporting communications such as REST API requests, browser access to {{kib}}, and {{kib}}’s own traffic to {{es}}. Securing these endpoints helps prevent unauthorized access and protects sensitive data in transit.

0 commit comments

Comments
 (0)