mirror of
https://github.com/curl/curl.git
synced 2026-07-30 14:38:58 +03:00
parent
a337355487
commit
ede125b7b7
20 changed files with 131 additions and 1 deletions
|
|
@ -349,6 +349,10 @@ static CURLcode dohprobe(struct Curl_easy *data,
|
|||
ERROR_CHECK_SETOPT(CURLOPT_SSL_CTX_FUNCTION, data->set.ssl.fsslctx);
|
||||
if(data->set.ssl.fsslctxp)
|
||||
ERROR_CHECK_SETOPT(CURLOPT_SSL_CTX_DATA, data->set.ssl.fsslctxp);
|
||||
if(data->set.str[STRING_SSL_EC_CURVES]) {
|
||||
ERROR_CHECK_SETOPT(CURLOPT_SSL_EC_CURVES,
|
||||
data->set.str[STRING_SSL_EC_CURVES]);
|
||||
}
|
||||
|
||||
doh->set.fmultidone = Curl_doh_done;
|
||||
doh->set.dohfor = data; /* identify for which transfer this is done */
|
||||
|
|
|
|||
|
|
@ -278,6 +278,7 @@ struct curl_easyoption Curl_easyopts[] = {
|
|||
{"SSL_CIPHER_LIST", CURLOPT_SSL_CIPHER_LIST, CURLOT_STRING, 0},
|
||||
{"SSL_CTX_DATA", CURLOPT_SSL_CTX_DATA, CURLOT_CBPTR, 0},
|
||||
{"SSL_CTX_FUNCTION", CURLOPT_SSL_CTX_FUNCTION, CURLOT_FUNCTION, 0},
|
||||
{"SSL_EC_CURVES", CURLOPT_SSL_EC_CURVES, CURLOT_STRING, 0},
|
||||
{"SSL_ENABLE_ALPN", CURLOPT_SSL_ENABLE_ALPN, CURLOT_LONG, 0},
|
||||
{"SSL_ENABLE_NPN", CURLOPT_SSL_ENABLE_NPN, CURLOT_LONG, 0},
|
||||
{"SSL_FALSESTART", CURLOPT_SSL_FALSESTART, CURLOT_LONG, 0},
|
||||
|
|
@ -341,6 +342,6 @@ struct curl_easyoption Curl_easyopts[] = {
|
|||
*/
|
||||
int Curl_easyopts_check(void)
|
||||
{
|
||||
return (CURLOPT_LASTENTRY != (297 + 1));
|
||||
return (CURLOPT_LASTENTRY != (298 + 1));
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -2241,6 +2241,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
|||
break;
|
||||
#endif
|
||||
|
||||
case CURLOPT_SSL_EC_CURVES:
|
||||
/*
|
||||
* Set accepted curves in SSL connection setup.
|
||||
* Specify colon-delimited list of curve algorithm names.
|
||||
*/
|
||||
result = Curl_setstropt(&data->set.str[STRING_SSL_EC_CURVES],
|
||||
va_arg(param, char *));
|
||||
break;
|
||||
#endif
|
||||
case CURLOPT_IPRESOLVE:
|
||||
arg = va_arg(param, long);
|
||||
|
|
|
|||
|
|
@ -3616,6 +3616,7 @@ static CURLcode create_conn(struct Curl_easy *data,
|
|||
data->set.ssl.primary.pinned_key =
|
||||
data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];
|
||||
data->set.ssl.primary.cert_blob = data->set.blobs[BLOB_CERT_ORIG];
|
||||
data->set.ssl.primary.curves = data->set.str[STRING_SSL_EC_CURVES];
|
||||
|
||||
#ifndef CURL_DISABLE_PROXY
|
||||
data->set.proxy_ssl.primary.CApath = data->set.str[STRING_SSL_CAPATH_PROXY];
|
||||
|
|
|
|||
|
|
@ -230,6 +230,7 @@ struct ssl_primary_config {
|
|||
char *cipher_list13; /* list of TLS 1.3 cipher suites to use */
|
||||
char *pinned_key;
|
||||
struct curl_blob *cert_blob;
|
||||
char *curves; /* list of curves to use */
|
||||
BIT(verifypeer); /* set TRUE if this is desired */
|
||||
BIT(verifyhost); /* set TRUE if CN/SAN must match hostname */
|
||||
BIT(verifystatus); /* set TRUE if certificate status must be checked */
|
||||
|
|
@ -1565,6 +1566,7 @@ enum dupstring {
|
|||
STRING_DNS_INTERFACE,
|
||||
STRING_DNS_LOCAL_IP4,
|
||||
STRING_DNS_LOCAL_IP6,
|
||||
STRING_SSL_EC_CURVES,
|
||||
|
||||
/* -- end of null-terminated strings -- */
|
||||
|
||||
|
|
|
|||
|
|
@ -200,6 +200,10 @@
|
|||
!defined(OPENSSL_IS_BORINGSSL))
|
||||
#define HAVE_SSL_CTX_SET_CIPHERSUITES
|
||||
#define HAVE_SSL_CTX_SET_POST_HANDSHAKE_AUTH
|
||||
/* SET_EC_CURVES available under the same preconditions: see
|
||||
* https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html
|
||||
*/
|
||||
#define HAVE_SSL_CTX_SET_EC_CURVES
|
||||
#endif
|
||||
|
||||
#if defined(LIBRESSL_VERSION_NUMBER)
|
||||
|
|
@ -2800,6 +2804,18 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
|
|||
SSL_CTX_set_post_handshake_auth(backend->ctx, 1);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SSL_CTX_SET_EC_CURVES
|
||||
{
|
||||
char *curves = SSL_CONN_CONFIG(curves);
|
||||
if(curves) {
|
||||
if(!SSL_CTX_set1_curves_list(backend->ctx, curves)) {
|
||||
failf(data, "failed setting curves list: '%s'", curves);
|
||||
return CURLE_SSL_CIPHER;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OPENSSL_SRP
|
||||
if(ssl_authtype == CURL_TLSAUTH_SRP) {
|
||||
char * const ssl_username = SSL_SET_OPTION(username);
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ Curl_ssl_config_matches(struct ssl_primary_config *data,
|
|||
Curl_safe_strcasecompare(data->egdsocket, needle->egdsocket) &&
|
||||
Curl_safe_strcasecompare(data->cipher_list, needle->cipher_list) &&
|
||||
Curl_safe_strcasecompare(data->cipher_list13, needle->cipher_list13) &&
|
||||
Curl_safe_strcasecompare(data->curves, needle->curves) &&
|
||||
Curl_safe_strcasecompare(data->pinned_key, needle->pinned_key))
|
||||
return TRUE;
|
||||
|
||||
|
|
@ -164,6 +165,7 @@ Curl_clone_primary_ssl_config(struct ssl_primary_config *source,
|
|||
CLONE_STRING(cipher_list);
|
||||
CLONE_STRING(cipher_list13);
|
||||
CLONE_STRING(pinned_key);
|
||||
CLONE_STRING(curves);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -179,6 +181,7 @@ void Curl_free_primary_ssl_config(struct ssl_primary_config *sslc)
|
|||
Curl_safefree(sslc->cipher_list13);
|
||||
Curl_safefree(sslc->pinned_key);
|
||||
Curl_safefree(sslc->cert_blob);
|
||||
Curl_safefree(sslc->curves);
|
||||
}
|
||||
|
||||
#ifdef USE_SSL
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue