- 3. Up till now, the only control over which cipher suites GnuTLS uses has been
- for the cipher algorithms. New options have been added to allow some of the
- other parameters to be varied. Here is complete documentation for the
- available features:
-
- GnuTLS allows the caller to specify separate lists of permitted key
- exchange methods, main cipher algorithms, and MAC algorithms. These may be
- used in any combination to form a specific cipher suite. This is unlike
- OpenSSL, where complete cipher names can be passed to its control function.
- GnuTLS also allows a list of acceptable protocols to be supplied.
-
- For compatibility with OpenSSL, the tls_require_ciphers option can be set
- to complete cipher suite names such as RSA_ARCFOUR_SHA, but for GnuTLS this
- option controls only the cipher algorithms. Exim searches each item in the
- list for the name of an available algorithm. For example, if the list
- contains RSA_AES_SHA, then AES is recognized, and the behaviour is exactly
- the same as if just AES were given.
-
- There are additional options called gnutls_require_kx, gnutls_require_mac,
- and gnutls_require_protocols that can be used to restrict the key exchange
- methods, MAC algorithms, and protocols, respectively. These options are
- ignored if OpenSSL is in use.
-
- All four options are available as global options, controlling how Exim
- behaves as a server, and also as options of the smtp transport, controlling
- how Exim behaves as a client. All the values are string expanded. After
- expansion, the values must be colon-separated lists, though the separator
- can be changed in the usual way.
-
- Each of the four lists starts out with a default set of algorithms. If the
- first item in one of the "require" options does _not_ start with an
- exclamation mark, all the default items are deleted. In this case, only
- those that are explicitly specified can be used. If the first item in one
- of the "require" items _does_ start with an exclamation mark, the defaults
- are left on the list.
-
- Then, any item that starts with an exclamation mark causes the relevant
- entry to be removed from the list, and any item that does not start with an
- exclamation mark causes a new entry to be added to the list. Unrecognized
- items in the list are ignored. Thus:
-
- tls_require_ciphers = !ARCFOUR
-
- allows all the defaults except ARCFOUR, whereas
-
- tls_require_ciphers = AES : 3DES
-
- allows only cipher suites that use AES or 3DES. For tls_require_ciphers
- the recognized names are AES_256, AES_128, AES (both of the preceding),
- 3DES, ARCFOUR_128, ARCFOUR_40, and ARCFOUR (both of the preceding). The
- default list does not contain all of these; it just has AES_256, AES_128,
- 3DES, and ARCFOUR_128.
-
- For gnutls_require_kx, the recognized names are DHE_RSA, RSA (which
- includes DHE_RSA), DHE_DSS, and DHE (which includes both DHE_RSA and
- DHE_DSS). The default list contains RSA, DHE_DSS, DHE_RSA.
-
- For gnutls_require_mac, the recognized names are SHA (synonym SHA1), and
- MD5. The default list contains SHA, MD5.
-
- For gnutls_require_protocols, the recognized names are TLS1 and SSL3.
- The default list contains TLS1, SSL3.
-
- In a server, the order of items in these lists is unimportant. The server
- will advertise the availability of all the relevant cipher suites. However,
- in a client, the order in the tls_require_ciphers list specifies a
- preference order for the cipher algorithms. The first one in the client's
- list that is also advertised by the server is tried first.
-
- 4. There is a new compile-time option called ENABLE_DISABLE_FSYNC. You must
- not set this option unless you really, really, really understand what you
- are doing. No pre-compiled distributions of Exim should ever set this
- option. When it is set, Exim compiles a runtime option called
- disable_fsync. If this is set true, Exim no longer calls fsync() to force
- updated files' data to be written to disc. Unexpected events such as
- crashes and power outages may cause data to be lost or scrambled. Beware.
-
- When ENABLE_DISABLE_FSYNC is not set, a reference to disable_fsync in a
- runtime configuration generates an "unknown option" error.
-
- 5. There is a new variable called $smtp_count_at_connection_start. The name
- is deliberately long, in order to emphasize what the contents are. This
- variable is set greater than zero only in processes spawned by the Exim
- daemon for handling incoming SMTP connections. When the daemon accepts a
- new connection, it increments this variable. A copy of the variable is
- passed to the child process that handles the connection, but its value is
- fixed, and never changes. It is only an approximation of how many incoming
- connections there actually are, because many other connections may come and
- go while a single connection is being processed. When a child process
- terminates, the daemon decrements the variable.
-
- 6. There's a new control called no_pipelining, which does what its name
- suggests. It turns off the advertising of the PIPELINING extension to SMTP.
- To be useful, this control must be obeyed before Exim sends its response to
- an EHLO command. Therefore, it should normally appear in an ACL controlled
- by acl_smtp_connect or acl_smtp_helo.