mirror of
https://github.com/git-for-windows/git.git
synced 2026-03-18 07:33:26 -05:00
Merge pull request #3293 from pascalmuller/http-support-automatically-sending-client-certificate
http: Add support for enabling automatic sending of SSL client certificate
This commit is contained in:
@@ -205,6 +205,11 @@ http.schannelUseSSLCAInfo::
|
||||
when the `schannel` backend was configured via `http.sslBackend`,
|
||||
unless `http.schannelUseSSLCAInfo` overrides this behavior.
|
||||
|
||||
http.sslAutoClientCert::
|
||||
As of cURL v7.77.0, the Secure Channel backend won't automatically
|
||||
send client certificates from the Windows Certificate Store anymore.
|
||||
To opt in to the old behavior, http.sslAutoClientCert can be set.
|
||||
|
||||
http.pinnedPubkey::
|
||||
Public key of the https service. It may either be the filename of
|
||||
a PEM or DER encoded public key file or a string starting with
|
||||
|
||||
@@ -143,4 +143,12 @@
|
||||
#define GIT_CURL_HAVE_CURLOPT_PROTOCOLS_STR 1
|
||||
#endif
|
||||
|
||||
/**
|
||||
* CURLSSLOPT_AUTO_CLIENT_CERT was added in 7.77.0, released in May
|
||||
* 2021.
|
||||
*/
|
||||
#if LIBCURL_VERSION_NUM >= 0x074d00
|
||||
#define GIT_CURL_HAVE_CURLSSLOPT_AUTO_CLIENT_CERT
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
26
http.c
26
http.c
@@ -153,6 +153,8 @@ static int http_schannel_check_revoke_mode =
|
||||
*/
|
||||
static int http_schannel_use_ssl_cainfo;
|
||||
|
||||
static int http_auto_client_cert;
|
||||
|
||||
size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_)
|
||||
{
|
||||
size_t size = eltsize * nmemb;
|
||||
@@ -430,6 +432,11 @@ static int http_options(const char *var, const char *value,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp("http.sslautoclientcert", var)) {
|
||||
http_auto_client_cert = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp("http.minsessions", var)) {
|
||||
min_curl_sessions = git_config_int(var, value, ctx->kvi);
|
||||
if (min_curl_sessions > 1)
|
||||
@@ -1032,13 +1039,24 @@ static CURL *get_curl_handle(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (http_ssl_backend && !strcmp("schannel", http_ssl_backend) &&
|
||||
http_schannel_check_revoke_mode) {
|
||||
if (http_ssl_backend && !strcmp("schannel", http_ssl_backend)) {
|
||||
long ssl_options = 0;
|
||||
if (http_schannel_check_revoke_mode) {
|
||||
#ifdef GIT_CURL_HAVE_CURLSSLOPT_NO_REVOKE
|
||||
curl_easy_setopt(result, CURLOPT_SSL_OPTIONS, http_schannel_check_revoke_mode);
|
||||
ssl_options |= http_schannel_check_revoke_mode;
|
||||
#else
|
||||
warning(_("CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"));
|
||||
warning(_("CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"));
|
||||
#endif
|
||||
}
|
||||
|
||||
if (http_auto_client_cert) {
|
||||
#ifdef GIT_CURL_HAVE_CURLSSLOPT_AUTO_CLIENT_CERT
|
||||
ssl_options |= CURLSSLOPT_AUTO_CLIENT_CERT;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (ssl_options)
|
||||
curl_easy_setopt(result, CURLOPT_SSL_OPTIONS, ssl_options);
|
||||
}
|
||||
|
||||
if (http_proactive_auth)
|
||||
|
||||
Reference in New Issue
Block a user