mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 10:47:28 +02:00
Add ability to toggle system CA certs support.
This commit is contained in:
@ -1668,6 +1668,17 @@ add_option("WOLFSSL_OPTFLAGS"
|
|||||||
"Enable default optimization CFLAGS for the compiler (default: enabled)"
|
"Enable default optimization CFLAGS for the compiler (default: enabled)"
|
||||||
"yes" "yes;no")
|
"yes" "yes;no")
|
||||||
|
|
||||||
|
add_option("WOLFSSL_SYS_CA_CERTS"
|
||||||
|
"Enable ability to load CA certs from OS (default: enabled)"
|
||||||
|
"yes" "yes;no")
|
||||||
|
if(WOLFSSL_SYS_CA_CERTS)
|
||||||
|
if(NOT WOLFSSL_FILESYSTEM)
|
||||||
|
message(FATAL_ERROR "Cannot use system CA certs without a filesystem.")
|
||||||
|
else()
|
||||||
|
list(APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_SYS_CA_CERTS")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# FLAGS operations
|
# FLAGS operations
|
||||||
|
|
||||||
if(WOLFSSL_AESCCM)
|
if(WOLFSSL_AESCCM)
|
||||||
|
39
configure.ac
39
configure.ac
@ -1097,7 +1097,6 @@ AC_ARG_ENABLE([cryptonly],
|
|||||||
|
|
||||||
AS_IF([test "x$FIPS_VERSION" = "xrand"],[ENABLED_CRYPTONLY="yes"])
|
AS_IF([test "x$FIPS_VERSION" = "xrand"],[ENABLED_CRYPTONLY="yes"])
|
||||||
|
|
||||||
|
|
||||||
# DTLS
|
# DTLS
|
||||||
# DTLS is a prereq for the options mcast, sctp, and jni. Enabling any of those
|
# DTLS is a prereq for the options mcast, sctp, and jni. Enabling any of those
|
||||||
# without DTLS will also enable DTLS.
|
# without DTLS will also enable DTLS.
|
||||||
@ -7346,6 +7345,12 @@ AC_ARG_ENABLE([optflags],
|
|||||||
[ ENABLED_OPTFLAGS=yes ]
|
[ ENABLED_OPTFLAGS=yes ]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Adds functionality to load CA certificates from the operating system.
|
||||||
|
AC_ARG_ENABLE([sys-ca-certs],
|
||||||
|
[AS_HELP_STRING([--enable-sys-ca-certs],[Enable ability to load CA certs from OS (default: enabled)])],
|
||||||
|
[ ENABLED_SYS_CA_CERTS=$enableval ],
|
||||||
|
[ ENABLED_SYS_CA_CERTS=yes ]
|
||||||
|
)
|
||||||
|
|
||||||
# check if should run the trusted peer certs test
|
# check if should run the trusted peer certs test
|
||||||
# (for now checking both C_FLAGS and C_EXTRA_FLAGS)
|
# (for now checking both C_FLAGS and C_EXTRA_FLAGS)
|
||||||
@ -7408,6 +7413,24 @@ esac
|
|||||||
# Update ENABLE_* variables #
|
# Update ENABLE_* variables #
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
|
if test "x$ENABLED_LEANPSK" = "xyes" || test "x$ENABLED_CERTS" = "xno" || \
|
||||||
|
test "x$ENABLED_ASN" = "xno"
|
||||||
|
then
|
||||||
|
ENABLED_CERTS=no
|
||||||
|
ENABLED_ASN=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$ENABLED_SYS_CA_CERTS" = "xyes"
|
||||||
|
then
|
||||||
|
if test "x$ENABLED_FILESYSTEM" = "xno"
|
||||||
|
then
|
||||||
|
ENABLED_SYS_CA_CERTS="no"
|
||||||
|
elif test "x$ENABLED_CERTS" = "xno"
|
||||||
|
then
|
||||||
|
ENABLED_SYS_CA_CERTS="no"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if test "x$ENABLED_WOLFCLU" = "xyes"
|
if test "x$ENABLED_WOLFCLU" = "xyes"
|
||||||
then
|
then
|
||||||
if test "x$ENABLED_CERTGEN" = "xno"
|
if test "x$ENABLED_CERTGEN" = "xno"
|
||||||
@ -7621,6 +7644,14 @@ AS_IF([test "x$ENABLED_16BIT" = "xyes" && \
|
|||||||
################################################################################
|
################################################################################
|
||||||
# Update CFLAGS based on options #
|
# Update CFLAGS based on options #
|
||||||
################################################################################
|
################################################################################
|
||||||
|
AS_IF([test "x$ENABLED_CERTS" = "xno"],
|
||||||
|
[AM_CFLAGS="$AM_CFLAGS -DNO_CERTS"])
|
||||||
|
|
||||||
|
AS_IF([test "x$ENABLED_ASN" = "xno"],
|
||||||
|
[AM_CFLAGS="$AM_CFLAGS -DNO_ASN"])
|
||||||
|
|
||||||
|
AS_IF([test "x$ENABLED_SYS_CA_CERTS" = "xyes"],
|
||||||
|
[AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SYS_CA_CERTS"])
|
||||||
|
|
||||||
AS_IF([test "x$ENABLED_ALTNAMES" = "xyes"],
|
AS_IF([test "x$ENABLED_ALTNAMES" = "xyes"],
|
||||||
[AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ALT_NAMES"])
|
[AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ALT_NAMES"])
|
||||||
@ -7894,11 +7925,6 @@ fi
|
|||||||
|
|
||||||
AS_IF([test "x$ENABLED_WOLFSSH" = "xyes"],[AM_CPPFLAGS="$AM_CPPFLAGS -DWOLFSSL_WOLFSSH"])
|
AS_IF([test "x$ENABLED_WOLFSSH" = "xyes"],[AM_CPPFLAGS="$AM_CPPFLAGS -DWOLFSSL_WOLFSSH"])
|
||||||
|
|
||||||
if test "x$ENABLED_CERTS" = "xno" || test "x$ENABLED_LEANPSK" = "xyes" || test "x$ENABLED_ASN" = "xno"; then
|
|
||||||
AM_CFLAGS="$AM_CFLAGS -DNO_ASN -DNO_CERTS"
|
|
||||||
ENABLED_ASN=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
# only allow secure renegotiation info with TLSV12 and ASN
|
# only allow secure renegotiation info with TLSV12 and ASN
|
||||||
if test "x$ENABLED_ASN" = "xno" || \
|
if test "x$ENABLED_ASN" = "xno" || \
|
||||||
test "x$ENABLED_TLSV12" = "xno" || \
|
test "x$ENABLED_TLSV12" = "xno" || \
|
||||||
@ -8664,6 +8690,7 @@ echo " * IoT-Safe: $ENABLED_IOTSAFE"
|
|||||||
echo " * IoT-Safe HWRNG: $ENABLED_IOTSAFE_HWRNG"
|
echo " * IoT-Safe HWRNG: $ENABLED_IOTSAFE_HWRNG"
|
||||||
echo " * NXP SE050: $ENABLED_SE050"
|
echo " * NXP SE050: $ENABLED_SE050"
|
||||||
echo " * PSA: $ENABLED_PSA"
|
echo " * PSA: $ENABLED_PSA"
|
||||||
|
echo " * System CA certs: $ENABLED_SYS_CA_CERTS"
|
||||||
echo ""
|
echo ""
|
||||||
echo "---"
|
echo "---"
|
||||||
|
|
||||||
|
@ -1318,7 +1318,7 @@ static const char* client_usage_msg[][70] = {
|
|||||||
#ifdef WOLFSSL_SRTP
|
#ifdef WOLFSSL_SRTP
|
||||||
"--srtp <profile> (default is SRTP_AES128_CM_SHA1_80)\n", /* 71 */
|
"--srtp <profile> (default is SRTP_AES128_CM_SHA1_80)\n", /* 71 */
|
||||||
#endif
|
#endif
|
||||||
#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS)
|
#ifdef WOLFSSL_SYS_CA_CERTS
|
||||||
"--sys-ca-certs Load system CA certs for server cert verification\n", /* 72 */
|
"--sys-ca-certs Load system CA certs for server cert verification\n", /* 72 */
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
@ -1767,7 +1767,7 @@ static void Usage(void)
|
|||||||
printf("%s", msg[++msgid]); /* more --pqc options */
|
printf("%s", msg[++msgid]); /* more --pqc options */
|
||||||
printf("%s", msg[++msgid]); /* more --pqc options */
|
printf("%s", msg[++msgid]); /* more --pqc options */
|
||||||
#endif
|
#endif
|
||||||
#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS)
|
#ifdef WOLFSSL_SYS_CA_CERTS
|
||||||
printf("%s", msg[++msgid]); /* --sys-ca-certs */
|
printf("%s", msg[++msgid]); /* --sys-ca-certs */
|
||||||
#endif
|
#endif
|
||||||
#ifdef WOLFSSL_SRTP
|
#ifdef WOLFSSL_SRTP
|
||||||
@ -1903,7 +1903,9 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
|
|||||||
#ifdef WOLFSSL_DTLS_CID
|
#ifdef WOLFSSL_DTLS_CID
|
||||||
{"cid", 2, 262},
|
{"cid", 2, 262},
|
||||||
#endif /* WOLFSSL_DTLS_CID */
|
#endif /* WOLFSSL_DTLS_CID */
|
||||||
|
#ifdef WOLFSSL_SYS_CA_CERTS
|
||||||
{ "sys-ca-certs", 0, 263 },
|
{ "sys-ca-certs", 0, 263 },
|
||||||
|
#endif
|
||||||
{ 0, 0, 0 }
|
{ 0, 0, 0 }
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@ -2013,7 +2015,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
|
|||||||
char* pqcAlg = NULL;
|
char* pqcAlg = NULL;
|
||||||
int exitWithRet = 0;
|
int exitWithRet = 0;
|
||||||
int loadCertKeyIntoSSLObj = 0;
|
int loadCertKeyIntoSSLObj = 0;
|
||||||
#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS)
|
#ifdef WOLFSSL_SYS_CA_CERTS
|
||||||
byte loadSysCaCerts = 0;
|
byte loadSysCaCerts = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -2716,7 +2718,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
|
|||||||
pqcAlg = myoptarg;
|
pqcAlg = myoptarg;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS)
|
#ifdef WOLFSSL_SYS_CA_CERTS
|
||||||
case 263:
|
case 263:
|
||||||
loadSysCaCerts = 1;
|
loadSysCaCerts = 1;
|
||||||
break;
|
break;
|
||||||
@ -2977,12 +2979,12 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS)
|
#ifdef WOLFSSL_SYS_CA_CERTS
|
||||||
if (loadSysCaCerts &&
|
if (loadSysCaCerts &&
|
||||||
wolfSSL_CTX_load_system_CA_certs(ctx) != WOLFSSL_SUCCESS) {
|
wolfSSL_CTX_load_system_CA_certs(ctx) != WOLFSSL_SUCCESS) {
|
||||||
err_sys("wolfSSL_CTX_load_system_CA_certs failed");
|
err_sys("wolfSSL_CTX_load_system_CA_certs failed");
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* WOLFSSL_SYS_CA_CERTS */
|
||||||
|
|
||||||
if (minVersion != CLIENT_INVALID_VERSION) {
|
if (minVersion != CLIENT_INVALID_VERSION) {
|
||||||
#ifdef WOLFSSL_DTLS
|
#ifdef WOLFSSL_DTLS
|
||||||
|
11
src/ssl.c
11
src/ssl.c
@ -183,6 +183,9 @@
|
|||||||
* ClientCache by default for backwards compatibility. This define will
|
* ClientCache by default for backwards compatibility. This define will
|
||||||
* make wolfSSL_get_session return a reference to ssl->session. The returned
|
* make wolfSSL_get_session return a reference to ssl->session. The returned
|
||||||
* pointer will be freed with the related WOLFSSL object.
|
* pointer will be freed with the related WOLFSSL object.
|
||||||
|
* WOLFSSL_SYS_CA_CERTS
|
||||||
|
* Enables ability to load system CA certs from the OS via
|
||||||
|
* wolfSSL_CTX_load_system_CA_certs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define WOLFSSL_EVP_INCLUDED
|
#define WOLFSSL_EVP_INCLUDED
|
||||||
@ -8050,6 +8053,8 @@ int wolfSSL_CTX_load_verify_locations(WOLFSSL_CTX* ctx, const char* file,
|
|||||||
return WS_RETURN_CODE(ret,WOLFSSL_FAILURE);
|
return WS_RETURN_CODE(ret,WOLFSSL_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SYS_CA_CERTS
|
||||||
|
|
||||||
#ifdef USE_WINDOWS_API
|
#ifdef USE_WINDOWS_API
|
||||||
|
|
||||||
static int LoadSystemCaCertsWindows(WOLFSSL_CTX* ctx, byte* loaded)
|
static int LoadSystemCaCertsWindows(WOLFSSL_CTX* ctx, byte* loaded)
|
||||||
@ -8245,6 +8250,8 @@ int wolfSSL_CTX_load_system_CA_certs(WOLFSSL_CTX* ctx)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* WOLFSSL_SYS_CA_CERTS */
|
||||||
|
|
||||||
#ifdef WOLFSSL_TRUST_PEER_CERT
|
#ifdef WOLFSSL_TRUST_PEER_CERT
|
||||||
/* Used to specify a peer cert to match when connecting
|
/* Used to specify a peer cert to match when connecting
|
||||||
ctx : the ctx structure to load in peer cert
|
ctx : the ctx structure to load in peer cert
|
||||||
@ -16355,7 +16362,7 @@ cleanup:
|
|||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
|
|
||||||
#ifndef NO_FILESYSTEM
|
#ifdef WOLFSSL_SYS_CA_CERTS
|
||||||
/*
|
/*
|
||||||
* This is an OpenSSL compatibility layer function, but it doesn't mirror
|
* This is an OpenSSL compatibility layer function, but it doesn't mirror
|
||||||
* the exact functionality of its OpenSSL counterpart. We don't support the
|
* the exact functionality of its OpenSSL counterpart. We don't support the
|
||||||
@ -16383,7 +16390,7 @@ cleanup:
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif /* !NO_FILESYSTEM */
|
#endif /* WOLFSSL_SYS_CA_CERTS */
|
||||||
|
|
||||||
#if defined(WOLFCRYPT_HAVE_SRP) && !defined(NO_SHA256) \
|
#if defined(WOLFCRYPT_HAVE_SRP) && !defined(NO_SHA256) \
|
||||||
&& !defined(WC_NO_RNG)
|
&& !defined(WC_NO_RNG)
|
||||||
|
@ -1350,7 +1350,7 @@ static int test_wolfSSL_CTX_load_system_CA_certs(void)
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS) && !defined(NO_WOLFSSL_CLIENT)
|
#if defined(WOLFSSL_SYS_CA_CERTS) && !defined(NO_WOLFSSL_CLIENT)
|
||||||
WOLFSSL_CTX* ctx;
|
WOLFSSL_CTX* ctx;
|
||||||
byte dirValid = 0;
|
byte dirValid = 0;
|
||||||
|
|
||||||
@ -1404,7 +1404,7 @@ static int test_wolfSSL_CTX_load_system_CA_certs(void)
|
|||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA */
|
||||||
|
|
||||||
wolfSSL_CTX_free(ctx);
|
wolfSSL_CTX_free(ctx);
|
||||||
#endif /* !NO_FILESYSTEM && !NO_CERTS && !NO_WOLFSSL_CLIENT */
|
#endif /* WOLFSSL_SYS_CA_CERTS && !NO_WOLFSSL_CLIENT */
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -2857,6 +2857,17 @@ extern void uITRON4_free(void *p) ;
|
|||||||
#define WOLFSSL_ASYNC_IO
|
#define WOLFSSL_ASYNC_IO
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SYS_CA_CERTS
|
||||||
|
#ifdef NO_FILESYSTEM
|
||||||
|
#warning "Turning off WOLFSSL_SYS_CA_CERTS b/c NO_FILESYSTEM is defined."
|
||||||
|
#undef WOLFSSL_SYS_CA_CERTS
|
||||||
|
#endif
|
||||||
|
#ifdef NO_CERTS
|
||||||
|
#warning "Turning off WOLFSSL_SYS_CA_CERTS b/c NO_CERTS is defined."
|
||||||
|
#undef WOLFSSL_SYS_CA_CERTS
|
||||||
|
#endif
|
||||||
|
#endif /* WOLFSSL_SYS_CA_CERTS */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user