Configure TLS Minimum Version and Restricted Cipher List¶
StarlingX r13 introduces the ability to configure the minimum TLS version and a restricted set of TLS cipher suites for externally visible StarlingX HTTPS server endpoints.
Configure Minimum TLS Version¶
To configure minimum TLS version, run the following commands:
~(keystone_admin)]$ system service-parameter-add platform config tls-min-version=<value>
~(keystone_admin)]$ system service-parameter-modify platform config tls-min-version=<value>
~(keystone_admin)]$ system service-parameter-delete platform config tls-min-version
Where,
Valid values: VersionTLS12, VersionTLS13
Default values: VersionTLS12 for new install and VersionTLS12
(unchanged) for upgrades.
Configure Restricted Cipher Suites¶
To configure restricted cipher suites, run the following commands:
~(keystone_admin)]$ system service-parameter-add platform config tls-cipher-suite=<comma-separated list>
~(keystone_admin)]$ system service-parameter-modify platform config tls-cipher-suite=<comma-separated list>
~(keystone_admin)]$ system service-parameter-delete platform config tls-cipher-suite
Where,
Valid values: Comma-separated list of IANA-named cipher suites (both TLS 1.2 and TLS 1.3 ciphers).
Default values:
TLS 1.2 (6 ciphers):
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS 1.3 (3 ciphers):
TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256TLS_CHACHA20_POLY1305_SHA256
Note
All ciphers use AEAD encryption with forward secrecy (ECDHE key exchange). They do not use CBC, SHA1, and weak ciphers.
Certificate Type and Cipher Availability¶
For TLS 1.2 cipher suites, the type of key in the server certificate determines which suites are available and negotiable.
TLS_ECDHE_RSAsuites require an RSA key in the server certificate.TLS_ECDHE_ECDSAsuites require an ECDSA key in the server certificate.
All listed suites (TLS 1.2 and TLS 1.3) use ECDHE for key exchange (providing forward secrecy). The RSA/ECDSA distinction applies only to authentication (certificate signature), not to the key exchange mechanism.
Note
Removing the tls-cipher-suite parameter reverts to the 9 strong default
ciphers listed above.
Note
The add, modify, delete operations take effect immediately. Running system service-parameter-apply platform is not required.
The following table lists the affected endpoints:
# |
Endpoint |
Port(s) |
Network |
|---|---|---|---|
1 |
StarlingX REST APIs (sysinv, keystone, barbican, USM, etc.) |
5000, 6385, 6443, 7777, 9311, 15497, 18002, 4545 |
OAM |
2 |
StarlingX Horizon (lighttpd) |
8443 |
OAM |
3 |
Docker Registry (registry.local) |
9001 |
MGMT |
4 |
OpenLDAP / slapd |
636 |
MGMT |
5 |
nginx-ingress |
443 |
OAM |
6 |
OIDC Dex |
30556 |
OAM |
7 |
OIDC Client |
30555 |
OAM |
Configure Kubernetes TLS¶
The Kubernetes API server TLS settings are managed separately via existing service parameters:
~(keystone_admin)]$ system service-parameter-add/modify/delete kubernetes kube_apiserver tls-min-version=<value>
~(keystone_admin)]$ system service-parameter-add/modify/delete kubernetes kube_apiserver tls-cipher-suites=<value>
Default values:
tls-min-version:VersionTLS12tls-cipher-suites:TLS 1.2 (6 ciphers):
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS 1.3 (3 ciphers):
TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384TLS_CHACHA20_POLY1305_SHA256
The same IANA cipher suite naming convention is used as the platform parameters.
A separate system service-parameter-apply Kubernetes is required after changing these values.
For more details, see kube-apiserver configuration.
Distributed Cloud Behavior¶
The TLS parameters are not synchronized from System Controller to subclouds. For existing subclouds, use the REST API or CLI on each subcloud to configure the TLS parameters.
Verify TLS Configuration¶
You can verify TLS configuration by running the following commands:
Check current settings.
~(keystone_admin)]$ system service-parameter-list --service platform --section config | grep tls
Verify TLS negotiation per endpoint.
~(keystone_admin)]$ echo | openssl s_client -connect <OAM_IP>:6385 2>/dev/null | grep -E 'Protocol|Cipher'
Test the configuration with TLS 1.1.
~(keystone_admin)]$ echo | openssl s_client -connect <OAM_IP>:6385 -tls1_1 2>&1 | grep 'Cipher is'