Commit 247d890d authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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
parent 75dc096e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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.egdsocket = data->set.str[STRING_SSL_EGDSOCKET];
  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
  data->set.ssl.username = data->set.str[STRING_TLSAUTH_USERNAME];
  data->set.ssl.password = data->set.str[STRING_TLSAUTH_PASSWORD];
+1 −0
Original line number Diff line number Diff line
@@ -351,6 +351,7 @@ struct ssl_config_data {
  char *CAfile;          /* certificate to verify peer against */
  const char *CRLfile;   /* CRL to check certificate revocation */
  const char *issuercert;/* optional issuer certificate filename */
  char *clientcert;
  char *random_file;     /* path to file containing "random" data */
  char *egdsocket;       /* path to file containing the EGD daemon socket */
  char *cipher_list;     /* list of ciphers to use */
+10 −0
Original line number Diff line number Diff line
@@ -156,6 +156,15 @@ Curl_clone_ssl_config(struct ssl_config_data *source,
  else
    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;
}

@@ -166,6 +175,7 @@ void Curl_free_ssl_config(struct ssl_config_data* sslc)
  Curl_safefree(sslc->cipher_list);
  Curl_safefree(sslc->egdsocket);
  Curl_safefree(sslc->random_file);
  Curl_safefree(sslc->clientcert);
}