Skip to content

Commit 50a5b1d

Browse files
Documentation for Support TLS 1.3 ciphers in load balancer configuration
Signed-off-by: Aishwarya2001A <aaishwar@progress.com>
1 parent 4abbca2 commit 50a5b1d

File tree

3 files changed

+301
-2
lines changed

3 files changed

+301
-2
lines changed

components/docs-chef-io/content/automate/chef_infra_in_chef_automate.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ The list of parameters are as follows:
2121
| Chef Infra Server Key | Default Values In Automate (Having Infra Server Package) | Default Values In Automate HA | Automate Configuration |
2222
| ----------------------------------------------- | ----------------------------------------- | ----------------------------------- | ---------------------------------------------------------- |
2323
| nginx['client_max_body_size'] | 250 | 250 | ```[cs_nginx.v1.sys.ngx.http]```<br>```client_max_body_size="250"``` |
24-
| nginx['ssl_protocols'] | TLSv1.2 | TLSv1.2 | ```[cs_nginx.v1.sys.ngx.http]```<br>```ssl_protocols="TLSv1.2"``` |
24+
| nginx['ssl_protocols'] | TLSv1.2 TLSv1.3 | TLSv1.2 TLSv1.3 | ```[cs_nginx.v1.sys.ngx.http]```<br>```ssl_protocols="TLSv1.2 TLSv1.3"```<br>**Note:** Supports TLS 1.2 and 1.3. SSLv2, SSLv3, TLSv1, and TLSv1.1 are deprecated. |
2525
| nginx['worker_connections'] | 10240 | 10240 | ```[cs_nginx.v1.sys.ngx.events]```<br>```worker_connections=10240``` |
2626
| nginx['worker_processes'] | 4 | 2 | ```[cs_nginx.v1.sys.ngx.main]```<br>```worker_processes=4``` |
2727
| nginx['gzip'] | ON |ON |```[cs_nginz.v1.sys.ngx.http]```<br>```gzip= "on"``` |
@@ -31,6 +31,7 @@ The list of parameters are as follows:
3131
| nginx['keepalive_timeout'] |65 |65 |```[cs_nginz.v1.sys.ngx.http]```<br>```keepalive_timeout=65``` |
3232
| nginx['sendfile'] |ON |ON |```[cs_nginz.v1.sys.ngx.http]```<br>```sendfile ="on"``` |
3333
| nginx['ssl_ciphers'] | Refer [nginx[ssl_ciphers]](https://docs.chef.io/server/config_rb_server/#nginx-ssl-protocols-14) | Refer [nginx[ssl_ciphers]](https://docs.chef.io/server/config_rb_server/#nginx-ssl-protocols-14) |```[cs_nginz.v1.sys.ngx.http]```<br>```ssl_ciphers=""``` |
34+
| nginx['ssl_ciphersuites'] | Refer [nginx[ssl_ciphersuites]](https://docs.chef.io/automate/configuration/#tlsssl-protocol-and-cipher-configuration) | Refer [nginx[ssl_ciphersuites]](https://docs.chef.io/automate/configuration/#tlsssl-protocol-and-cipher-configuration) |```[cs_nginz.v1.sys.ngx.http]```<br>```ssl_ciphersuites=""```<br>**Note:** TLS 1.3 cipher suites only. |
3435
| opscode_erchef['s3_url_ttl'] | 900 | 28800 | ```[erchef.v1.sys.api]```<br>```s3_url_ttl=900``` |
3536
| opscode_erchef['auth_skew'] | 900 | 900 | ```[erchef.v1.sys.api]```<br>```auth_skew=900``` |
3637
| opscode_erchef['authz_fanout'] | 20 | 20 | ```[erchef.v1.sys.authz]```<br>```fanout=20``` |

components/docs-chef-io/content/automate/configuration.md

Lines changed: 170 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,8 @@ Uncomment and change settings as needed, and then run `chef-automate config patc
341341
# large_client_header_buffers_number = 4
342342
# sendfile = "on"
343343
# ssl_ciphers = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!aNULL:!eNULL:!EXPORT:AES256-GCM-SHA384"
344-
# ssl_protocols = "TLSv1.2"
344+
# ssl_ciphersuites = "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
345+
# ssl_protocols = "TLSv1.2 TLSv1.3"
345346
# tcp_nodelay = "on"
346347
# tcp_nopush = "on"
347348
# enable_csp_header = false
@@ -360,6 +361,174 @@ Uncomment and change settings as needed, and then run `chef-automate config patc
360361
# key = "-----BEGIN RSA PRIVATE KEY-----\n<your load balancer private key>\n-----END RSA PRIVATE KEY-----\n"
361362
```
362363

364+
#### TLS/SSL Protocol and Cipher Configuration
365+
366+
Chef Automate supports TLS 1.2 and TLS 1.3 protocols for secure communication. You can configure both protocols and their respective ciphers.
367+
368+
##### Supported TLS Versions
369+
370+
- **TLSv1.2** (Recommended for compatibility)
371+
- **TLSv1.3** (Recommended for maximum security)
372+
373+
{{< warning >}}
374+
**Deprecated Protocols**: SSLv2, SSLv3, TLSv1, and TLSv1.1 are deprecated and non-functional. These protocols are not supported by modern OpenSSL versions (1.1.0+) and will not work even if configured. Use only TLSv1.2 and TLSv1.3.
375+
{{< /warning >}}
376+
377+
##### TLS 1.3 Cipher Suites
378+
379+
TLS 1.3 uses the `ssl_ciphersuites` directive (separate from TLS 1.2's `ssl_ciphers`). When TLS 1.3 is enabled, you must specify cipher suites.
380+
381+
**Default TLS 1.3 Cipher Suites:**
382+
383+
```toml
384+
[load_balancer.v1.sys.ngx.http]
385+
ssl_protocols = "TLSv1.3"
386+
ssl_ciphersuites = "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
387+
```
388+
389+
**Supported TLS 1.3 Cipher Suites:**
390+
391+
- `TLS_AES_256_GCM_SHA384` - AES-256 with GCM mode (most secure)
392+
- `TLS_CHACHA20_POLY1305_SHA256` - ChaCha20-Poly1305 (optimized for mobile devices)
393+
- `TLS_AES_128_GCM_SHA256` - AES-128 with GCM mode (faster performance)
394+
395+
{{< note >}}
396+
TLS 1.3 cipher suites use underscores in their names (e.g., `TLS_AES_256_GCM_SHA384`) and are separated by colons. Do not use hyphens or spaces.
397+
{{< /note >}}
398+
399+
##### TLS 1.2 Ciphers
400+
401+
TLS 1.2 uses the `ssl_ciphers` directive (separate from TLS 1.3's `ssl_ciphersuites`).
402+
403+
**Default TLS 1.2 Ciphers:**
404+
405+
```toml
406+
[load_balancer.v1.sys.ngx.http]
407+
ssl_protocols = "TLSv1.2"
408+
ssl_ciphers = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"
409+
```
410+
411+
{{< note >}}
412+
TLS 1.2 ciphers use hyphens in their names (e.g., `ECDHE-RSA-AES256-GCM-SHA384`) and are separated by colons. Do not use semicolons or spaces.
413+
{{< /note >}}
414+
415+
##### Dual TLS 1.2 and TLS 1.3 Configuration (Recommended)
416+
417+
For maximum compatibility and security, enable both protocols:
418+
419+
```toml
420+
[load_balancer.v1.sys.ngx.http]
421+
ssl_protocols = "TLSv1.2 TLSv1.3"
422+
ssl_ciphers = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305"
423+
ssl_ciphersuites = "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
424+
```
425+
426+
Then run `chef-automate config patch </path/to/your-file.toml>` to deploy your change.
427+
428+
##### Configuration Examples
429+
430+
**Example 1: TLS 1.3 Only (Maximum Security)**
431+
432+
```toml
433+
[load_balancer.v1.sys.ngx.http]
434+
ssl_protocols = "TLSv1.3"
435+
ssl_ciphersuites = "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"
436+
```
437+
438+
**Example 2: TLS 1.2 Only (Legacy Compatibility)**
439+
440+
```toml
441+
[load_balancer.v1.sys.ngx.http]
442+
ssl_protocols = "TLSv1.2"
443+
ssl_ciphers = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"
444+
```
445+
446+
**Example 3: Both Protocols (Production - Recommended)**
447+
448+
```toml
449+
[load_balancer.v1.sys.ngx.http]
450+
ssl_protocols = "TLSv1.2 TLSv1.3"
451+
ssl_ciphers = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305"
452+
ssl_ciphersuites = "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
453+
```
454+
455+
##### Configuration Validation
456+
457+
Chef Automate validates TLS/SSL configuration and provides error messages for common issues:
458+
459+
**Common Configuration Errors:**
460+
461+
1. **Empty ciphers when TLS 1.2 is enabled:**
462+
```
463+
Error: ssl_ciphers cannot be empty when TLSv1.2 is enabled
464+
```
465+
466+
2. **Empty cipher suites when TLS 1.3 is enabled:**
467+
```
468+
Error: ssl_ciphersuites cannot be empty when TLSv1.3 is enabled
469+
```
470+
471+
3. **Invalid protocol format:**
472+
```
473+
Error: 'TLS1.3' contains invalid protocol versions. Use 'TLSv1.3'
474+
```
475+
476+
4. **Invalid separator in ciphers:**
477+
```
478+
Error: ssl_ciphers should not contain spaces. Use colons (:) to separate cipher names
479+
```
480+
481+
5. **Wrong format for TLS 1.3 cipher suites:**
482+
```
483+
Error: 'TLS-AES-256-GCM-SHA384' contains invalid characters. Use underscores: TLS_AES_256_GCM_SHA384
484+
```
485+
486+
**Configuration Warnings:**
487+
488+
Chef Automate issues warnings for suboptimal configurations:
489+
490+
1. **Deprecated protocols configured:**
491+
```
492+
WARNING: ssl_protocols 'TLSv1.1 TLSv1.2' contains deprecated and non-functional protocol versions (SSLv2, SSLv3, TLSv1, TLSv1.1). These protocols are not supported by OpenSSL 1.1.0+ and will not work. Use only TLSv1.2 and TLSv1.3.
493+
```
494+
495+
2. **Cipher suites configured without TLS 1.3:**
496+
```
497+
WARNING: ssl_ciphersuites is configured, but ssl_protocols does not include TLSv1.3. The ssl_ciphersuites directive will be ignored by NGINX.
498+
```
499+
500+
3. **TLS 1.2 ciphers configured without TLS 1.2:**
501+
```
502+
WARNING: ssl_ciphers is configured, but ssl_protocols does not include TLSv1.2. The ssl_ciphers directive will be ignored by NGINX.
503+
```
504+
505+
##### Testing TLS Configuration
506+
507+
After applying TLS configuration, verify it's working correctly:
508+
509+
**Test TLS 1.3 connection:**
510+
511+
```bash
512+
openssl s_client -connect your-automate-fqdn:443 -tls1_3
513+
```
514+
515+
**Test TLS 1.2 connection:**
516+
517+
```bash
518+
openssl s_client -connect your-automate-fqdn:443 -tls1_2
519+
```
520+
521+
**Check negotiated cipher:**
522+
523+
```bash
524+
openssl s_client -connect your-automate-fqdn:443 -tls1_3 | grep "Cipher"
525+
```
526+
527+
Expected output for TLS 1.3:
528+
```
529+
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
530+
```
531+
363532
#### Buffer Size
364533

365534
Configure message buffer ingest size:

components/docs-chef-io/content/automate/security_best_practices.md

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,135 @@ gh_repo = "automate"
1212
weight = 50
1313
+++
1414

15+
## TLS/SSL Security Best Practices
16+
17+
### Use Modern TLS Protocols
18+
19+
Chef Automate supports TLS 1.2 and TLS 1.3. For optimal security, use the following configuration:
20+
21+
#### Recommended Configuration (Production)
22+
23+
```toml
24+
[load_balancer.v1.sys.ngx.http]
25+
ssl_protocols = "TLSv1.2 TLSv1.3"
26+
ssl_ciphers = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256"
27+
ssl_ciphersuites = "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
28+
```
29+
30+
This configuration:
31+
- Supports both TLS 1.2 (for legacy clients) and TLS 1.3 (for modern clients)
32+
- Prioritizes strongest ciphers
33+
- Provides forward secrecy with ECDHE key exchange
34+
- Disables weak and deprecated protocols
35+
36+
#### High Security Configuration (TLS 1.3 Only)
37+
38+
For environments where all clients support TLS 1.3:
39+
40+
```toml
41+
[load_balancer.v1.sys.ngx.http]
42+
ssl_protocols = "TLSv1.3"
43+
ssl_ciphersuites = "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"
44+
```
45+
46+
### Deprecated and Insecure Protocols
47+
48+
{{< warning >}}
49+
**NEVER use the following protocols in production:**
50+
51+
- **SSLv2** - Critically insecure, not supported by modern OpenSSL
52+
- **SSLv3** - Multiple vulnerabilities (POODLE), not supported by modern OpenSSL
53+
- **TLSv1** - Deprecated, not supported by modern OpenSSL (1.1.0+)
54+
- **TLSv1.1** - Deprecated by major browsers and standards, not supported by modern OpenSSL
55+
56+
These protocols are non-functional even if configured, as they are not supported by OpenSSL 1.1.0 and newer.
57+
{{< /warning >}}
58+
59+
### TLS Cipher Selection Guidelines
60+
61+
#### TLS 1.3 Cipher Suites (Priority Order)
62+
63+
1. **`TLS_AES_256_GCM_SHA384`** (Highest Security)
64+
- AES-256 encryption with GCM mode
65+
- 384-bit SHA hash
66+
- Best for environments requiring maximum security
67+
68+
2. **`TLS_CHACHA20_POLY1305_SHA256`** (Mobile Optimized)
69+
- ChaCha20 stream cipher with Poly1305 MAC
70+
- Optimized for ARM processors (mobile devices)
71+
- Excellent performance without AES hardware acceleration
72+
73+
3. **`TLS_AES_128_GCM_SHA256`** (High Performance)
74+
- AES-128 encryption with GCM mode
75+
- Lower computational overhead
76+
- Still provides strong security
77+
78+
#### TLS 1.2 Ciphers (Priority Order)
79+
80+
1. **ECDHE-ECDSA-AES256-GCM-SHA384** / **ECDHE-RSA-AES256-GCM-SHA384**
81+
- Elliptic Curve Diffie-Hellman Ephemeral (forward secrecy)
82+
- AES-256-GCM (strongest symmetric encryption)
83+
- Preferred for high-security environments
84+
85+
2. **ECDHE-ECDSA-CHACHA20-POLY1305** / **ECDHE-RSA-CHACHA20-POLY1305**
86+
- Forward secrecy with ECDHE
87+
- ChaCha20-Poly1305 (optimized for non-AES-hardware)
88+
- Excellent for mobile and IoT devices
89+
90+
3. **ECDHE-ECDSA-AES128-GCM-SHA256** / **ECDHE-RSA-AES128-GCM-SHA256**
91+
- Forward secrecy with ECDHE
92+
- AES-128-GCM (high performance, strong security)
93+
- Good balance of security and performance
94+
95+
### Testing TLS Configuration
96+
97+
#### Verify TLS 1.3 Support
98+
99+
```bash
100+
# Test TLS 1.3 connection
101+
openssl s_client -connect your-automate-fqdn:443 -tls1_3
102+
103+
# Expected output should show:
104+
# - Protocol: TLSv1.3
105+
# - Cipher: TLS_AES_256_GCM_SHA384 (or configured cipher)
106+
```
107+
108+
#### Verify TLS 1.2 Support
109+
110+
```bash
111+
# Test TLS 1.2 connection
112+
openssl s_client -connect your-automate-fqdn:443 -tls1_2
113+
114+
# Expected output should show:
115+
# - Protocol: TLSv1.2
116+
# - Cipher: ECDHE-RSA-AES256-GCM-SHA384 (or configured cipher)
117+
```
118+
119+
#### Verify Weak Protocols are Disabled
120+
121+
```bash
122+
# These should fail with connection errors:
123+
openssl s_client -connect your-automate-fqdn:443 -ssl3 # Should fail
124+
openssl s_client -connect your-automate-fqdn:443 -tls1 # Should fail
125+
openssl s_client -connect your-automate-fqdn:443 -tls1_1 # Should fail
126+
```
127+
128+
### Security Compliance
129+
130+
#### Compliance Checklist
131+
132+
Use this checklist to verify TLS/SSL security compliance:
133+
134+
- [ ] TLS 1.2 and/or TLS 1.3 enabled
135+
- [ ] SSLv2, SSLv3, TLSv1, and TLSv1.1 explicitly disabled
136+
- [ ] Strong ciphers configured
137+
- [ ] Weak ciphers excluded
138+
- [ ] Forward secrecy enabled
139+
- [ ] Valid certificate from trusted CA
140+
- [ ] Certificate key size >= 2048-bit RSA or 256-bit ECDSA
141+
- [ ] Certificate expiration monitoring in place
142+
143+
15144
## Ensuring autocomplete remains disabled on the login screen.
16145

17146
A configuration maintained in Chef Automate's nginx.conf file determines the autocomplete functionality.

0 commit comments

Comments
 (0)