--- ./lib/vtls/openssl.c.orig 2025-11-05 01:00:46.000000000 -0600 +++ ./lib/vtls/openssl.c 2026-01-07 16:51:14.135634096 -0600 @@ -3560,6 +3560,7 @@ X509_STORE *store; /* cached X509 store or NULL if none */ struct curltime time; /* when the cached store was created */ BIT(store_is_empty); /* no certs/paths/blobs are in the store */ + BIT(no_partialchain); /* keep partial chain state */ }; static void oss_x509_share_free(void *key, size_t key_len, void *p) @@ -3594,9 +3595,14 @@ static bool ossl_cached_x509_store_different(struct Curl_cfilter *cf, + const struct Curl_easy *data, const struct ossl_x509_share *mb) { struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf); + struct ssl_config_data *ssl_config = + Curl_ssl_cf_get_config(cf, CURL_UNCONST(data)); + if(mb->no_partialchain != ssl_config->no_partialchain) + return TRUE; if(!mb->CAfile || !conn_config->CAfile) return mb->CAfile != conn_config->CAfile; @@ -3618,7 +3624,7 @@ sizeof(MPROTO_OSSL_X509_KEY)-1) : NULL; if(share && share->store && !ossl_cached_x509_store_expired(data, share) && - !ossl_cached_x509_store_different(cf, share)) { + !ossl_cached_x509_store_different(cf, data, share)) { store = share->store; *pempty = share->store_is_empty; } @@ -3657,6 +3663,8 @@ if(X509_STORE_up_ref(store)) { char *CAfile = NULL; + struct ssl_config_data *ssl_config = + Curl_ssl_cf_get_config(cf, CURL_UNCONST(data)); if(conn_config->CAfile) { CAfile = strdup(conn_config->CAfile); @@ -3675,6 +3683,7 @@ share->store = store; share->store_is_empty = is_empty; share->CAfile = CAfile; + share->no_partialchain = ssl_config->no_partialchain; } }