Skip to content

Commit e9d97be

Browse files
authored
Merge pull request libgit2#6966 from libgit2/ethomson/tls
ssl: enforce TLS v1.2 (or better)
2 parents 338e6fb + e0edd7d commit e9d97be

File tree

4 files changed

+19
-10
lines changed

4 files changed

+19
-10
lines changed

src/libgit2/streams/mbedtls.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939

4040
#undef inline
4141

42-
#define GIT_SSL_DEFAULT_CIPHERS "TLS1-3-AES-128-GCM-SHA256:TLS1-3-AES-256-GCM-SHA384:TLS1-3-CHACHA20-POLY1305-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256:TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-CHACHA20-POLY1305-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-RSA-WITH-AES-128-GCM-SHA256:TLS-RSA-WITH-AES-256-GCM-SHA384:TLS-RSA-WITH-AES-128-CBC-SHA256:TLS-RSA-WITH-AES-256-CBC-SHA256:TLS-RSA-WITH-AES-128-CBC-SHA:TLS-RSA-WITH-AES-256-CBC-SHA"
43-
#define GIT_SSL_DEFAULT_CIPHERS_COUNT 28
42+
#define GIT_SSL_DEFAULT_CIPHERS "TLS1-3-AES-128-GCM-SHA256:TLS1-3-AES-256-GCM-SHA384:TLS1-3-CHACHA20-POLY1305-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256:TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-CHACHA20-POLY1305-SHA256"
43+
#define GIT_SSL_DEFAULT_CIPHERS_COUNT 12
4444

4545
static int ciphers_list[GIT_SSL_DEFAULT_CIPHERS_COUNT];
4646

@@ -94,9 +94,13 @@ int git_mbedtls_stream_global_init(void)
9494
goto cleanup;
9595
}
9696

97-
/* configure TLSv1.1 or better */
98-
#ifdef MBEDTLS_SSL_MINOR_VERSION_2
99-
mbedtls_ssl_conf_min_version(&mbedtls_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_2);
97+
/*
98+
* Configure TLSv1.2 or better; if the minor version constant isn't
99+
* defined then this version of mbedTLS doesn't support such an old
100+
* version, so we need not do anything.
101+
*/
102+
#ifdef MBEDTLS_SSL_MINOR_VERSION_3
103+
mbedtls_ssl_conf_min_version(&mbedtls_config, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3);
100104
#endif
101105

102106
/* verify_server_cert is responsible for making the check.

src/libgit2/streams/openssl.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ extern char *git__ssl_ciphers;
4040

4141
SSL_CTX *git__ssl_ctx;
4242

43-
#define GIT_SSL_DEFAULT_CIPHERS "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA"
43+
#define GIT_SSL_DEFAULT_CIPHERS "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305"
44+
4445

4546
static BIO_METHOD *git_stream_bio_method;
4647
static int init_bio_method(void);
@@ -105,7 +106,10 @@ static void git_openssl_free(void *mem)
105106

106107
static int openssl_init(void)
107108
{
108-
long ssl_opts = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
109+
long ssl_opts = SSL_OP_NO_SSLv2 |
110+
SSL_OP_NO_SSLv3 |
111+
SSL_OP_NO_TLSv1 |
112+
SSL_OP_NO_TLSv1_1;
109113
const char *ciphers = git__ssl_ciphers;
110114
#ifdef VALGRIND
111115
static bool allocators_initialized = false;
@@ -136,7 +140,7 @@ static int openssl_init(void)
136140
/*
137141
* Despite the name SSLv23_method, this is actually a version-
138142
* flexible context, which honors the protocol versions
139-
* specified in `ssl_opts`. So we only support TLSv1.0 and
143+
* specified in `ssl_opts`. So we only support TLSv1.2 and
140144
* higher.
141145
*/
142146
if (!(git__ssl_ctx = SSL_CTX_new(SSLv23_method())))

src/libgit2/streams/openssl_dynamic.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@
182182
# define SSL_OP_NO_COMPRESSION 0x00020000L
183183
# define SSL_OP_NO_SSLv2 0x01000000L
184184
# define SSL_OP_NO_SSLv3 0x02000000L
185+
# define SSL_OP_NO_TLSv1 0x04000000L
186+
# define SSL_OP_NO_TLSv1_1 0x10000000L
185187

186188
# define SSL_MODE_AUTO_RETRY 0x00000004L
187189

src/libgit2/streams/stransport.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,7 @@ static int stransport_wrap(
331331
if ((ret = SSLSetIOFuncs(st->ctx, read_cb, write_cb)) != noErr ||
332332
(ret = SSLSetConnection(st->ctx, st)) != noErr ||
333333
(ret = SSLSetSessionOption(st->ctx, kSSLSessionOptionBreakOnServerAuth, true)) != noErr ||
334-
(ret = SSLSetProtocolVersionMin(st->ctx, kTLSProtocol1)) != noErr ||
335-
(ret = SSLSetProtocolVersionMax(st->ctx, kTLSProtocol12)) != noErr ||
334+
(ret = SSLSetProtocolVersionMin(st->ctx, kTLSProtocol12)) != noErr ||
336335
(ret = SSLSetPeerDomainName(st->ctx, host, strlen(host))) != noErr) {
337336
CFRelease(st->ctx);
338337
git__free(st);

0 commit comments

Comments
 (0)