Skip to content

Commit

Permalink
schannel: when importing PFX, disable key persistence
Browse files Browse the repository at this point in the history
By default, the PFXImportCertStore API persists the key in the user's
key store (as though the certificate was being imported for permanent,
ongoing use.)

The documentation specifies that keys that are not to be persisted
should be imported with the flag `PKCS12_NO_PERSIST_KEY`.
NOTE: this flag is only supported on versions of Windows newer than XP
and Server 2003.

Fixes #9300
Closes #9363
  • Loading branch information
DHowett authored and bagder committed Aug 25, 2022
1 parent 3f98eaa commit 70d010d
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion lib/vtls/schannel.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,10 @@
#define ALG_CLASS_DHASH ALG_CLASS_HASH
#endif

#ifndef PKCS12_NO_PERSIST_KEY
#define PKCS12_NO_PERSIST_KEY 0x00008000
#endif

static Curl_recv schannel_recv;
static Curl_send schannel_send;

Expand Down Expand Up @@ -676,7 +680,13 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
else
pszPassword[0] = 0;

cert_store = PFXImportCertStore(&datablob, pszPassword, 0);
if(curlx_verify_windows_version(6, 0, 0, PLATFORM_WINNT,
VERSION_GREATER_THAN_EQUAL))
cert_store = PFXImportCertStore(&datablob, pszPassword,
PKCS12_NO_PERSIST_KEY);
else
cert_store = PFXImportCertStore(&datablob, pszPassword, 0);

free(pszPassword);
}
if(!blob)
Expand Down

0 comments on commit 70d010d

Please sign in to comment.