diff --git a/src/internal.c b/src/internal.c index afc634272..b66d3f311 100644 --- a/src/internal.c +++ b/src/internal.c @@ -72,6 +72,10 @@ * less). On the other hand, if a valid SessionID is collected, forged * clientHello messages will consume resources on the server. * This define is turned off by default. + * WOLFSSL_HOSTNAME_VERIFY_ALT_NAME_ONLY + * Verify hostname/ip address using alternate name (SAN) only and do not + * use the common name. Forces use of the alternate name, so certificates + * missing SAN will be rejected during the handshake */ @@ -10897,6 +10901,7 @@ int CheckHostName(DecodedCert* dCert, const char *domainName, size_t domainNameL ret = 0; } +#ifndef WOLFSSL_HOSTNAME_VERIFY_ALT_NAME_ONLY if (checkCN == 1) { if (MatchDomainName(dCert->subjectCN, dCert->subjectCNLen, domainName) == 1) { @@ -10906,6 +10911,7 @@ int CheckHostName(DecodedCert* dCert, const char *domainName, size_t domainNameL WOLFSSL_MSG("DomainName match on common name failed"); } } +#endif /* !WOLFSSL_HOSTNAME_VERIFY_ALT_NAME_ONLY */ return ret; } @@ -11730,6 +11736,7 @@ int DoVerifyCallback(WOLFSSL_CERT_MANAGER* cm, WOLFSSL* ssl, int ret, } } } + #ifndef WOLFSSL_HOSTNAME_VERIFY_ALT_NAME_ONLY else { if (args->dCert->subjectCN) { if (MatchDomainName(args->dCert->subjectCN, @@ -11741,6 +11748,13 @@ int DoVerifyCallback(WOLFSSL_CERT_MANAGER* cm, WOLFSSL* ssl, int ret, } } } + #else + else { + if (ret == 0) { + ret = DOMAIN_NAME_MISMATCH; + } + } + #endif /* !WOLFSSL_HOSTNAME_VERIFY_ALT_NAME_ONLY */ } /* perform IP address check on the peer certificate */