TLS: switch off SSL session id when client cert is used
CVE-2016-5419 Bug: https://curl.haxx.se/docs/adv_20160803A.html Reported-by: Bru Rom Contributions-by: Eric Rescorla and Ray Satiro
This commit is contained in:
Родитель
75dc096e01
Коммит
247d890da8
|
@ -6123,6 +6123,7 @@ static CURLcode create_conn(struct Curl_easy *data,
|
||||||
data->set.ssl.random_file = data->set.str[STRING_SSL_RANDOM_FILE];
|
data->set.ssl.random_file = data->set.str[STRING_SSL_RANDOM_FILE];
|
||||||
data->set.ssl.egdsocket = data->set.str[STRING_SSL_EGDSOCKET];
|
data->set.ssl.egdsocket = data->set.str[STRING_SSL_EGDSOCKET];
|
||||||
data->set.ssl.cipher_list = data->set.str[STRING_SSL_CIPHER_LIST];
|
data->set.ssl.cipher_list = data->set.str[STRING_SSL_CIPHER_LIST];
|
||||||
|
data->set.ssl.clientcert = data->set.str[STRING_CERT];
|
||||||
#ifdef USE_TLS_SRP
|
#ifdef USE_TLS_SRP
|
||||||
data->set.ssl.username = data->set.str[STRING_TLSAUTH_USERNAME];
|
data->set.ssl.username = data->set.str[STRING_TLSAUTH_USERNAME];
|
||||||
data->set.ssl.password = data->set.str[STRING_TLSAUTH_PASSWORD];
|
data->set.ssl.password = data->set.str[STRING_TLSAUTH_PASSWORD];
|
||||||
|
|
|
@ -351,6 +351,7 @@ struct ssl_config_data {
|
||||||
char *CAfile; /* certificate to verify peer against */
|
char *CAfile; /* certificate to verify peer against */
|
||||||
const char *CRLfile; /* CRL to check certificate revocation */
|
const char *CRLfile; /* CRL to check certificate revocation */
|
||||||
const char *issuercert;/* optional issuer certificate filename */
|
const char *issuercert;/* optional issuer certificate filename */
|
||||||
|
char *clientcert;
|
||||||
char *random_file; /* path to file containing "random" data */
|
char *random_file; /* path to file containing "random" data */
|
||||||
char *egdsocket; /* path to file containing the EGD daemon socket */
|
char *egdsocket; /* path to file containing the EGD daemon socket */
|
||||||
char *cipher_list; /* list of ciphers to use */
|
char *cipher_list; /* list of ciphers to use */
|
||||||
|
|
|
@ -156,6 +156,15 @@ Curl_clone_ssl_config(struct ssl_config_data *source,
|
||||||
else
|
else
|
||||||
dest->random_file = NULL;
|
dest->random_file = NULL;
|
||||||
|
|
||||||
|
if(source->clientcert) {
|
||||||
|
dest->clientcert = strdup(source->clientcert);
|
||||||
|
if(!dest->clientcert)
|
||||||
|
return FALSE;
|
||||||
|
dest->sessionid = FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
dest->clientcert = NULL;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,6 +175,7 @@ void Curl_free_ssl_config(struct ssl_config_data* sslc)
|
||||||
Curl_safefree(sslc->cipher_list);
|
Curl_safefree(sslc->cipher_list);
|
||||||
Curl_safefree(sslc->egdsocket);
|
Curl_safefree(sslc->egdsocket);
|
||||||
Curl_safefree(sslc->random_file);
|
Curl_safefree(sslc->random_file);
|
||||||
|
Curl_safefree(sslc->clientcert);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче