add support for specifying usable ciphers
authorJo-Philipp Wich <jo@mein.io>
Sat, 15 Feb 2020 20:25:26 +0000 (21:25 +0100)
committerJo-Philipp Wich <jo@mein.io>
Sat, 15 Feb 2020 22:30:24 +0000 (23:30 +0100)
commitf7f93addafb8a2a45c601d9cffe249eb6c73de23
treee92b49e7aae60e6285cbef298a1a136e5006bc8e
parent30cebb4fc78e49e0432a404f7c9dd8c9a93b3cc3
add support for specifying usable ciphers

Implement a new ustream_ssl_ops.context_set_ciphers() function which allows
to specify the usable ciphers for TLS context which is useful to restrict
the accepted cipher subset especially for ustream-ssl server applications.

For the OpenSSL backend, the given cipher string is passed as-is to the
SSL_CTX_set_cipher_list().

For mbedTLS, the given string is split on colons and each item of the list
is resolved through mbedtls_ssl_get_ciphersuite_id() to construct a numeric
list of allowed ciphers.

Note that OpenSSL and mbedTLS use different names for their ciphers but both
implementations simply ignore unknown names, so it is possible to specify
cipherstrings which are applicable to either library, e.g. `-ALL:ECDHE-
ECDSA-AES128-GCM-SHA256:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256` would
enable ChaCha20/Poly1305 in both OpenSSL and mbedTLS.

Another crucial difference between the libraries is that the cipherstring
in mbedTLS is effectively a whitelist of allowed ciphers while, without
additional syntax elements, OpenSSL's cipherstring merely appends ciphers
to the default selection.

Ref: https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_cipher_list.html
Ref: https://tls.mbed.org/api/ssl_8h.html#a9914cdf5533e813e1ea7ca52981aa006
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
ustream-internal.h
ustream-mbedtls.c
ustream-mbedtls.h
ustream-openssl.c
ustream-ssl.c
ustream-ssl.h