wolfSSL_CTX_load_verify_locations(): set up with OpenSSL-compatible behavior (WOLFSSL_LOAD_FLAG_IGNORE_ERR).

This commit is contained in:
Daniel Pouzzner
2024-06-13 17:46:04 -05:00
parent 2d370f3e4e
commit 62db3533ae

View File

@ -2872,9 +2872,22 @@ WOLFSSL_ABI
int wolfSSL_CTX_load_verify_locations(WOLFSSL_CTX* ctx, const char* file, int wolfSSL_CTX_load_verify_locations(WOLFSSL_CTX* ctx, const char* file,
const char* path) const char* path)
{ {
/* Load using default flags/options. */ /* We want to keep trying to load more CA certs even if one cert in the
* directory is bad and can't be used (e.g. if one is expired), and we
* want to return success if any were successfully loaded (mimicking
* OpenSSL SSL_CTX_load_verify_locations() semantics), so we use
* WOLFSSL_LOAD_FLAG_IGNORE_ERR. OpenSSL (as of v3.3.2) actually
* returns success even if no certs are loaded (e.g. because the
* supplied "path" doesn't exist or access is prohibited), and only
* returns failure if the "file" is non-null and fails to load.
*
* Note that if a file is supplied and can't be successfully loaded, the
* overall call fails and the path is never even evaluated. This is
* consistent with OpenSSL behavior.
*/
int ret = wolfSSL_CTX_load_verify_locations_ex(ctx, file, path, int ret = wolfSSL_CTX_load_verify_locations_ex(ctx, file, path,
WOLFSSL_LOAD_VERIFY_DEFAULT_FLAGS); WOLFSSL_LOAD_VERIFY_DEFAULT_FLAGS | WOLFSSL_LOAD_FLAG_IGNORE_ERR);
/* Return 1 on success or 0 on failure. */ /* Return 1 on success or 0 on failure. */
return WS_RETURN_CODE(ret, 0); return WS_RETURN_CODE(ret, 0);