Hardening TLS configuration

ThinLinc uses GnuTLS for Web Access and Web Admin. By default, it allows TLS versions 1.0, 1.1, 1.2 and 1.3:

https://www.cendio.com/resources/docs/tag/gnutls-priorities-standard.html

In some cases, you might want to harden your configuration by, for example, only allowing TLS 1.2 and TLS 1.3. This can be achieved by modifying ThinLinc configuration. The configuration parameters are called /webaccess/gnutls_priority and /tlwebadm/gnutls_priority and all protocol versions apart from TLS 1.2 and TLS 1.3 can be removed like this:

$ sudo tl-config 
/webaccess/gnutls_priority=NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3
$ sudo tl-config 
/tlwebadm/gnutls_priority=NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3
$ sudo systemctl restart tlwebaccess.service tlwebadm.service

The change can then be verified, for example, for Web Access by using nmap like this:

$ nmap --script ssl-enum-ciphers -p 300 <hostname_of_thinlinc_server>

And for Web Admin:

$ nmap --script ssl-enum-ciphers -p 1010 <hostname_of_thinlinc_server>

Below is example output when only TLS 1.2 and TLS 1.3 is allowed:

Starting Nmap 7.95 ( https://nmap.org ) at 2024-07-12 13:37 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000078s latency).
Other addresses for localhost (not scanned): ::1

PORT    STATE SERVICE
300/tcp open  unknown
| ssl-enum-ciphers: 
|   TLSv1.2: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_CCM (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CCM (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
|       TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (secp256r1) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CCM (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CCM (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: client
|   TLSv1.3: 
|     ciphers: 
|       TLS_AKE_WITH_AES_128_CCM_SHA256 (secp256r1) - A
|       TLS_AKE_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_AKE_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_AKE_WITH_CHACHA20_POLY1305_SHA256 (secp256r1) - A
|     cipher preference: client
|_  least strength: A

Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds

Note that, ThinLinc will always prefer the most secure version of TLS when there is a choice.

3 Likes