TLS Ciphers and protocols

You can configure the permitted SSL/TLS Protocols in set::ssl::protocols and set::ssl::ciphers. You can also configure individual server links by setting link::ciphers.

Default configuration
UnrealIRCd 4.0.x does not permit SSLv2 and SSLv3 connections, it allows TLSv1, TLSv1.1, TLSv1.2 and TLSv1.3 (the latter only whenever it is released and available in OpenSSL).

The default setting for UnrealIRCd 4.0.7 - 4.0.13 for set::ssl::ciphers is: EECDH+CHACHA20 EECDH+AESGCM EECDH+AES AES128-GCM-SHA256 AES256-GCM-SHA384 AES128-SHA256 AES256-SHA256 AES128-SHA AES256-SHA

In 4.0.14 this was changed to include TLSv1.3 ciphers (no other changes): TLS13-CHACHA20-POLY1305-SHA256 TLS13-AES-128-GCM-SHA256 TLS13-AES-256-GCM-SHA384 EECDH+CHACHA20 EECDH+AESGCM EECDH+AES AES128-GCM-SHA256 AES256-GCM-SHA384 AES128-SHA256 AES256-SHA256 AES128-SHA AES256-SHA Which adds TLSv1.3 support.

ECDH(E) curves are set to automatic by default, which usually results in the following list: secp521r1, secp384r1 and prime256v1.

The above default settings for protocols and ciphers is based on Mozilla SSL Configuration Generator ('Intermediate' compatibility) and two other major sources. The rationale behind this is as follows:
 * Maintain compatability with older clients out of the box (if you don't need this, then check out )
 * Prefer PFS
 * Prefer ChaCha20/Poly1305 over AES because it's resistant against timing attacks even in software implementations
 * Prefer Authenticated encryption such as GCM over CBC due to the various CBC attacks in the past and likely in the future.

With OpenSSL 1.1.0 this results in (results from cipherscan): prio ciphersuite                  protocols              pfs                 curves 1    ECDHE-RSA-AES256-GCM-SHA384  TLSv1.2                ECDH,P-256,256bits  prime256v1,secp521r1,secp384r1 2    ECDHE-RSA-AES128-GCM-SHA256  TLSv1.2                ECDH,P-256,256bits  prime256v1,secp521r1,secp384r1 3    ECDHE-RSA-AES256-SHA384      TLSv1.2                ECDH,P-256,256bits  prime256v1,secp521r1,secp384r1 4    ECDHE-RSA-AES128-SHA256      TLSv1.2                ECDH,P-256,256bits  prime256v1,secp521r1,secp384r1 5    ECDHE-RSA-AES256-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits  prime256v1,secp521r1,secp384r1 6    ECDHE-RSA-AES128-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits  prime256v1,secp521r1,secp384r1 7    AES128-GCM-SHA256            TLSv1.2                None                None 8    AES256-GCM-SHA384            TLSv1.2                None                None 9    AES128-SHA256                TLSv1.2                None                None 10   AES256-SHA256                TLSv1.2                None                None 11   AES128-SHA                   TLSv1,TLSv1.1,TLSv1.2  None                None 12   AES256-SHA                   TLSv1,TLSv1.1,TLSv1.2  None                None

As said, we need to provide compatibility out of the box so we still permit non-PFS ciphersuite selection, CBC mode and SHA1.

Over time the default ciphers, protocols and curves list in UnrealIRCd will be adjusted.

More secure setting
If you don't need compatibility with older clients/libraries then use a setting like this: set { ssl { protocols "All,-TLSv1,-TLSv1.1"; /* allow only TLSv1.2 and up */ ciphers "TLS13-CHACHA20-POLY1305-SHA256 TLS13-AES-128-GCM-SHA256 TLS13-AES-256-GCM-SHA384 EECDH+CHACHA20 EECDH+AESGCM EECDH+AES+SHA384 EECDH+AES+SHA256"; }; }; Unfortunately most people can't use this (yet) as it would prevent older clients from connecting. For example UnrealIRCd 3.2.x servers would be unable to link to this 4.x.

Old setting prior to 4.0.7
Prior to UnrealIRCd 4.0.7 if you did not have a cipher setting it was left up to your OS/Distro (and ultimately OpenSSL/LibreSSL build parameters) as to which algorithms were enabled. In practice this often meant ciphers such as RC4 and 3DES were enabled which is discouraged today.