Skip to content

Commit 2419ccc

Browse files
committed
mbedtls: default cipher list support
1 parent 60e1ad9 commit 2419ccc

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

src/settings.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ int git_libgit2_opts(int key, ...)
210210
break;
211211

212212
case GIT_OPT_SET_SSL_CIPHERS:
213-
#ifdef GIT_OPENSSL
213+
#if (GIT_OPENSSL || GIT_MBEDTLS)
214214
{
215215
git__free(git__ssl_ciphers);
216216
git__ssl_ciphers = git__strdup(va_arg(ap, const char *));

src/streams/mbedtls.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "streams/socket.h"
1717
#include "netops.h"
1818
#include "git2/transport.h"
19+
#include "util.h"
1920

2021
#ifdef GIT_CURL
2122
# include "streams/curl.h"
@@ -31,6 +32,9 @@
3132
mbedtls_ssl_config *git__ssl_conf;
3233
mbedtls_entropy_context *mbedtls_entropy;
3334

35+
#define GIT_SSL_DEFAULT_CIPHERS "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-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-DSS-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-DSS-WITH-AES-256-GCM-SHA384: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-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-DSS-WITH-AES-128-CBC-SHA256:TLS-DHE-DSS-WITH-AES-256-CBC-SHA256:TLS-DHE-DSS-WITH-AES-128-CBC-SHA:TLS-DHE-DSS-WITH-AES-256-CBC-SHA: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"
36+
#define GIT_SSL_DEFAULT_CIPHERS_COUNT 30
37+
3438
/**
3539
* This function aims to clean-up the SSL context which
3640
* we allocated.
@@ -57,6 +61,13 @@ int git_mbedtls_stream_global_init(void)
5761
{
5862
int ret;
5963
mbedtls_ctr_drbg_context *ctr_drbg = NULL;
64+
65+
int *ciphers_list = NULL;
66+
int ciphers_known = 0;
67+
char *cipher_name = NULL;
68+
char *cipher_string = NULL;
69+
char *cipher_string_tmp = NULL;
70+
6071
mbedtls_x509_crt *cacert = NULL;
6172

6273
git__ssl_conf = git__malloc(sizeof(mbedtls_ssl_config));
@@ -73,6 +84,24 @@ int git_mbedtls_stream_global_init(void)
7384
mbedtls_ssl_conf_min_version(git__ssl_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0);
7485
mbedtls_ssl_conf_authmode(git__ssl_conf, MBEDTLS_SSL_VERIFY_REQUIRED);
7586

87+
/* set the list of allowed ciphersuites */
88+
ciphers_list = calloc(GIT_SSL_DEFAULT_CIPHERS_COUNT, sizeof(int));
89+
ciphers_known = 0;
90+
cipher_string = cipher_string_tmp = git__strdup(GIT_SSL_DEFAULT_CIPHERS);
91+
while ((cipher_name = git__strtok(&cipher_string_tmp, ":")) != NULL) {
92+
int cipherid = mbedtls_ssl_get_ciphersuite_id(cipher_name);
93+
if (cipherid == 0) continue;
94+
95+
ciphers_list[ciphers_known++] = cipherid;
96+
}
97+
git__free(cipher_string);
98+
99+
if (!ciphers_known) {
100+
giterr_set(GITERR_SSL, "no cipher could be enabled");
101+
goto cleanup;
102+
}
103+
mbedtls_ssl_conf_ciphersuites(git__ssl_conf, ciphers_list);
104+
76105
/* Seeding the random number generator */
77106
mbedtls_entropy = git__malloc(sizeof(mbedtls_entropy_context));
78107
mbedtls_entropy_init(mbedtls_entropy);

0 commit comments

Comments
 (0)