diff --git a/src/internal.c b/src/internal.c index 8fa1a44d8..f89c4d872 100644 --- a/src/internal.c +++ b/src/internal.c @@ -12116,11 +12116,21 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, args->count = args->totalCerts; args->certIdx = 0; /* select peer cert (first one) */ - if (args->count == 0 && (ssl->options.mutualAuth || - (ssl->options.failNoCert && IsAtLeastTLSv1_3(ssl->version))) && - ssl->options.side == WOLFSSL_SERVER_END) { - ret = NO_PEER_CERT; - DoCertFatalAlert(ssl, ret); + if (args->count == 0) { + /* Empty certificate message. */ + if ((ssl->options.side == WOLFSSL_SERVER_END) && + (ssl->options.mutualAuth || (ssl->options.failNoCert && + IsAtLeastTLSv1_3(ssl->version)))) { + WOLFSSL_MSG("No peer cert from Client"); + ret = NO_PEER_CERT; + DoCertFatalAlert(ssl, ret); + } + else if ((ssl->options.side == WOLFSSL_CLIENT_END) && + IsAtLeastTLSv1_3(ssl->version)) { + WOLFSSL_MSG("No peer cert from Server"); + ret = NO_PEER_CERT; + SendAlert(ssl, alert_fatal, decode_error); + } } args->dCertInit = 0;