diff --git a/src/ssl.c b/src/ssl.c index bc14865ad..62fec9bf8 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -6798,7 +6798,7 @@ int wolfSSL_CTX_check_private_key(const WOLFSSL_CTX* ctx) WOLFSSL_ENTER("wolfSSL_CTX_check_private_key"); - if (ctx == NULL) { + if (ctx == NULL || ctx->certificate == NULL) { return WOLFSSL_FAILURE; } diff --git a/tests/api.c b/tests/api.c index 91f391d6a..81889c5f5 100644 --- a/tests/api.c +++ b/tests/api.c @@ -20637,8 +20637,12 @@ static void test_wolfSSL_private_keys(void) #else AssertNotNull(ctx = SSL_CTX_new(wolfSSLv23_client_method())); #endif - AssertTrue(SSL_CTX_use_certificate_file(ctx, svrCertFile, WOLFSSL_FILETYPE_PEM)); AssertTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKeyFile, WOLFSSL_FILETYPE_PEM)); + /* Have to load a cert before you can check the private key against that + * certificates public key! */ + AssertIntEQ(wolfSSL_CTX_check_private_key(ctx), WOLFSSL_FAILURE); + AssertTrue(SSL_CTX_use_certificate_file(ctx, svrCertFile, WOLFSSL_FILETYPE_PEM)); + AssertIntEQ(wolfSSL_CTX_check_private_key(ctx), WOLFSSL_SUCCESS); AssertNotNull(ssl = SSL_new(ctx)); AssertIntEQ(wolfSSL_check_private_key(ssl), WOLFSSL_SUCCESS);