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"
3132mbedtls_ssl_config * git__ssl_conf ;
3233mbedtls_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