Skip to content

Commit de511d7

Browse files
committed
Merge pull request #2535 from dscho/schannel-revoke-best-effort
Introduce and use the new "best effort" strategy for Secure Channel revoke checking
2 parents 7cb2536 + efa8463 commit de511d7

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

Documentation/config/http.txt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,11 +218,13 @@ http.sslBackend::
218218

219219
http.schannelCheckRevoke::
220220
Used to enforce or disable certificate revocation checks in cURL
221-
when http.sslBackend is set to "schannel". Defaults to `true` if
222-
unset. Only necessary to disable this if Git consistently errors
223-
and the message is about checking the revocation status of a
224-
certificate. This option is ignored if cURL lacks support for
225-
setting the relevant SSL option at runtime.
221+
when http.sslBackend is set to "schannel" via "true" and "false",
222+
respectively. Another accepted value is "best-effort" (the default)
223+
in which case revocation checks are performed, but errors due to
224+
revocation list distribution points that are offline are silently
225+
ignored, as well as errors due to certificates missing revocation
226+
list distribution points. This option is ignored if cURL lacks
227+
support for setting the relevant SSL option at runtime.
226228

227229
http.schannelUseSSLCAInfo::
228230
As of cURL v7.60.0, the Secure Channel backend can use the

http.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,13 @@ static char *cached_accept_language;
143143

144144
static char *http_ssl_backend;
145145

146-
static int http_schannel_check_revoke = 1;
146+
static int http_schannel_check_revoke_mode =
147+
#ifdef CURLSSLOPT_REVOKE_BEST_EFFORT
148+
CURLSSLOPT_REVOKE_BEST_EFFORT;
149+
#else
150+
CURLSSLOPT_NO_REVOKE;
151+
#endif
152+
147153
/*
148154
* With the backend being set to `schannel`, setting sslCAinfo would override
149155
* the Certificate Store in cURL v7.60.0 and later, which is not what we want
@@ -418,7 +424,19 @@ static int http_options(const char *var, const char *value,
418424
}
419425

420426
if (!strcmp("http.schannelcheckrevoke", var)) {
421-
http_schannel_check_revoke = git_config_bool(var, value);
427+
if (value && !strcmp(value, "best-effort")) {
428+
http_schannel_check_revoke_mode =
429+
#ifdef CURLSSLOPT_REVOKE_BEST_EFFORT
430+
CURLSSLOPT_REVOKE_BEST_EFFORT;
431+
#else
432+
CURLSSLOPT_NO_REVOKE;
433+
warning(_("%s=%s unsupported by current cURL"),
434+
var, value);
435+
#endif
436+
} else
437+
http_schannel_check_revoke_mode =
438+
(git_config_bool(var, value) ?
439+
0 : CURLSSLOPT_NO_REVOKE);
422440
return 0;
423441
}
424442

@@ -1045,8 +1063,8 @@ static CURL *get_curl_handle(void)
10451063
#endif
10461064

10471065
if (http_ssl_backend && !strcmp("schannel", http_ssl_backend) &&
1048-
!http_schannel_check_revoke) {
1049-
curl_easy_setopt(result, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NO_REVOKE);
1066+
http_schannel_check_revoke_mode) {
1067+
curl_easy_setopt(result, CURLOPT_SSL_OPTIONS, http_schannel_check_revoke_mode);
10501068
}
10511069

10521070
if (http_proactive_auth != PROACTIVE_AUTH_NONE)

0 commit comments

Comments
 (0)