--- title: TLS Settings --- Changing the default TLS settings depends on the chosen installation method. ## Running Rancher in a highly available Kubernetes cluster When you install Rancher inside of a Kubernetes cluster, TLS is offloaded at the cluster's ingress controller. The possible TLS settings depend on the used ingress controller: * nginx-ingress-controller (default for RKE1 and RKE2): [Default TLS Version and Ciphers](https://kubernetes.github.io/ingress-nginx/user-guide/tls/#default-tls-version-and-ciphers). * traefik (default for K3s): [TLS Options](https://doc.traefik.io/traefik/https/tls/#tls-options). ## Running Rancher in a single Docker container The default TLS configuration only accepts TLS 1.2 and secure TLS cipher suites. You can change this by setting the following environment variables: | Parameter | Description | Default | Available options | |-----|-----|-----|-----| | `CATTLE_TLS_MIN_VERSION` | Minimum TLS version | `1.2` | `1.0`, `1.1`, `1.2`, `1.3` | | `CATTLE_TLS_CIPHERS` | Allowed TLS cipher suites | `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`,
`TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`,
`TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305`,
`TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`,
`TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`,
`TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305` | See [Golang tls constants](https://golang.org/pkg/crypto/tls/#pkg-constants) | ## Agent TLS Enforcement The `agent-tls-mode` setting controls how Rancher's agents (`cluster-agent`, `fleet-agent`, and `system-agent`) validate Rancher's certificate. When the value is set to `strict`, Rancher's agents only trust certificates generated by the Certificate Authority contained in the `cacerts` setting. When the value is set to `system-store`, Rancher's agents trust any certificate generated by a public Certificate Authority contained in the operating system's trust store including those signed by authorities such as Let's Encrypt. This can be a security risk, since any certificate generated by these external authorities, which are outside the user's control, are considered valid in this state. While the `strict` option enables a higher level of security, it requires Rancher to have access to the CA which generated the certificate visible to the agents. In the case of certain certificate configurations (notably, external certificates), this is not automatic, and extra configuration is needed. See the [installation guide](../install-upgrade-on-a-kubernetes-cluster/install-upgrade-on-a-kubernetes-cluster.md#3-choose-your-ssl-configuration) for more information on which scenarios require extra configuration. In Rancher v2.8, this setting defaults to `system-store` for new installs. ### Preparing for the Setting Change Each cluster contains a condition in the status field called `AgentTlsStrictCheck`. If `AgentTlsStrictCheck` is set to `"True"`, this indicates that the agents for the cluster are ready to operate in `strict` mode. You can manually inspect each cluster to see if they are ready using the Rancher UI or a kubectl command such as the following: ```bash ## the below command skips ouputs $CLUSTER_NAME,$STATUS for all non-local clusters kubectl get cluster.management.cattle.io -o jsonpath='{range .items[?(@.metadata.name!="local")]}{.metadata.name},{.status.conditions[?(@.type=="AgentTlsStrictCheck")].status}{"\n"}{end}' ``` ### Changing the Setting You can change the setting using the `agentTLSMode` [helm chart option](./helm-chart-options.md). :::warning Depending on your cert setup, additional action may be required, such as uploading the Certificate Authority which signed your certs. Review the [installation guide](../install-upgrade-on-a-kubernetes-cluster/install-upgrade-on-a-kubernetes-cluster.md#3-choose-your-ssl-configuration) before changing the setting to see if any additional requirements apply to your setup. ::: #### Overriding the Setting Validation Checks In some cases, you may want to override the check ensuring all agents can accept the new TLS configuration: :::warning Rancher checks the status of all downstream clusters to prevent outages. Overriding this check is not recommended, and should be done with great caution. ::: 1. As an admin, generate a kubeconfig for the local cluster. In the below examples, this was saved to the `local_kubeconfig.yaml` file. 2. Retrieve the current setting and save it to `setting.yaml`: ```bash kubectl get setting agent-tls-mode -o yaml --kubeconfig=local_kubeconfig.yaml > setting.yaml ``` 3. Update the `setting.yaml` file, replacing `value` with `strict`. Adding the `cattle.io/force: "true"` annotation overrides the cluster condition check, and should only be done with great care: :::warning Including the `cattle.io/force` annotation with any value (including, for example `"false"`) overrides the cluster condition check. ::: ```yaml apiVersion: management.cattle.io/v3 customized: false default: strict kind: Setting metadata: name: agent-tls-mode annotations: cattle.io/force: "true" source: "" value: strict ``` 4. Apply the new version of the setting: ```bash kubectl apply -f setting.yaml --kubeconfig=local_kubeconfig.yaml ```