GnuTLS Priority Strings
Table of Contents
How they work
The priority string is a list of components separated by colons.
Each component must be prefixed with + for adding it to or - or ! for removing it from the configuration (or the set it represents). Levels can only be set (no prefix) or added (with +). Flags can only be set (all flags have a % prefix). NONE can only be specified as first component (without prefix), it represents an empty configuration. Otherwise it starts with a standard configuration containing no ciphers, key exchanges algorithms and hash algorithms.
The order of ciphers, key exchanges algorithms and hash algorithms matters for the order of the cipher suites; to generate the list it first iterates over key exchange algorithms, then ciphers, and then hash algorithms. New items are always added at the end of a list, so for example -SHA1:+SHA1 moves SHA1 to the end of the hash algorithm list.
The -ALL sets are not always representing the full list, but should at least contain the subset present in the NORMAL level.
Version specific remarks
- Before GnuTLS 3.2.2 removing an algorithm didn't preserve the order; instead the removed algorithm was replaced by the last algorithm in the list.
-
The fix to preserve ordering in GnuTLS 3.2.2 introduced another bug:
NONE:+MAC-ALL:-SHA1:+SHA1missesSHA1and hasMD5twice. -
Also in tested versions so far (≤ 3.2.2) adding
-ALLsets removes all other algorithms in the list; if the-ALLset actually contains all algorithms this only overwrites the order, butNONE:+COMP-DEFLATE:+COMP-ALLhas onlyCOMP-NULLand notCOMP-DEFLATE. I consider this a bug for now, and therefore this behavior is not reflected on this page.
Levels can't be removed, but adding levels actually appends the contained algorithms;NONE:+MD5:+NORMALactually hasMD5as first hash algorithm. -
GnuTLS 3.2.5 added a lot of new ciphersuites (many new combinations of already supported algorithms, and suites for the new
CAMELLIA-128-GCM+CAMELLIA-256-GCMciphers) - (Not released yet): Camellia-GCM ciphers were added to some levels, GCM ciphers got higher priority (than comparable CBC) in default sets. These changes are already active below.
To actually check what your GnuTLS library is doing you can either run gnutls-cli -l --priority="NORMAL" or download and compile gnutls-priority.c (which can show more internal state).