From: Lealem Amedie Date: Fri, 5 Jan 2024 20:12:53 +0000 (-0700) Subject: wolfssl: load certificate *chain* for PEM client certs X-Git-Tag: curl-8_6_0~138 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=afdb6c2d34c2e7f4e6e31acaa0df029023f96b05;p=thirdparty%2Fcurl.git wolfssl: load certificate *chain* for PEM client certs Closes #12634 --- diff --git a/lib/vtls/wolfssl.c b/lib/vtls/wolfssl.c index 998008ec7b..a3c017ceaa 100644 --- a/lib/vtls/wolfssl.c +++ b/lib/vtls/wolfssl.c @@ -583,12 +583,25 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) if(ssl_config->primary.clientcert && ssl_config->key) { int file_type = do_file_type(ssl_config->cert_type); - if(wolfSSL_CTX_use_certificate_file(backend->ctx, - ssl_config->primary.clientcert, - file_type) != 1) { - failf(data, "unable to use client certificate (no key or wrong pass" - " phrase?)"); - return CURLE_SSL_CONNECT_ERROR; + if(file_type == WOLFSSL_FILETYPE_PEM) { + if(wolfSSL_CTX_use_certificate_chain_file(backend->ctx, + ssl_config->primary.clientcert) + != 1) { + failf(data, "unable to use client certificate"); + return CURLE_SSL_CONNECT_ERROR; + } + } + else if(file_type == WOLFSSL_FILETYPE_ASN1) { + if(wolfSSL_CTX_use_certificate_file(backend->ctx, + ssl_config->primary.clientcert, + file_type) != 1) { + failf(data, "unable to use client certificate"); + return CURLE_SSL_CONNECT_ERROR; + } + } + else { + failf(data, "unknown cert type"); + return CURLE_BAD_FUNCTION_ARGUMENT; } file_type = do_file_type(ssl_config->key_type);