Disable Outdated TLS Versions and Weak Ciphers in Exim

Secure your Exim mail server by disabling weak ciphers and outdated TLS versions using the tls_require_ciphers parameter.

Last updated: July 2026

In short: To eliminate security risks from outdated TLS protocols and weak encryption ciphers, you must configure Exim appropriately. Depending on whether your Exim server uses OpenSSL or GnuTLS, the tls_require_ciphers option behaves differently to control cipher selection.

A common finding from security analyzers like Kuveris is the presence of weak cipher suites or outdated TLS protocols (such as TLS 1.0 and TLS 1.1) on mail servers. To harden the TLS configuration of your Exim mail server, you must explicitly specify which protocols and ciphers are acceptable.

Cipher Configuration under OpenSSL (tls_require_ciphers)

When Exim is compiled with OpenSSL, the tls_require_ciphers option specifies which cipher suites are acceptable.

The official Exim specification states: This specifies which ciphers are acceptable for TLS versions prior to 1.3.

In the OpenSSL syntax, the exclamation mark (!) operator permanently removes unwanted ciphers from the list. The specification explains this behavior: If ! is used, the ciphers are permanently deleted from the list. The ciphers deleted can never reappear in the list even if they are explicitly stated.

The following example from the specification prefers ECDSA-authenticated ciphers over RSA ones and drops the unauthenticated (anonymous) ciphers:

tls_require_ciphers = ECDSA:RSA:!COMPLEMENTOFDEFAULT

Limitations with TLS 1.3 under OpenSSL

Note that this setting does not affect connections negotiated using the newer TLS 1.3 standard. The specification explains: For TLS version 1.3 the control available is less fine-grained and Exim does not provide access to it at present. The value of the tls_require_ciphers option is ignored when TLS version 1.3 is negotiated.

Under TLS 1.3, Exim relies on the default OpenSSL system configurations, which negotiate secure modern suites automatically.

Cipher Configuration under GnuTLS (Priority Strings)

If your Exim installation is built using the GnuTLS backend instead of OpenSSL, the tls_require_ciphers option functions as a priority string.

The specification explains: The tls_require_ciphers option is treated as the GnuTLS priority string and controls both protocols and ciphers.

Therefore, GnuTLS uses a single setting to configure both protocol versions and cipher suites. The official documentation provides an example to disable legacy protocols (such as SSL 3.0):

# Disable older versions of protocols
tls_require_ciphers = NORMAL:%LATEST_RECORD_VERSION:-VERS-SSL3.0

This uses the predefined NORMAL priority string and appends custom exclusions (such as -VERS-SSL3.0 to disable SSL 3.0).

DH Parameters Configuration

Exim also lets you control the Diffie-Hellman parameters used for TLS. To not use built-in DH parameters, you can disable them by setting:

tls_dhparam = none

Verifying Your Configuration

After editing your Exim configuration (typically /etc/exim/exim.conf), restart the Exim daemon. Then, verify your server configuration using the free Kuveris scanner to ensure that legacy TLS protocols and weak cipher suites are successfully rejected.

Further reading