diff options
author | Mark Thompson <sw@jkqxz.net> | 2016-10-28 19:50:27 +0100 |
---|---|---|
committer | Mark Thompson <sw@jkqxz.net> | 2016-10-30 13:18:45 +0000 |
commit | e8634fb92e2f624f19ee5fced6481d8ece503119 (patch) | |
tree | 78b0a35f5ac418f6c201fcb66a7ddb4a7113af0a | |
parent | 121be310607879841d19a34d9f16d4fe9ba7f18c (diff) | |
download | ffmpeg-e8634fb92e2f624f19ee5fced6481d8ece503119.tar.gz |
openssl: Allow newer TLS versions than TLSv1
The use of TLSv1_*_method() disallows newer protocol versions; instead
use SSLv23_*_method() and then explicitly disable the deprecated
protocol versions which should not be supported.
Fixes ticket #5915.
-rw-r--r-- | libavformat/tls_openssl.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c index c551ac74e2..178ca9e0e4 100644 --- a/libavformat/tls_openssl.c +++ b/libavformat/tls_openssl.c @@ -233,12 +233,17 @@ static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **op if ((ret = ff_tls_open_underlying(c, h, uri, options)) < 0) goto fail; - p->ctx = SSL_CTX_new(c->listen ? TLSv1_server_method() : TLSv1_client_method()); + // We want to support all versions of TLS >= 1.0, but not the deprecated + // and insecure SSLv2 and SSLv3. Despite the name, SSLv23_*_method() + // enables support for all versions of SSL and TLS, and we then disable + // support for the old protocols immediately after creating the context. + p->ctx = SSL_CTX_new(c->listen ? SSLv23_server_method() : SSLv23_client_method()); if (!p->ctx) { av_log(h, AV_LOG_ERROR, "%s\n", ERR_error_string(ERR_get_error(), NULL)); ret = AVERROR(EIO); goto fail; } + SSL_CTX_set_options(p->ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3); if (c->ca_file) { if (!SSL_CTX_load_verify_locations(p->ctx, c->ca_file, NULL)) av_log(h, AV_LOG_ERROR, "SSL_CTX_load_verify_locations %s\n", ERR_error_string(ERR_get_error(), NULL)); |