mirror of
https://github.com/curl/curl.git
synced 2026-08-26 02:03:32 +03:00
ssl: set engine implicitly when a PKCS#11 URI is provided
This allows the use of PKCS#11 URI for certificates and keys without setting the corresponding type as "ENG" and the engine as "pkcs11" explicitly. If a PKCS#11 URI is provided for certificate, key, proxy_certificate or proxy_key, the corresponding type is set as "ENG" if not provided and the engine is set to "pkcs11" if not provided. Acked-by: Nikos Mavrogiannopoulos Closes #2333
This commit is contained in:
parent
c892795ea3
commit
298d2565e2
6 changed files with 109 additions and 1 deletions
|
|
@ -342,7 +342,7 @@ void parse_cert_parameter(const char *cert_parameter,
|
|||
* looks like a RFC7512 PKCS#11 URI which can be used as-is.
|
||||
* Also if cert_parameter contains no colon nor backslash, this
|
||||
* means no passphrase was given and no characters escaped */
|
||||
if(!strncmp(cert_parameter, "pkcs11:", 7) ||
|
||||
if(curl_strnequal(cert_parameter, "pkcs11:", 7) ||
|
||||
!strpbrk(cert_parameter, ":\\")) {
|
||||
*certname = strdup(cert_parameter);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -113,6 +113,19 @@ static bool is_fatal_error(CURLcode code)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if a given string is a PKCS#11 URI
|
||||
*/
|
||||
static bool is_pkcs11_uri(const char *string)
|
||||
{
|
||||
if(curl_strnequal(string, "pkcs11:", 7)) {
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __VMS
|
||||
/*
|
||||
* get_vms_file_size does what it takes to get the real size of the file
|
||||
|
|
@ -1073,6 +1086,46 @@ static CURLcode operate_do(struct GlobalConfig *global,
|
|||
my_setopt_str(curl, CURLOPT_PINNEDPUBLICKEY, config->pinnedpubkey);
|
||||
|
||||
if(curlinfo->features & CURL_VERSION_SSL) {
|
||||
/* Check if config->cert is a PKCS#11 URI and set the
|
||||
* config->cert_type if necessary */
|
||||
if(config->cert) {
|
||||
if(!config->cert_type) {
|
||||
if(is_pkcs11_uri(config->cert)) {
|
||||
config->cert_type = strdup("ENG");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if config->key is a PKCS#11 URI and set the
|
||||
* config->key_type if necessary */
|
||||
if(config->key) {
|
||||
if(!config->key_type) {
|
||||
if(is_pkcs11_uri(config->key)) {
|
||||
config->key_type = strdup("ENG");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if config->proxy_cert is a PKCS#11 URI and set the
|
||||
* config->proxy_type if necessary */
|
||||
if(config->proxy_cert) {
|
||||
if(!config->proxy_cert_type) {
|
||||
if(is_pkcs11_uri(config->proxy_cert)) {
|
||||
config->proxy_cert_type = strdup("ENG");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if config->proxy_key is a PKCS#11 URI and set the
|
||||
* config->proxy_key_type if necessary */
|
||||
if(config->proxy_key) {
|
||||
if(!config->proxy_key_type) {
|
||||
if(is_pkcs11_uri(config->proxy_key)) {
|
||||
config->proxy_key_type = strdup("ENG");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my_setopt_str(curl, CURLOPT_SSLCERT, config->cert);
|
||||
my_setopt_str(curl, CURLOPT_PROXY_SSLCERT, config->proxy_cert);
|
||||
my_setopt_str(curl, CURLOPT_SSLCERTTYPE, config->cert_type);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue