Bug#1089517: exim4-config: TLS setup logic wrong

Andreas Metzler ametzler at bebt.de
Sun Dec 8 12:41:30 GMT 2024


On 2024-12-08 Slavko <linux at slavino.sk> wrote:
> Package: exim4-config
> Severity: normal
> Version: 4.98-2

> Ahoj,

> Current (4.98-2) config logic for tls_advertise_hosts is wrong,
> the conf.d/main/03_exim4-config_tlsoptions contains this:

>     .ifdef MAIN_TLS_ENABLE
>     .ifndef MAIN_TLS_ADVERTISE_HOSTS
>     MAIN_TLS_ADVERTISE_HOSTS = *
>     .endif
>     tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS

>     ...

>     .else
>     # Use upstream defaults
>    .endif

> But defaults changed in some version in past, now the default for
> tls_advertise_hosts is advertise to all:

>     tls_advertise_hosts = *

> The result is that if MAIN_TLS_ENABLE is set and
> MAIN_TLS_ADVERTISE_HOSTS is not set, config (re)sets
> tls_advertise_hosts to default. If MAIN_TLS_ENABLE is not set,
> the tls_advertise_hosts is leaved in default (again *).

> In other words, tls_advertise_hosts is always "*", no matter if
> MAIN_TLS_ENABLE is set or not.

Well, if you want to change tls_advertise_hosts you should set
MAIN_TLS_ADVERTISE_HOSTS. If you do that and also set MAIN_TLS_ENABLE
then stuff happens as expected. That is what the ".ifndef
MAIN_TLS_ADVERTISE_HOSTS" takes care of.

I do agree that is superflous to initiaze 'MAIN_TLS_ADVERTISE_HOSTS = *'
by default since this is now the upstream default.

> I suggest to change logic to this:

>     .ifdef MAIN_TLS_ENABLE
>     # change default if macro is set
>     .ifdef MAIN_TLS_ADVERTISE_HOSTS
>     tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS
>     .endif

>     ...

>     .else
>     # reset default to empty value
>     tls_advertise_hosts =
>    .endif

I agree with the former but disagree with the latter. See below.

> (please add/change comments as appropriate, my English is not good for
> that)

> By that change, the MAIN_TLS_ADVERTISE_HOSTS macro is used only if set,
> otherwise if MAIN_TLS_ENABLE is set it leaves tls_advertise_hosts on
> default and if MAIN_TLS_ENABLE is not set the tls_advertise_hosts is
> cleared.

> That is required, as exim's docs states, that:

> + if TLS is not needed (IMO not wanted), the tls_advertise_hosts must be
>   set to empty value
> + tls_advertise_hosts's default value requires tls_certificate to be set
> + if tls_certificate is empty (but wanted by tls_advertise_hosts),
>   self-signed certificate will be generated on every daemon start

The thing is that we want to both
a) follow upstream's default to enable TLS by default (using
on-demand) certificates) and
b) not break existing configurations which set MAIN_TLS_ENABLE and
expect exim to use the certificates they placed into exim.crt/key.

That is the rationale for the current configuration which turned
MAIN_TLS_ENABLE into a "use local certs and do enhanced config"-switch
in 2019's 4.93~RC1-4. I agree that the option is kind of misnamed.
However OTOH I do not think we should further complicate the
configuration  just to make it easier to disable incoming TLS, that is
very much a niche-configuration.

How about making the docs more explicit? If one reads between the lines
the info there but it is well hidden:
| Exim supports incoming opportunistic TLS by using on-connect
| autogenerated self-signed certificates. This is not optimal both for
| performance reasons and because these certificates cannot be verified by
| connecting clients/servers.
[...]
| To avoid the (small) performance issue and the log message one can
| locally create certificates. The exim-gencert script (which requires
| openssl) can be helpful for this purpose. It is shipped in
| /usr/share/doc/exim4-base/examples/ and takes care of proper access
| privileges on the private key file when installing key/certificate in
| /etc/exim4/.
| 
| One can also get a certificate from a CA and install the key in
| /etc/exim4/exim.key and the certificate in /etc/exim4/exim.crt.
| 
| To enable use of the installed certificates set the macro
| MAIN_TLS_ENABLE in a local configuration [...]

cu Andreas
-- 
`What a good friend you are to him, Dr. Maturin. His other friends are
so grateful to you.'
`I sew his ears on from time to time, sure'



More information about the Pkg-exim4-maintainers mailing list